コード例 #1
0
ファイル: ParserTests.cs プロジェクト: helgihaf/Alpha
 public void Visit(IdentifierNode node)
 {
     Debug.WriteLine("Visiting " + node.GetType().Name);
 }
コード例 #2
0
ファイル: ExpressionParser.cs プロジェクト: helgihaf/Alpha
        private Node IdentifierRest(string identifier, bool lateEvaluation)
        {
            Node result;
            List<Node> nodeList = null;

            if (lex.Token == Token.OpenParentheses)
            {
                //
                // Function call
                //
                lex.Next();
                if (lex.Token != Token.ClosedParentheses)
                {
                    nodeList = ExpressionList();
                    if (nodeList == null)
                    {
                        throw CreateErrorExpected("expression");
                    }
                    if (lex.Token != Token.ClosedParentheses)
                    {
                        throw CreateErrorExpectedToken(Token.ClosedParentheses);
                    }
                }
                lex.Next();
                var functionNode =
                    new FunctionNode { FunctionName = identifier, LateEvaluation = lateEvaluation };
                functionNode.Parameters.AddRange(nodeList);
                result = functionNode;
            }
            else if (lex.Token == Token.OpenBracket)
            {
                lex.Next();
                nodeList = ExpressionList();
                if (nodeList == null)
                {
                    throw CreateErrorExpected("array-indexing expression");
                }
                if (lex.Token != Token.ClosedBracket)
                {
                    throw CreateErrorExpectedToken(Token.ClosedBracket);
                }
                lex.Next();
                var arrayMemberNode = new ArrayMemberNode { Identifier = identifier, LateEvaluation = lateEvaluation };
                arrayMemberNode.Indexers.AddRange(nodeList);
                result = arrayMemberNode;
            }
            else
            {
                result = new IdentifierNode { Identifier = identifier, LateEvaluation = lateEvaluation };
            }

            return result;
        }
コード例 #3
0
ファイル: ParserTests.cs プロジェクト: helgihaf/Alpha
 public void Visit(IdentifierNode node)
 {
     throw new NotImplementedException();
 }
コード例 #4
0
ファイル: Evaluator.cs プロジェクト: helgihaf/Alpha
        public void Visit(IdentifierNode node)
        {
            AssertResolver();

            if (!node.LateEvaluation)
            {
                valueStack.Push(Resolver.ResolveIdentifier(node.Identifier));
            }
            else
            {
                valueStack.Push(new MemberInfo { Name = node.Identifier, MemberType = MemberType.Property });
            }
        }