antlr4上的精确字符串解析



我在解析文件时遇到问题。场景如下:

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

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。原因如下:

  1. identifier1规则应该是lexer,而不是解析器规则。因此将其重命名为IDENTIFIER1
  2. IDENTIFIER1规则必须在ALPHA规则之前声明,否则,ALPHA将始终具有更高的优先级,并且ABC将被解析为ALPHA而不是IDENTIFIER1。因此,一定要将IDENTIFIER1规则移动到ALPHA规则之上,这样一切都会好起来

相关内容

  • 没有找到相关文章

最新更新