2017-07-06 93 views
2

我是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

回答

1

根據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

相關問題