[英]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
將始終是其自己的唯一令牌,永遠不會是INTERFACENAME
或INDEX
。 這同樣適用於1002
, 1003
和1004
。
INTERFACENAME可以以數字字符開頭嗎? 如果沒有,請嘗試以下操作:INTERFACENAME:([a-zA-Z])([a-zA-Z0-9])*;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.