2016-10-20 20 views
0

在書中權威ANTLR4參考有關於規則的訪問兩個短語和嵌入式行動ANTLR4規則和令牌屬性在嵌入式行動

樂句1(272頁令牌屬性)令牌屬性:$ t和$ l評估令牌名稱T和令牌標籤l的令牌對象。 $ ll將評估爲列表標籤ll的列表。

短語2(第273頁分析程序規則屬性):$ r和$ rl爲規則名稱r和規則標籤rl計算類型爲RContext的ParserRuleContext對象。 $ RLL評估列出的規則列表標籤RLL

我不明白的部分

「$ LL評估要列出清單標籤LL」

「$ RLL評估板列出規則列表標籤rll「

的意思。

可以請給我解釋一下例子,告訴我如何使用它?

在此先感謝

+0

我不完全確定,但在某些情況下,封閉運算符(+,*)適用於規則的RHS中的符號。最終結果是連續調用適用閉包的符號(終端或非終端)的規則。爲了收集由閉包生成的ParserRuleContext或Token對象,應用「+ =」運算符將實例化對象分配給一個標籤列表,通過這個標籤列表,可以使用$標記符號將對象稍後訪問到規則的嵌入操作中 –

回答

0

是的,這在書中有點誤導。什麼意思是有令牌列表。我假設有一個例子,其中包含ll,後來在印刷書中沒有提到。

你可以有這樣的事情:

list: ll += ID (ll += ID)*; 

注意哪些ANTLR轉化爲標記列表(而不是很簡單分配一個令牌)的+=。然後,您可以像訪問您的語言中的任何其他列表一樣訪問該列表(例如,第二個元素的文本爲$ll[1].text)。

注意,存在這樣的情況ANTLR自動生成一個列表,即當你引用一個令牌/使用alt排除多次另一種情況:

list: ID COMMA ID; 

現在當你想在你的聽衆,你就可以訪問ID看到實際上有一個List,這樣你就可以訪問所有的事件。