Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }