首页 > 解决方案 > ANTLR4 解析包含关键字的变量名

问题描述

我正在尝试解析 antlr4 中的简单整数声明。
我现在正在做的语法是:

main  : 'int' var '=' NUMBER+ ;
var   : LETTER (LETTER | NUMBER)* ;
LETTER: [a-zA-Z_] ;
NUMBER: [0-9] ;
WS    : [ \t\r\n]+ -> skip ;

当我尝试使用 测试主要规则时int int_A = 0,出现错误:

期待 LETTER 的无关输入“int”。

我知道这是因为变量名“int_A”包含关键字“int”,但是如何修改我的语法?谢谢。

标签: parsingantlr4grammar

解决方案


词法分析器创建具有尽可能多字符的标记。因此int_A被标记为以下 3 个标记:

  • 'int'(解析器中定义的 int 关键字)
  • LETTER( _)
  • LETTER( A)

所以解析器不能var用这些标记创建一个。

代替解析器规则var,使其成为词法分析器规则:

main   : 'int' VAR '=' NUMBER+ ;
VAR    : [a-zA-Z_] ([a-zA-Z_] | [0-9])* ;
NUMBER : [0-9]+ ;
WS     : [ \t\r\n]+ -> skip ;

推荐阅读