Beispiel #1
0
 public AnnotatedForStatement(VariableSymbol variable, AnnotatedExpression lowerBound, AnnotatedExpression upperBound, AnnotatedStatement body)
 {
     Variable   = variable;
     LowerBound = lowerBound;
     UpperBound = upperBound;
     Body       = body;
 }
Beispiel #2
0
 public AnnotationGlobalScope(AnnotationGlobalScope prev, ImmutableArray <Diagnostic> diagnostics, ImmutableArray <VariableSymbol> symbols, AnnotatedStatement expression)
 {
     Previous    = prev;
     Diagnostics = diagnostics;
     Symbols     = symbols;
     Expression  = expression;
 }
Beispiel #3
0
 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}");
 }
Beispiel #4
0
 public Evaluator(AnnotatedStatement root, Dictionary <VariableSymbol, object> symbolTable)
 {
     _root        = root;
     _symbolTable = symbolTable;
 }
Beispiel #5
0
 public AnnotatedWhileStatement(AnnotatedExpression condition, AnnotatedStatement body)
 {
     Condition = condition;
     Body      = body;
 }
 public AnnotatedIfStatement(AnnotatedExpression condition, AnnotatedStatement thenStatement, AnnotatedStatement elseStatement)
 {
     Condition     = condition;
     ThenStatement = thenStatement;
     ElseStatement = elseStatement;
 }