簡體   English   中英

我的ANTLR語法為什么不匹配?

[英]How come my ANTLR Grammar is failing to match?

我的語法如下:

grammar BirdGrammar;


lines: (init '\n')*;
init  : lineCode
      | continuation;

sep : ' '
    | '-'
    ;


lineCode  : interfaceList
          | protocolList
          | interfaceAddress
          | interfaceFlags
          ;

interfaceList     : '1001' sep INTERFACENAME ' ' interfaceStatus ' (index=' index ')';
protocolList      : '1002';
interfaceAddress  : '1003';
interfaceFlags    : '1004';
continuation      : ' ';

interfaceStatus   : 'up'
                  | 'DOWN';

index         : INDEX;
INTERFACENAME : [a-zA-Z0-9]+;
INDEX         : [0-9]+;

我正在嘗試通過grun提供以下輸入數據:

1001-eth0 up (index=110)
1001-ip6gre0 DOWN (index=113)

當我這樣做時,出現以下錯誤:

line 1:20 mismatched input '110' expecting INDEX
line 2:25 mismatched input '113' expecting INDEX

現在,在我看來,INDEX(規則)應匹配110和113,因為它正在尋找重復的[0-9] +。 有人發現我的語法或輸入有任何明顯的問題嗎?

您的詞法分析器規則INTERFACENAME與輸入110相匹配。 由於該規則位於語法中的INDEX之前,因此始終優先。 實際上,由於INTERFACENAME將始終與索引匹配,因此該語法將永遠不會以當前形式產生INDEX令牌。

還要注意,由於解析器規則中包含文字'1001' ,因此輸入1001將始終是其自己的唯一令牌,永遠不會是INTERFACENAMEINDEX 這同樣適用於100210031004

INTERFACENAME可以以數字字符開頭嗎? 如果沒有,請嘗試以下操作:INTERFACENAME:([a-zA-Z])([a-zA-Z0-9])*;

暫無
暫無

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

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