public void Visit(IdentifierNode node) { Debug.WriteLine("Visiting " + node.GetType().Name); }
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; }
public void Visit(IdentifierNode node) { throw new NotImplementedException(); }
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 }); } }