Je voudrais créer une calculatrice C++ simple en utilisant bison et flex. S'il vous plaît noter que je suis nouveau pour les parseurs de création. J'ai déjà trouvé quelques exemples dans bison/flex mais ils ont tous été écrits en C.Créer une calculatrice simple avec bison et flex en C++ (pas C)
Mon but est de créer du code C++, où les classes contiendraient des nœuds de valeurs, opérations, foncs - pour créer AST (l'évaluation se ferait juste après avoir créé l'AST entier - à partir de la racine et aller de l'avant).
Par exemple:
my_var = sqrt(9 ** 2 - 32) + 4 - 20/5
my_var * 3
serait-elle analysé comme:
=
/ \
my_var +
/ \
sqrt -
| /\
- 4 /
/\ /\
** 32 20 5
/\
9 2
et le second AST ressemblerait à ceci:
*
/\
my_var 3
Puis suivant pseudocode reflète AST:
ast_root = create_node('=', new_variable("my_var"), exp)
où exp est:
exp = create_node(OPERATOR, val1, val2)
mais pas comme ça:
$$ = $1 OPERATOR $3
car de cette façon que je reçois directement la valeur de fonctionnement au lieu de la création du nœud. Je crois que le nœud devrait contenir le type (de fonctionnement), val1 (Node), val2 (Node). Dans certains cas, val2 serait NULL, comme ci-dessus sqrt qui prend à la fin un argument. Droite? Ce sera bien si vous pouvez me proposer le squelette C++ (sans évaluation) pour le problème décrit ci-dessus (y compris le fichier * .y créant AST) pour m'aider à comprendre la façon de créer/maintenir des nœuds dans AST. Le code peut être coupé, juste pour me laisser l'idée.
Je vous serais également reconnaissant de me signaler un exemple existant (éventuellement simple) si vous en connaissez un.
Merci à tous pour votre temps et votre aide!
J'ai entendu que le support de bison pour C++ est BAD. J'ai juste mes fonctions comme un wrapper à mon code C++. Ça marche bien. La moitié du temps, je viens d'écrire les données en C car la plupart de ces données sont remplies et n'ont pas besoin d'obj ou de classes STD. –