如何在Antlr-4词法分析器规则的动作中得到令牌属性

问题描述:

我是Antlr-4的新手,但对Antlr-3有一些想法,可以在不需要任何分析程序规则的情况下创建词法分析器;为了匹配匹配的一些令牌就像一个词法规则:如何在Antlr-4词法分析器规则的动作中得到令牌属性

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

我怎么能做到这一点了在ANTLR中-4没有任何的解析器,因为ANTLR的-4词法在规则的动作使用属性不允许?

任何想法/例子都会对我有所帮助!

+0

通过使用ANTLR-4.7,它给我的问题的足够信息 '警告(201):AntlrPLexer.g4:16:20:在词法规则标签在ANTLR 4不支持;操作不能引用词法规则的元素,但可以使用getText()获取与规则匹配的整个文本 ' ----------------------- ---------------------------------------------- By why Antlr 4,劝阻词法规则中的标签? – Kishore

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

+0

我这样做了,但自从Antlr-4在词法分析器动作中没有特殊的$ x属性转换(与v3不同)。所以在上面的例子中无法获得像* $ id.text *这样的词法分析规则的价值。 – Kishore

+0

您是否尝试使用$ ID,这实际上是ID规则上下文(至少这是我所期望的,不能检查自己的ATM)。 –

+0

$ ID也不起作用,并且得到相同的错误: 错误(128):AntlrPHPLexer.g4:210:27:词法分析器操作中不允许使用属性引用:$ ID.text' '1 error(s)'' 'BUILD FAIL' – Kishore