J'ai créé une grammaire simple pour l'addition et la soustraction:
S : EXPRESSION ENDLINE {printf("Result: %dn",$1);}
;
EXPRESSION
: NUMBER "+" NUMBER {$$ = $1 + $3;}
| NUMBER "-" NUMBER {$$ = $1 - $3;}
;
NUMBER : NUM {$$ = $1;}
;
%%
Après avoir atteint le terminal S, je voudrais écrirenouvelle entrée après le premier résultat est imprimé. Malheureusement, j'ai reçu une erreur de syntaxe après l'insertion d'une seconde formule. Comment puis-je atteindre cet objectif? Je serais reconnaissant de l'aide.
Réponses:
1 pour la réponse № 1Il ne s’agit pas de réinitialiser l’arbre d’analyse; vous devez développer la grammaire pour autoriser un nombre quelconque de lignes contenant des expressions. Développez simplement la règle S
d'inclure des invocations récursives, comme ceci:
S : EXPRESSION ENDLINE {printf("Result: %dn",$1);}
| S EXPRESSION ENDLINE {printf("Result: %dn",$2);}
;
Cela pourrait être un peu moche, donc vous pourriez ajouter une nouvelle règle dans le même sens:
S: RESULT
| S RESULT
;
RESULT : EXPRESSION ENDLINE {printf("Result: %dn",$1);}