我写了一个简单的语法来识别一些表达式。在这里,我发布了一个更简单的版本,我写它只是为了简化我的解释。这个更简单的版本可以识别如下表达式:
- 这是一个文本
- [n]这是另一个文本[/n]
- [n][n]这是一个复合表达式[/n][/n]
我的问题是当我总结一个表达式时:[i]这应该只生成一个识别异常[/n]
抛出识别异常,但解析器进入无限递归,因为它匹配'[',但是当它不匹配'i'时它会丢失自己。我认为这是因为我的语法文本组件不能包含方括号。所以,我发布了语法。
grammar ErrorTest;
expression
: rawText EOF
| command EOF
;
rawText
: word+
;
word
: ESPACE* TEXT ESPACE*
;
command
: simpleCommand
| compoundCommand
;
simpleCommand
: HELP
;
compoundCommand
: rawText
| BEGIN compoundCommand END
;
HELP : '[help]';
BEGIN : '[n]';
END : '[/n]';
ESPACE : ' ';
TEXT : ~(' '|'['|']')*;
我该如何解决?