为什么我的ANTLR语法不匹配?
我的语法如下:为什么我的ANTLR语法不匹配?,antlr,antlr4,Antlr,Antlr4,我的语法如下: grammar BirdGrammar; lines: (init '\n')*; init : lineCode | continuation; sep : ' ' | '-' ; lineCode : interfaceList | protocolList | interfaceAddress | interfaceFlags ; interfaceL
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):
当我这样做时,会出现以下错误:
line 1:20 mismatched input '110' expecting INDEX
line 2:25 mismatched input '113' expecting INDEX
现在,在我看来,索引(规则)应该匹配110和113,因为它正在寻找重复的[0-9]+。有人发现我的语法或输入有任何明显的问题吗 您的lexer规则
INTERFACENAME
与输入110
匹配。由于该规则位于语法中的索引
之前,因此它将始终优先。事实上,这种语法永远不会以其当前形式生成索引
标记,因为接口名
将始终与索引匹配
还请注意,由于在解析器规则中包含了文本
'1001'
,因此输入1001
将始终是其自己的唯一标记,而不是接口名
或索引
。这同样适用于1002
、1003
和1004
INTERFACENAME能否以数字字符开头?如果没有,请尝试以下方法:
接口名称:([a-zA-Z])([a-zA-Z0-9])* 那么,我该如何解决这个问题呢?在我的语法中是否有一个基本的“bug”,以及我是如何处理它的?
line 1:20 mismatched input '110' expecting INDEX
line 2:25 mismatched input '113' expecting INDEX