private bool TryParseIdentifier(out ASTNode node) { node = null; if (IsNext(Token.TokenType.Identifier)) { var token = Accept(); var stEntry = _symbolTable.Get(token.Value); if (stEntry == null) { throw new Exception($"Undefined Identifier {token.Value} at position {token.Position}"); } if (stEntry.Type == SymbolTableEntry.EntryType.Variable) { node = new VariableIdentifierASTNode(token, token.Value); } else { //TODO: Handle Functions next } } return(node != null); }
protected double Evaluate(VariableIdentifierASTNode node) { var entry = _symbolTable.Get(node.Name); if (entry == null || entry.Type != SymbolTableEntry.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(Token.TokenType.Identifier)) { var token = _lexer.Peek(); var stEntry = _symbolTable.Get(token.Value); if (stEntry == null) { throw new Exception($"Undefined Identifier {token.Value} at position {token.Position}"); } if (stEntry.Type == SymbolTableEntry.EntryType.Variable) { node = new VariableIdentifierASTNode(Accept( )); } } return(node != null); }