我有以下语法
query
: unquoted_str+
| '(' query ')'
;
unquoted_str
: UNQUOTED_STR
;
UNQUOTED_STR
: [A-Za-z_][A-Za-z0-9_-]*
;
WS
: [ \t\r\n]+ -> skip
;
我希望能够执行以下查询:
abc (def (hij))
但我一直收到错误:
line 1:4 extraneous input '(' expecting {<EOF>, UNQUOTED_STR}
line 1:8 extraneous input ')' expecting {<EOF>, UNQUOTED_STR}
尝试通过在各个地方添加EOF来解决问题,但无济于事。任何帮助都会很棒。
答案 0 :(得分:1)
根据你的语法,查询是:
一个或多个unquoted_str
s或
(,a query
和)
abc (def)
是query
吗?
没有。 (def)
不是unquoted_str
,因此第一个选项不适用。并且abc
不以()开头,因此第二个选项也不适用。由于这些是唯一的两个选项,我们得出的结论是它不是.Antlr也是如此。它告诉你,在看到unquoted_str
(abc
)之后,它会看到另一个或输入结束。
从您的示例中,我认为您可能认为查询是一个或多个查询元素,其中查询元素是单个unquoted_str
或带括号的query
。如果这就是你的意思,你应该改变你的语法以指定它。