private double Evaluate(VariableIdentifierAstNode node) { var entry = _symbolTable.Get(node.Name); if (entry is null || entry.Type != EntryType.Variable) { throw new Exception($"Error evaluating expression. Variable {node.Name}"); } return((entry as VariableSymbolTableEntry).Value); }
private bool TryParseVariable(out AstNode node) { node = null; if (IsNext(TokenType.Identifier)) { var token = _lexer.Peek(); var stEntry = _symbolTable.Get(token.Value); if (stEntry is null) { throw new Exception($"Undefined identifier {token.Value} at position {token.Position}"); } if (stEntry.Type == EntryType.Variable) { node = new VariableIdentifierAstNode(Accept()); } } return(node != null); }