Compte tenu de la grammaire,ANTLR: Comment puis-je produire un arbre avec plus de 2 enfants?
parse : expr EOF -> ^(ROOT expr);
expr : atom ('|'^ atom)*;
atom : LITERAL | ('('! expr ')'!);
LITERAL : 'a'..'z';
WS : (' '|'\t'|'\r'|'\n'){Skip();};
et entrée,
a|b|c
Je reçois un arbre qui ressemble,
http://graph.gafol.net/pic/dsqoQhzgs.png
Alors que je voudrais un arbre qui ressemble ,
http://graph.gafol.net/pic/dsrGWVUfz.png
Comment pourrais-je exprimer cela dans la grammaire?
Ne pouvez-vous pas le faire sans un look-ahead si vous changez le '*' en '+'? Je suis en train d'analyser les expressions régulières. Je pense qu'il sera plus facile d'avoir toutes les alternatives en tant que frères et sœurs parce que je veux en choisir un au hasard. S'ils sont imbriqués dans un arbre binaire comme dans le premier AST, 'c' aurait 50% de chance d'être choisi, et les 2 autres auraient 25%, alors que je veux qu'il soit de 33% chacun ... à moins l'utilisateur utilise des crochets. – mpen
Désolé, le '*' devait être un '+' (a édité ma réponse). Mais non, il y a toujours une décision non-LL (*) dans cette règle. Essayez-le, si vous ne l'avez pas déjà fait. –
Je suis entièrement d'accord avec le dernier paragraphe de Bart. Le premier AST a tout son sens et ce que vous voulez en faire ne l'est pas. Cela le rend également plus difficile à comprendre. – phillip