我在解析文件时遇到问题。场景如下:
在我要解析的文件中,我有如下值
ABC/123/TEST
前3个字母是某种标识符,这是我区别不同行的唯一方法
在语法文件中:
file1: str1?;
str1 : NEWLINE identifier1 SLANT INTEGER SLANT ALPHA;
INTEGER : [0-9]+;
ALPHA : [A-Z]+;
SLANT : '/';
NEWLINE : '/n';
identifier1 : 'ABC';
在运行解析器时,解析器并没有将行标识符获取为ABC,而是给了我一些奇怪的错误
mismatched input 'ABC' expecting 'ABC'
如何根据antlr4中的精确字符串进行解析?
问题是您的lexer将ABC
lexed为ALPHA
而不是identifier1
。原因如下:
identifier1
规则应该是lexer,而不是解析器规则。因此将其重命名为IDENTIFIER1
IDENTIFIER1
规则必须在ALPHA
规则之前声明,否则,ALPHA
将始终具有更高的优先级,并且ABC
将被解析为ALPHA
而不是IDENTIFIER1
。因此,一定要将IDENTIFIER1
规则移动到ALPHA
规则之上,这样一切都会好起来