コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }