J'utilise JavaCC pour imprimer un AST dans un format particulier. je besoin d'être comme ceci:Méthode de vidage JavaCC pour imprimer AST
LetNode(Identier(X), ExprNode(PlusNode(IntegerLiteral(8), IntegerLiteral(2))))
mais je reçois:
Start(LetNode(Identifier(x)(ExprNode(IntegerLiteral(5)(PlusNode(IntegerLiteral(5)()))
J'utilise la méthode de vidage pour imprimer cette:
public void dump(String prefix) {
System.out.print(toString(prefix));
System.out.print("(");
if (children != null) {
for (int i = 0; i < children.length; ++i) {
SimpleNode n = (SimpleNode)children[i];
if (n != null) {
n.dump(prefix +"");
}
}
System.out.print(")");
}
}
}
La sortie sans aucune modification est:
Start
Sxl
Statement
VariableDecl
Identifier
Type
Expression
SimpleExpression
Term
Factor
Literal
IntegerLiteral
AdditiveOp
Term
Factor
Literal
IntegerLiteral
Ma méthode:
void AdditiveOp():
{}
{
(Plus() /*#Add(2)*/ | Minus() | Or())
}
void Plus():
{
}
{
(<PLUS>)
#PlusNode
}
Si je retire le/* */il ne fonctionne pas comme il est dit qu'elle attend quelque chose d'autre ne +
Toute aide serait grandement appréciée!
D'abord, vous aurez envie de changer la façon dont l'arbre est produit. Actuellement, vous avez essentiellement l'arbre d'analyse. Ce que vous voudrez, c'est plus d'un arbre de syntaxe abstraite. Lisez la documentation de JJT pour savoir comment procéder. –
Je l'ai fait et j'ai modifié la méthode dump() en fait j'ai obtenu une sortie comme je l'ai dit plus haut. Tout ce que j'ai besoin est d'obtenir le nœud plus avant les entiers pas au milieu mais je ne peux pas comprendre comment – user3599420