Je me suis peut-être posé une question stupide/de base mais j'avais été confus au sujet du bâtiment ANTLR AST. Ce que je veux faire est une sorte d'analyseur d'expressions booléennes tel que sur les nœuds parents j'ai l'opérateur et ses opérandes en tant qu'enfants. par exemple, une phraseANTLR Bâtiment AST: nœud racine en tant que chaîne à la place du caractère
((A B C & D) | (E & (F | G)))
devrait idéalement être représentant
|
/\
/ \
/ \
/ \
& &
/\ /\
/ \ / \
/ D E |
/|\ /\
A B C / \
F G
De la grammaire suivante.
grammar Test;
options
{
language = 'Java';
output=AST;
}
exp : word (expRest^)? | '('! exp ')'! (expRest^)? ;
expRest : (('&'|'|'|'!'|'&!'|'|!')^) exp | (('~'^) digit+ exp);
word : letter letter* -> ^(letter letter*);
letter : '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'|'a'|'b'|'c'|'d'|'e'|'f'|'g'|'h'|'i'|'j'|'k'|'l'|'m'|'n'|'o'|'p'|'q'|'r'|'s'|'t'|'u'|'v'|'w'|'x'|'y'|'z'|'A'|'B'|'C'|'D'|'E'|'F'|'G'|'H'|'I'|'J'|'K'|'L'|'M'|'N'|'O'|'P'|'Q'|'R'|'S'|'T'|'U'|'V'|'W'|'X'|'Y'|'Z';
digit : '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9';
Le problème est que je reçois « A B C » soit comme une liste (tableau) des noeuds comme des enfants de « & ». Est-il possible de le restreindre comme une seule chaîne??
c'est-à-dire 'A B C' ou en d'autres termes, est-il possible d'avoir plusieurs caractères au nœud racine dans AST ??? Si oui, comment puis-je y arriver?
pour référence, je veux faire un arbre de syntaxe des « facteurs de risques & état économique actuel »
post-scriptum J'ai aussi essayé:
word : (letter letter*)^ ;
Et pour une référence, je suis en utilisant l'environnement .NET.
Vous avez 'language = 'Java';' dans votre grammaire, mais vous dites * "... J'utilise l'environnement .NET" * –
désolé pour cela, en fait je le fais 'CSharp' chaque fois que je génère du code. Fait intéressant, j'allais ajouter un commentaire mais j'ai vu le vôtre:) ... Merci. – Umer