ANTLR报line 1:12换行符识别错误,基于自定义ST语法求解
问题解决:ANTLR token识别错误('\n'未被跳过)
错误原因
你的WS(空白字符)规则里误用了HTML实体->,而ANTLR语法要求使用原生的->箭头符号。这个错误导致WS规则无法被正确解析,换行符(\n)没有被跳过,进而触发token识别错误。
修复方案
将WS规则中的->替换为->,修改后的WS规则如下:
WS: [ \t\r\n]+ -> skip;
完整修复后的语法
grammar ST; program: statement+; statement: assignment ';' | ifStatement | whileStatement | forStatement | functionCall ';'; assignment: IDENTIFIER ':=' expression; ifStatement: 'IF' condition 'THEN' statement+ ('ELSE' statement+)? 'END_IF'; whileStatement: 'WHILE' condition 'DO' statement+ 'END_WHILE'; forStatement: 'FOR' IDENTIFIER ':=' expression 'TO' expression 'DO' statement+ 'END_FOR'; functionCall: IDENTIFIER '(' argumentList? ')'; argumentList: expression (',' expression)*; expression: literal | IDENTIFIER | '(' expression ')' | expression operator expression; condition: expression; literal: INT | BOOL; operator: '+' | '-' | '*' | '/' | '=' | '<' | '>'; IDENTIFIER: [a-zA-Z_][a-zA-Z0-9_]*; INT: [0-9]+; BOOL: 'TRUE' | 'FALSE'; WS: [ \t\r\n]+ -> skip;
验证说明
修改完成后,ANTLR会正确识别并跳过所有空白字符(空格、制表符、回车、换行),你的测试代码就能正常解析,不会再出现token recognition error at: '\n'的错误。
内容的提问来源于stack exchange,提问作者Eljah
相关产品推荐
相关产品推荐

