我已经定义了一个antlr grammer:

grammar test5;

stats_statement
:
    STATS IDENT ASSIGN_SYM functions_stats

;

functions_stats

:   COUNT LPAREN IDENT RPAREN
;

STATS
:   'STATS'
;

COUNT
:   'count'
;

IDENT
:   (LETTER | '_') (LETTER | DIGIT | '_')*
;

ASSIGN_SYM
: ':='
;

COMMA_SYM
: ','
;

SEMI_SYM
: ';'
;

LPAREN
: '(' ;

RPAREN
: ')' ;

fragment
LETTER : ('a'..'z' | 'A'..'Z') ;

fragment
DIGIT : '0'..'9';

它有一个内置函数“count”。但如果我使用以下测试字符串:
STATS count:=count(col1)

解析器将返回一个错误,说明:
mismatched input 'count' expecting IDENT

关于如何解决这个问题有什么线索和/或提示吗?
谢谢
查尔斯

最佳答案

创建同时匹配identIDENTCOUNT规则,并在解析器规则中使用该规则(而不是使用IDENT):

stats_statement
 : STATS ident ASSIGN_SYM functions_stats
 ;

functions_stats
 :   COUNT LPAREN ident RPAREN
 ;

ident
 : COUNT
 | IDENT
 ;

10-05 19:02