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); }
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); } } }