我有一个适用于 v3 的语法,我现在正在尝试迁移到 v4。我已经从18431158和14778570的问题中得到了一些提示,但我还有一个问题:
在我的 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?
ANTLR 4 始终跟踪Token
对象中的行号和列号。您可以简单地删除调用 newLine()
方法并使用 Token.getLine()
的操作。