public ASTNodeList ParseExpression(ATokens tokens) { ASTNodeList nodes = new ASTNodeList(); while (tokens.CurrentToken != null) { IASTNode node = NodeFactory.CreateNode(tokens.CurrentToken.Text, tokens.CurrentToken.AddSpace); node.Parse(NodeFactory, this, tokens); nodes.Add(node); } return(nodes); }
public ASTNodeList CreateNodeList(string text) { ASTNodeList nodes; IATokenizer tokenizer = ATokenizerFactory.CreateInstance(); tokenizer.ExpandEmptyStrings = ExpandEmptyStrings; tokenizer.Tokenize(text); ATokens tokens = tokenizer.Tokens; nodes = ParseExpression(tokens); return(nodes); }
public IASTNode Accept(ATokens tokens, string text) { if (tokens.CurrentToken == null) { throw new AParserException(string.Format("Expected token '{0}' but current token is empty", text)); } if (text != tokens.CurrentToken.Text.ToLower()) { throw new AParserException(string.Format("Expected token '{0}' but found '{1}'", text, tokens.CurrentToken.Text.ToLower())); } IASTNode node = NodeFactory.CreateNode(tokens.CurrentToken.Text, tokens.CurrentToken.AddSpace); node.AddSpace = tokens.CurrentToken.AddSpace; tokens.GetNextToken(); return(node); }
public override IASTNode Parse(IASTNodeFactory nodeFactory, IAParser aParser, ATokens tokens) { tokens.GetNextToken(); while (tokens.CurrentToken != null && !aParser.Acceptable(tokens, ASTEndParenthesesNode.KeyWord)) { IASTNode newNode = aParser.NodeFactory.CreateNode(tokens.CurrentToken.Text, tokens.CurrentToken.AddSpace); newNode.Parse(aParser.NodeFactory, aParser, tokens); SubNodes.Add(newNode); } if (!aParser.Acceptable(tokens, ASTEndParenthesesNode.KeyWord)) { throw new AParserException("Didn't find closing parentheses"); } SubNodes.Add(aParser.Accept(tokens, ASTEndParenthesesNode.KeyWord)); return(this); }
public override IASTNode Parse(IASTNodeFactory nodeFactory, IAParser aParser, ATokens tokens) { aParser.Accept(tokens, Text); ParseParameters(nodeFactory, aParser, tokens); return(this); }
protected void ParseParameters(IASTNodeFactory nodeFactory, IAParser aParser, ATokens tokens) { SubNodes.Add(aParser.Accept(tokens, ASTStartParenthesesNode.KeyWord)); while (tokens.CurrentToken != null && !aParser.Acceptable(tokens, ASTEndParenthesesNode.KeyWord)) { IASTNode node = nodeFactory.CreateFunctionParameterNode(tokens.CurrentToken.AddSpace); node.Parse(nodeFactory, aParser, tokens); SubNodes.Add(node); if (aParser.Acceptable(tokens, ASTCommaNode.KeyWord)) { SubNodes.Add(aParser.Accept(tokens, ASTCommaNode.KeyWord)); } } SubNodes.Add(aParser.Accept(tokens, ASTEndParenthesesNode.KeyWord)); }
public override IASTNode Parse(IASTNodeFactory nodeFactory, IAParser aParser, ATokens tokens) { while (tokens.CurrentToken != null && !aParser.Acceptable(tokens, ASTEndParenthesesNode.KeyWord) && !aParser.Acceptable(tokens, ASTCommaNode.KeyWord)) { IASTNode node = nodeFactory.CreateNode(tokens.CurrentToken.Text, tokens.CurrentToken.AddSpace); node.Parse(nodeFactory, aParser, tokens); SubNodes.Add(node); } return(this); }
public bool Acceptable(ATokens tokens, string text) { return(tokens.CurrentToken != null && tokens.CurrentToken.Text == text); }