Ich baue einen kleinen Compiler für eine Zuweisungssprache.Semantische Aktionen auf Menhir
die folgende Regel vor:
var_block :
| LPAREN var_decl+ RPAREN { var_scope := var_scope + 1 };
Ist die semantische Aktion ausgelöst, wenn var_block zuerst erkannt wird, oder es wird ausgelöst, wenn das Ende der Produktion erreicht ist (in diesem Fall RPAREN)?
Vielen Dank für Ihre Antwort. Was wäre der beste Weg, um Kontextänderungen zwischen Deklarationen von Objekten in verschiedenen Blöcken und mit unterschiedlichen Speichereigenschaften zu verfolgen? –
Es hängt davon ab, was genau Sie tun möchten. Eine einfache Sache wäre es, den semantischen Wert jeder Produktion zu einem Syntaxbaum zu machen, dann würde die 'var_block'-Produktion ihre Liste von Kindern einfach in einen anderen Baumknoten einbinden, der den Bereich markiert. –