我如何在 antlr4 中做嵌套括号?
How do I do nested parenthesis in antlr4?
我有以下语法
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 添加到各个位置来解决此问题,但无济于事。任何帮助都会很棒。
根据您的语法,查询是:
一个或多个 unquoted_str
的序列,或
一个(,一个query
,一个)
abc (def)
是query
吗?
没有。 (def)
不是 unquoted_str
,因此第一个选项不适用。并且 abc
不以 ( 开头,因此第二个选项也不适用。因为这是唯一的两个选项,我们得出结论,它不是。所以做了 Antlr;它告诉你在它看到一个 unquoted_str
(abc
) 之后,它希望看到另一个,或者输入结束。
从你的例子来看,我想你的意思可能是查询是一个或多个查询元素,其中查询元素是单个 unquoted_str
或带括号的 query
。如果那是你的意思,你应该改变你的语法来指定那个。
我有以下语法
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 添加到各个位置来解决此问题,但无济于事。任何帮助都会很棒。
根据您的语法,查询是:
一个或多个
unquoted_str
的序列,或一个(,一个
query
,一个)
abc (def)
是query
吗?
没有。 (def)
不是 unquoted_str
,因此第一个选项不适用。并且 abc
不以 ( 开头,因此第二个选项也不适用。因为这是唯一的两个选项,我们得出结论,它不是。所以做了 Antlr;它告诉你在它看到一个 unquoted_str
(abc
) 之后,它希望看到另一个,或者输入结束。
从你的例子来看,我想你的意思可能是查询是一个或多个查询元素,其中查询元素是单个 unquoted_str
或带括号的 query
。如果那是你的意思,你应该改变你的语法来指定那个。