如何在Antlr-4 lexer规则的动作中获取令牌属性

3

我是Antlr-4的新手,但对Antlr-3有一些了解,在Antlr-3中,可以创建无需任何解析规则的词法分析器;为了通过匹配某些标记来匹配词法分析器规则:

CLASS: 'Class' WS+ id=ID
{
System.out.println($id.text);
}
ID : [a-z]+ ;
WS : [ \r\t\n]+

如果Antlr-4 lexer不允许在规则操作中使用属性,那么我该如何在没有任何解析器的情况下完成此操作呢?

对于我来说,任何想法/示例都会有所帮助!


1
通过使用antlr-4.7,它提供了关于我的问题足够的信息。警告(201):AntlrPLexer.g4:16:20:在ANTLR 4中不支持标签,因此词法分析器规则中的操作不能引用词法规则的元素,但是可以使用getText()获取匹配规则的整个文本。为什么Antlr 4要禁止在词法分析器规则中使用标签? - Kishore_2021
1个回答

0
根据ANTLR4语法,你可以在词法规则中使用标签。只需创建独立的词法规则并将其提供给ANTLR以生成你的词法分析器类即可。

我已经尝试过了,但由于Antlr-4在词法分析器动作中没有像v3那样进行特殊的$x属性翻译。因此无法像上面的示例中那样获取词法规则的值,例如*$id.text*。 - Kishore_2021
你尝试过使用$ID吗?它实际上是ID规则上下文(至少我期望是这样,目前无法自行检查)。 - Mike Lischke
1
$ID也无法工作,而且出现了相同的错误:error(128): AntlrPHPLexer.g4:210:27: 词法分析器动作中不允许使用属性引用:$ID.text 1个错误构建失败 - Kishore_2021

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接