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