2013-05-06 32 views
13

我正在使用返回,該解析器規則適用於除第一個解析器規則以外的所有解析器規則。如果我的語法第一解析器規則使用回報聲明ANTLR4抱怨如下:ANTLR4語法中第一個解析器規則返回聲明的問題

期待ARG_ACTION同時匹配的規則

如果我添加其他解析器規則上面不使用「收益」 ANTLR不抱怨。

這裏有一個語法降低的問題:

grammar FirstParserRuleReturnIssue; 
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*; 
aRule returns [String s]: ID { $s = $ID.text; }; 

我搜索以找到可以解釋的行爲,但沒有發現任何東西的第一條規則的特殊作用。這是一個錯誤嗎?我錯過了一些理解?

回答

13

您需要在語法中的詞法分析器規則(以大寫字母開頭)之前放置解析器規則(以小寫字母開頭)。在遇到詞法分析規則之後,[會觸發LEXER_CHAR_SET而不是ARG_ACTION,因此編譯器看到的令牌流看起來像是在返回值應該在的位置傳遞一組字符。

+0

這看起來像是ANTLR中的一個bug,對吧? – 2018-03-01 05:27:24