我在解析文件时遇到问题。
方案如下:
在我要解析的文件中,我的值如下
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中对确切的字符串进行解析?
最佳答案
问题在于您的词法分析器将ABC
作为ALPHA
而不是identifier1
。原因如下:
您的identifier1
规则应该是词法分析器,而不是解析器规则。因此,将其重命名为IDENTIFIER1
必须在IDENTIFIER1
规则之前声明ALPHA
规则,否则,ALPHA
将始终具有更高的优先级,并且ABC
将被解析为ALPHA
而不是IDENTIFIER1
。因此,请确保将IDENTIFIER1
规则移到ALPHA
规则之上,然后一切都会正常。