public AnnotatedForStatement(VariableSymbol variable, AnnotatedExpression lowerBound, AnnotatedExpression upperBound, AnnotatedStatement body) { Variable = variable; LowerBound = lowerBound; UpperBound = upperBound; Body = body; }
public AnnotationGlobalScope(AnnotationGlobalScope prev, ImmutableArray <Diagnostic> diagnostics, ImmutableArray <VariableSymbol> symbols, AnnotatedStatement expression) { Previous = prev; Diagnostics = diagnostics; Symbols = symbols; Expression = expression; }
private void EvaluateStatement(AnnotatedStatement statement) { if (statement is AnnotatedBlockStatement b) { foreach (var st in b.Statements) { EvaluateStatement(st); } return; } if (statement is AnnotatedExpressionStatement e) { _lastValue = EvaluateExpression(e.Expression); return; } if (statement is AnnotateVariableDeclaration v) { var value = EvaluateExpression(v.Initializer); _symbolTable[v.Variable] = value; _lastValue = value; return; } if (statement is AnnotatedIfStatement i) { var condition = (bool)EvaluateExpression(i.Condition); if (condition) { EvaluateStatement(i.ThenStatement); } else if (i.ElseStatement != null) { EvaluateStatement(i.ElseStatement); } return; } if (statement is AnnotatedWhileStatement w) { while ((bool)EvaluateExpression(w.Condition)) { EvaluateStatement(w.Body); } return; } if (statement is AnnotatedForStatement f) { var lowerBound = (int)EvaluateExpression(f.LowerBound); var upperBound = (int)EvaluateExpression(f.UpperBound); for (var idx = lowerBound; idx < upperBound; idx++) { _symbolTable[f.Variable] = idx; EvaluateStatement(f.Body); } return; } throw new Exception($"Unexpected node {statement.Kind}"); }
public Evaluator(AnnotatedStatement root, Dictionary <VariableSymbol, object> symbolTable) { _root = root; _symbolTable = symbolTable; }
public AnnotatedWhileStatement(AnnotatedExpression condition, AnnotatedStatement body) { Condition = condition; Body = body; }
public AnnotatedIfStatement(AnnotatedExpression condition, AnnotatedStatement thenStatement, AnnotatedStatement elseStatement) { Condition = condition; ThenStatement = thenStatement; ElseStatement = elseStatement; }