簡體   English   中英

ANTLR4:與整數匹配的運行時語法無法正常工作

[英]ANTLR4: grammar with runtime matching of number of integers not working correctly

我正在ANTLR 4書中嘗試語法(第48-9頁),但是語法表現不像廣告中那樣。

輸入是一系列整數。 一個整數表示隨后的整數的數量。 例如,以下輸入中的前2個表示存在以下兩個整數,然后3表示存在以下三個整數:

2    9    10    3    1    2    3

這本書的底部是書中給出的語法。 當我使用-tree標志運行ANTLR測試裝備(grun)時,使用語法和上面的輸入:

grun Data file -tree

我得到這個不正確的輸出樹:

(file (group 2 (sequence 9 10 3)) (group 1 (sequence 2 3)))

通過一些實驗,我發現如果我更改了使用該語義謂詞的語法:

{$i<=$n}?

使用這個不正確的語義謂詞:

{$i<$n}?

然后我得到正確的輸出樹:

(file (group 2 (sequence 9 10)) (group 3 (sequence 1 2 3)))

我感到困惑。 為什么會這樣? 這是測試裝備中的錯誤嗎? 還是(更有可能)我是否不了解ANTLR的語義謂詞和動作的運作方式?

grammar Data;

file: group+ ;

group: INT sequence[$INT.int] ;

sequence[int n]
locals [int i = 1;]
      : ( {$i<=$n}? INT {$i++;} )*  // match n integers
      ;

INT  : [0-9]+ ;
WS  : [ \t\r\n]+ -> skip ;

由於ANTLR 4.3中引入的錯誤,您的局部變量i從未初始化(從0開始)而不是從1開始。

該錯誤的詳細說明, 參見https://github.com/antlr/antlr4/issues/672

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM