parse : expr EOF -> ^(ROOT expr);
expr : atom ('|'^ atom)*;
atom : LITERAL | ('('! expr ')'!);
LITERAL : 'a'..'z';
WS : (' '|'\t'|'\r'|'\n'){Skip();};
和投入,
a|b|c
我得到一棵树,看起来像,
http://graph.gafol.net/pic/dsqoQhzgs.png
而我像一棵树,看起来像,
http://graph.gafol.net/pic/dsrGWVUfz.png
我会如何在语法中表达这一点?
这是行不通的:你不能在规则中将`^`和` - >`混合在一起。如果你从`expr`中删除`^`,它就不能正确解析单个`LITERAL`。尝试一下。 – 2010-12-09 22:07:59
无赖......我刚刚想出了一些类似的东西,``atom('|'atom)* - > ^('|'atom +);`有一个`|`的时候效果很好,但是如果Bart说的话会失败。 – mpen 2010-12-09 22:28:47