2017-08-15 8 views
1

Je compile un petit compilateur pour un langage d'affectation.Actions sémantiques sur Menhir

Tenir compte de la règle suivante:

var_block : 
    | LPAREN var_decl+ RPAREN { var_scope := var_scope + 1 }; 

L'action est déclenchée lorsque sémantique var_block est d'abord reconnu ou est-il déclenché une fois la fin de la production est atteint (dans ce cas, RPAREN)?

Répondre

1

Il est déclenché après la lecture de toute la production.

+0

Merci pour votre réponse. Quel serait le meilleur moyen de suivre les changements de contexte entre les déclarations d'objets contenus dans différents blocs et avec différentes propriétés de stockage? –

+0

Cela dépend exactement de ce que vous essayez de faire. Une chose facile à faire serait de rendre la valeur sémantique de chaque production un arbre de syntaxe, alors la production 'var_block' ne ferait qu'emballer sa liste d'enfants dans un autre nœud d'arbre qui marque la portée. –

5

Votre question est exactement pourquoi vous ne devriez pas faire cela.

Ne pas effectuer d'effets secondaires sensibles aux commandes dans les règles de production. Les règles de production doivent être utilisées pour créer une structure de données représentant votre programme. Une fois cela fait, vous pouvez analyser/exécuter/quoi que ce soit.

+0

Merci. Ce commentaire a été utile pour repenser mon approche au-delà du problème particulier. –