C'est une expression arithmétique pour ma langue: ADD 100 MUL 5 DIV 10 SUB 7 MOD 10 4
Comment écrivez-vous une grammaire pour cette expression arithmétique?
Où ADD
= addition, soustraction SUB
=, MUL
= multiplication, DIV
= division, MOD
= modulo.
L'expression ci-dessus peut également être réinsérée dans la norme 100 + (5 * (10/(7 - (10 % 4))))
, parenthèse incluse pour marquer l'ordre des opérations.
Ceci est tout à fait différente de la norme, car l'évaluation commence par le droit le plus fonctionnement, c'est MOD 10 4
, alors le résultat de qui est ensuite utilisé pour évaluer l'opération suivante, qui est SUB 7 2
, où 2
est le résultat du modulo opération. La parenthèse n'est pas requise pour cette grammaire.
j'ai obtenu la grammaire pour maintenir la notation standard de https://ruslanspivak.com/lsbasi-part6/, voici:
<expr> := <term> ((ADD|SUB) <term>)*
<term> := <factor> ((MUL|DIV|MOD) <factor>)*
<factor> := integer
Dans ma langue, je suis désemparés par écrit la grammaire pour les opérations arithmétiques. Des modifications sont-elles nécessaires pour la grammaire ci-dessus? Ou ai-je besoin d'écrire une grammaire complètement nouvelle?
Écrire une grammaire, c'est comme écrire un programme. Vous proposez un fragment de code/grammaire, vous décidez s'il fait ce que vous attendez, et si ce n'est pas le cas, changez-le jusqu'à ce qu'il le fasse. Si vous comprenez les grammaires, cela ne devrait pas être difficile. Si vous ne le faites pas, l'expérience vous aidera à les comprendre. Qu'avez-vous essayé de faire pour écrire votre propre grammaire ou tester que celui-ci est OK? –
J'ai écrit avec succès les méthodes et le code pour analyser une expression arithmétique standard (+, -, *, /,%) comme le faisait le guide, je viens de convertir le code Python en C#. J'ai également réussi à analyser une seule opération en utilisant ma langue en modifiant la grammaire dans le guide ': = (ADD | SUB) ', mais je suis bloqué à résoudre comment analyser une expression avec plusieurs opérations. –