我在解析文件时遇到问题。
方案如下:

在我要解析的文件中,我的值如下

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规则之上,然后一切都会正常。

10-06 15:32