我在使用这个语法时遇到了麻烦
prog : start line* end ;
start : SIMBOL START NUM NL ;
SIMBOL : [a-zA-Z]+ ;
NUM : [0-9]+ ;
START : S T A R T ;
WS : [ \t]+ -> skip ;
NL : '\r'? '\n' ;
fragment A : [aA] ;
fragment B : [bB] ;
fragment C : [cC] ;
fragment D : [dD] ;
fragment E : [eE] ;
fragment F : [fF] ;
fragment G : [gG] ;
fragment H : [hH] ;
fragment I : [iI] ;
fragment J : [jJ] ;
fragment K : [kK] ;
fragment L : [lL] ;
fragment M : [mM] ;
fragment N : [nN] ;
fragment O : [oO] ;
fragment P : [pP] ;
fragment Q : [qQ] ;
fragment R : [rR] ;
fragment S : [sS] ;
fragment T : [tT] ;
fragment U : [uU] ;
fragment V : [vV] ;
fragment W : [wW] ;
fragment X : [xX] ;
fragment Y : [yY] ;
fragment Z : [zZ] ;
我正在测试的字符串如下
test start 1010
add 30
end simbol
'test'字符与SIMBOL规则匹配,这是正确的。问题是“开始”不匹配。
通过使用ErrorListener,我在syntaxError方法
中得到以下消息mismatched input 'start' expecting START
在位置1:8,这是“开始”一词的开头。
我是ANTLR的新手,我无法弄清楚我错在哪里。
BTW,我正在使用ANTLR 4.7.1,它在python 3中运行正常。
答案 0 :(得分:1)
我完全忘记了词法分析器的规则很重要。我将SIMBOL规则置于START规则之上,以便“开始”#39;单词作为SIMBOL令牌而不是START令牌不匹配。
我通过将SIMBOL规则移到语法的末尾来解决问题。