Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的ANTLR语法不匹配?_Antlr_Antlr4 - Fatal编程技术网

为什么我的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