public void Visit(IdentifierValueExpr node)
 {
     try {
         TypeStack.Push (SymbolTable [node.Name].Type);
         VisitChildren (node);
     } catch (KeyNotFoundException e) {
         throw new SemanticError ("Variable with name " + node.Name + " is not defined",
             node.Row, node.Column);
     }
 }
 public void Visit(IdentifierValueExpr node)
 {
     Symbol symbol = SymbolTable [node.Name];
     ValueStack.Push (new StackValue(symbol.Type, symbol.Value));
     VisitChildren (node);
 }
Пример #3
0
 private Expression Value()
 {
     switch ((Token.Types)currentToken.Type) {
         case Token.Types.IntLiteral:
             {
                 IntValueExpr expr = new IntValueExpr (currentToken.Lexeme, currentToken.Row, currentToken.Column);
                 Match (Token.Types.IntLiteral);
                 return expr;
             }
         case Token.Types.StringLiteral:
             {
                 StringValueExpr expr = new StringValueExpr (currentToken.Lexeme, currentToken.Row, currentToken.Column);
                 Match (Token.Types.StringLiteral);
                 return expr;
             }
         case Token.Types.BoolLiteral:
             {
                 BoolValueExpr expr = new BoolValueExpr (currentToken.Lexeme, currentToken.Row, currentToken.Column);
                 Match (Token.Types.BoolLiteral);
                 return expr;
             }
         case Token.Types.Identifier:
             {
                 IdentifierValueExpr expr = new IdentifierValueExpr (currentToken.Lexeme, currentToken.Row, currentToken.Column);
                 Match (Token.Types.Identifier);
                 return expr;
             }
         default:
             {
                 throw new SyntaxError ("invalid type " + currentToken.Type, currentToken.Row,
                     currentToken.Column);
             }
     }
 }