ANTLR4:将数字解析为标识符而不是数字文字

ANTLR4: parse number as identifier instead as numeric literal

我有这种情况,必须将整数视为标识符。
底层语言语法(不幸的是)允许这样做。

语法摘录:

grammar Alang;

...

NLITERAL   : [0-9]+ ;
...
IDENTIFIER : [a-zA-Z0-9_]+ ;

必须处理的示例代码:

/** declaration block **/

Method 465;
...

在上面的代码示例中,因为 NLITERAL 必须放在 IDENTIFIER 之前,所以解析器选择 465 作为 NLITERAL

处理这种情况的好方法是什么?
(理想情况下,避免语法中的应用程序代码,以使其与运行时无关)

我在 SO 上发现了类似的问题,但并不是很有帮助。

没有什么好的方法可以让 465 根据上下文生成 NLITERAL 标记或 IDENTIFIER 标记(您也许可以使用词法分析器模式,但这可能不是非常适合您的需求)。

尽管如此,您可以轻松地做的是在某些地方除了 IDENTIFIERS 之外还允许 NLITERAL。所以你可以定义一个解析器规则

methodName: IDENTIFIER | NLITERAL;

然后在适当的地方使用该规则代替 IDENTIFIER