将词法分析器动作从v3迁移到v4

时间:2014-01-03 07:13:20

标签: antlr3 antlr4

我有一个与v3一起使用的语法,现在我正在尝试迁移到v4。我已经从问题1843115814778570中获得了一些提示,但我还有一个问题:

在我的v3代码中,我正在计算这样的行号(newLine()只保留解析的行数并保存它,以便稍后,当我尝试报告一些语义错误时,我也可以报告相应的行数):

COMMENT : '/*' ( options {greedy=false;} : 
    (
       '\n' {newLine();}
     | ~ '\n'
    ) )* '*/' {$channel=HIDDEN;}
;
LINE_COMMENT : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN; newLine();} ;
WS: (
  ' '
 |'\r'
 |'\t'
 |'\n' {newLine();}
)+     {$channel=HIDDEN;};

在v4中,内部不允许词法分析器操作。如何将此代码迁移到v4?

1 个答案:

答案 0 :(得分:0)

ANTLR 4始终跟踪Token个对象中的行号和列号。您只需删除调用newLine()方法的操作,然后使用Token.getLine()