mir ist bei den kleineren Examples im Triangle-Bundle folgender Code aufgefallen (bar.tri):
Code: Alles auswählen
let
var x : Integer;
const n ~ 42;
const m ~ n + 1
in
x := x + n * m;
Was ich mich jetzt frage, ist, wo man die Überprüfung auf fehlende Initialisierung in Triangle durchführt. Wie man nämlich im AST (s. unten) sieht, steht bei ganz normaler Traversierung die Zuweisung (SimpleVname) vor der Auswertung des Ausdrucks. Beim Ausführen wird aber ja x auf der rechten Seite uninitialisiert verwendet.
Kann die kontextuelle Analyse also wissen, ob hier ein Fehler auftritt?
Viele Dank für eure Hilfe