我有这个简单的语法:
shape_grammar
:
decoration*
start_entry
decoration*
//shape_rule+
;
decoration
:
include_statement
| attr
| resource
;
include_statement
:
'include' '"' PATH '"' END
;
attr
:
'attr' ATTR_TYPE IDENTIFIER ('(' INT ',' INT ')')? END
;
resource
:
RESOURCE_TYPE IDENTIFIER '"' PATH '"' END
;
start_entry
:
'start' '"' IDENTIFIER '"' END
;
... more rules ...
PATH
:
~('"'|'\n'|'\r')+
;
ATTR_TYPE
:
'int'
|'float'
|'bool'
;
RESOURCE_TYPE
:
'model'
;
IDENTIFIER
:
[a-z]+
| ([a-z][a-z_0-9]+)
;
输入:
include "GrammaticBasic";
attr float xxx (0, 1);
attr int yyy (2, 6);
attr float zzz (0, 1);
attr float www (0, 1);
我总是得到错误:
line 1:0 mismatched input 'include "GrammatikBasic";' expecting {'include', 'attr', 'start', 'model'}
为什么ANTLR会尝试将整条线匹配到规则的第一部分? 对我来说似乎太贪心了。
我做错了什么?
(本文是为了绕过STACKOVERFLOWS"你的问题主要是代码尝试添加一些细节"错误。)