コード例 #1
0
ファイル: AParser.cs プロジェクト: radtek/ACopy
        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);
        }
コード例 #2
0
ファイル: AParser.cs プロジェクト: radtek/ACopy
        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);
        }
コード例 #3
0
ファイル: AParser.cs プロジェクト: radtek/ACopy
        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);
        }
コード例 #4
0
 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);
 }
コード例 #5
0
 public override IASTNode Parse(IASTNodeFactory nodeFactory, IAParser aParser, ATokens tokens)
 {
     aParser.Accept(tokens, Text);
     ParseParameters(nodeFactory, aParser, tokens);
     return(this);
 }
コード例 #6
0
        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));
        }
コード例 #7
0
 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);
 }
コード例 #8
0
ファイル: AParser.cs プロジェクト: radtek/ACopy
 public bool Acceptable(ATokens tokens, string text)
 {
     return(tokens.CurrentToken != null && tokens.CurrentToken.Text == text);
 }