我已经定义了一个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
关于如何解决这个问题有什么线索和/或提示吗?
谢谢
查尔斯
最佳答案
创建同时匹配ident
和IDENT
的COUNT
规则,并在解析器规则中使用该规则(而不是使用IDENT
):
stats_statement
: STATS ident ASSIGN_SYM functions_stats
;
functions_stats
: COUNT LPAREN ident RPAREN
;
ident
: COUNT
| IDENT
;