コード例 #1
0
        private void ParseFuncCall(ParseNode parent)
        {
            ParseNode item = parent.CreateNode(this.scanner.GetToken(OpenExcel.Common.FormulaParser.TokenType.FuncCall), "FuncCall");

            parent.Nodes.Add(item);
            Token token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.FUNC });

            if (token.Type != OpenExcel.Common.FormulaParser.TokenType.FUNC)
            {
                this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.FUNC.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length));
            }
            ParseNode node = item.CreateNode(token, token.ToString());

            item.Token.UpdateRange(token);
            item.Nodes.Add(node);
            token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.PARENOPEN });
            if (token.Type != OpenExcel.Common.FormulaParser.TokenType.PARENOPEN)
            {
                this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.PARENOPEN.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length));
            }
            node = item.CreateNode(token, token.ToString());
            item.Token.UpdateRange(token);
            item.Nodes.Add(node);
            token = this.scanner.LookAhead(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.NULL, OpenExcel.Common.FormulaParser.TokenType.BOOL, OpenExcel.Common.FormulaParser.TokenType.NUMBER, OpenExcel.Common.FormulaParser.TokenType.STRING, OpenExcel.Common.FormulaParser.TokenType.PARENOPEN, OpenExcel.Common.FormulaParser.TokenType.BRACEOPEN, OpenExcel.Common.FormulaParser.TokenType.SHEETNAME, OpenExcel.Common.FormulaParser.TokenType.ADDRESS, OpenExcel.Common.FormulaParser.TokenType.ERR, OpenExcel.Common.FormulaParser.TokenType.FUNC, OpenExcel.Common.FormulaParser.TokenType.COMMA });
            if ((((token.Type == OpenExcel.Common.FormulaParser.TokenType.NULL) || (token.Type == OpenExcel.Common.FormulaParser.TokenType.BOOL)) || ((token.Type == OpenExcel.Common.FormulaParser.TokenType.NUMBER) || (token.Type == OpenExcel.Common.FormulaParser.TokenType.STRING))) || ((((token.Type == OpenExcel.Common.FormulaParser.TokenType.PARENOPEN) || (token.Type == OpenExcel.Common.FormulaParser.TokenType.BRACEOPEN)) || ((token.Type == OpenExcel.Common.FormulaParser.TokenType.SHEETNAME) || (token.Type == OpenExcel.Common.FormulaParser.TokenType.ADDRESS))) || (((token.Type == OpenExcel.Common.FormulaParser.TokenType.ERR) || (token.Type == OpenExcel.Common.FormulaParser.TokenType.FUNC)) || (token.Type == OpenExcel.Common.FormulaParser.TokenType.COMMA))))
            {
                this.ParseParams(item);
            }
            token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.PARENCLOSE });
            if (token.Type != OpenExcel.Common.FormulaParser.TokenType.PARENCLOSE)
            {
                this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.PARENCLOSE.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length));
            }
            node = item.CreateNode(token, token.ToString());
            item.Token.UpdateRange(token);
            item.Nodes.Add(node);
            parent.Token.UpdateRange(item.Token);
        }
コード例 #2
0
        private void ParseStart(ParseNode parent)
        {
            Token     tok;
            ParseNode n;
            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Start), "Start");

            parent.Nodes.Add(node);



            ParseComplexExpr(node);


            tok = scanner.Scan(TokenType.EOF);
            if (tok.Type != TokenType.EOF)
            {
                tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.EOF.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length));
            }
            n = node.CreateNode(tok, tok.ToString());
            node.Token.UpdateRange(tok);
            node.Nodes.Add(n);

            parent.Token.UpdateRange(node.Token);
        }
コード例 #3
0
        private void ParseRange(ParseNode parent)
        {
            Token     token;
            ParseNode node;
            ParseNode item = parent.CreateNode(this.scanner.GetToken(OpenExcel.Common.FormulaParser.TokenType.Range), "Range");

            parent.Nodes.Add(item);
            if (this.scanner.LookAhead(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.SHEETNAME }).Type == OpenExcel.Common.FormulaParser.TokenType.SHEETNAME)
            {
                token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.SHEETNAME });
                if (token.Type != OpenExcel.Common.FormulaParser.TokenType.SHEETNAME)
                {
                    this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.SHEETNAME.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length));
                }
                node = item.CreateNode(token, token.ToString());
                item.Token.UpdateRange(token);
                item.Nodes.Add(node);
            }
            token = this.scanner.LookAhead(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.ADDRESS, OpenExcel.Common.FormulaParser.TokenType.ERR });
            switch (token.Type)
            {
            case OpenExcel.Common.FormulaParser.TokenType.ERR:
                token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.ERR });
                if (token.Type != OpenExcel.Common.FormulaParser.TokenType.ERR)
                {
                    this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.ERR.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length));
                }
                node = item.CreateNode(token, token.ToString());
                item.Token.UpdateRange(token);
                item.Nodes.Add(node);
                break;

            case OpenExcel.Common.FormulaParser.TokenType.ADDRESS:
                token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.ADDRESS });
                if (token.Type != OpenExcel.Common.FormulaParser.TokenType.ADDRESS)
                {
                    this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.ADDRESS.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length));
                }
                node = item.CreateNode(token, token.ToString());
                item.Token.UpdateRange(token);
                item.Nodes.Add(node);
                break;

            default:
                this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found.", 2, 0, token.StartPos, token.StartPos, token.Length));
                break;
            }
            if (this.scanner.LookAhead(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.COLON }).Type == OpenExcel.Common.FormulaParser.TokenType.COLON)
            {
                token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.COLON });
                if (token.Type != OpenExcel.Common.FormulaParser.TokenType.COLON)
                {
                    this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.COLON.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length));
                }
                node = item.CreateNode(token, token.ToString());
                item.Token.UpdateRange(token);
                item.Nodes.Add(node);
                token = this.scanner.LookAhead(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.ADDRESS, OpenExcel.Common.FormulaParser.TokenType.ERR });
                switch (token.Type)
                {
                case OpenExcel.Common.FormulaParser.TokenType.ERR:
                    token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.ERR });
                    if (token.Type != OpenExcel.Common.FormulaParser.TokenType.ERR)
                    {
                        this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.ERR.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length));
                    }
                    node = item.CreateNode(token, token.ToString());
                    item.Token.UpdateRange(token);
                    item.Nodes.Add(node);
                    goto Label_059B;

                case OpenExcel.Common.FormulaParser.TokenType.ADDRESS:
                    token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.ADDRESS });
                    if (token.Type != OpenExcel.Common.FormulaParser.TokenType.ADDRESS)
                    {
                        this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.ADDRESS.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length));
                    }
                    node = item.CreateNode(token, token.ToString());
                    item.Token.UpdateRange(token);
                    item.Nodes.Add(node);
                    goto Label_059B;
                }
                this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found.", 2, 0, token.StartPos, token.StartPos, token.Length));
            }
Label_059B:
            parent.Token.UpdateRange(item.Token);
        }
コード例 #4
0
        private void ParseExpr(ParseNode parent)
        {
            ParseNode node;
            ParseNode item = parent.CreateNode(this.scanner.GetToken(OpenExcel.Common.FormulaParser.TokenType.Expr), "Expr");

            parent.Nodes.Add(item);
            Token token = this.scanner.LookAhead(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.NULL, OpenExcel.Common.FormulaParser.TokenType.BOOL, OpenExcel.Common.FormulaParser.TokenType.NUMBER, OpenExcel.Common.FormulaParser.TokenType.STRING, OpenExcel.Common.FormulaParser.TokenType.PARENOPEN, OpenExcel.Common.FormulaParser.TokenType.BRACEOPEN, OpenExcel.Common.FormulaParser.TokenType.SHEETNAME, OpenExcel.Common.FormulaParser.TokenType.ADDRESS, OpenExcel.Common.FormulaParser.TokenType.ERR, OpenExcel.Common.FormulaParser.TokenType.FUNC });

            switch (token.Type)
            {
            case OpenExcel.Common.FormulaParser.TokenType.PARENOPEN:
                token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.PARENOPEN });
                if (token.Type != OpenExcel.Common.FormulaParser.TokenType.PARENOPEN)
                {
                    this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.PARENOPEN.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length));
                }
                node = item.CreateNode(token, token.ToString());
                item.Token.UpdateRange(token);
                item.Nodes.Add(node);
                this.ParseExpr(item);
                token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.PARENCLOSE });
                if (token.Type != OpenExcel.Common.FormulaParser.TokenType.PARENCLOSE)
                {
                    this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.PARENCLOSE.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length));
                }
                node = item.CreateNode(token, token.ToString());
                item.Token.UpdateRange(token);
                item.Nodes.Add(node);
                break;

            case OpenExcel.Common.FormulaParser.TokenType.BRACEOPEN:
                this.ParseArray(item);
                break;

            case OpenExcel.Common.FormulaParser.TokenType.FUNC:
                this.ParseFuncCall(item);
                break;

            case OpenExcel.Common.FormulaParser.TokenType.ERR:
            case OpenExcel.Common.FormulaParser.TokenType.SHEETNAME:
            case OpenExcel.Common.FormulaParser.TokenType.ADDRESS:
                this.ParseRange(item);
                break;

            case OpenExcel.Common.FormulaParser.TokenType.NULL:
                token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.NULL });
                if (token.Type != OpenExcel.Common.FormulaParser.TokenType.NULL)
                {
                    this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.NULL.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length));
                }
                node = item.CreateNode(token, token.ToString());
                item.Token.UpdateRange(token);
                item.Nodes.Add(node);
                break;

            case OpenExcel.Common.FormulaParser.TokenType.BOOL:
                token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.BOOL });
                if (token.Type != OpenExcel.Common.FormulaParser.TokenType.BOOL)
                {
                    this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.BOOL.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length));
                }
                node = item.CreateNode(token, token.ToString());
                item.Token.UpdateRange(token);
                item.Nodes.Add(node);
                break;

            case OpenExcel.Common.FormulaParser.TokenType.NUMBER:
                token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.NUMBER });
                if (token.Type != OpenExcel.Common.FormulaParser.TokenType.NUMBER)
                {
                    this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.NUMBER.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length));
                }
                node = item.CreateNode(token, token.ToString());
                item.Token.UpdateRange(token);
                item.Nodes.Add(node);
                break;

            case OpenExcel.Common.FormulaParser.TokenType.STRING:
                token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.STRING });
                if (token.Type != OpenExcel.Common.FormulaParser.TokenType.STRING)
                {
                    this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.STRING.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length));
                }
                node = item.CreateNode(token, token.ToString());
                item.Token.UpdateRange(token);
                item.Nodes.Add(node);
                break;

            default:
                this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found.", 2, 0, token.StartPos, token.StartPos, token.Length));
                break;
            }
            parent.Token.UpdateRange(item.Token);
        }
コード例 #5
0
        private void ParseExpr(ParseNode parent)
        {
            Token     tok;
            ParseNode n;
            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Expr), "Expr");

            parent.Nodes.Add(node);

            tok = scanner.LookAhead(TokenType.NULL, TokenType.BOOL, TokenType.NUMBER, TokenType.STRING, TokenType.PARENOPEN, TokenType.BRACEOPEN, TokenType.SHEETNAME, TokenType.ADDRESS, TokenType.ERR, TokenType.FUNC);
            switch (tok.Type)
            {
            case TokenType.NULL:
                tok = scanner.Scan(TokenType.NULL);
                if (tok.Type != TokenType.NULL)
                {
                    tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.NULL.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length));
                }
                n = node.CreateNode(tok, tok.ToString());
                node.Token.UpdateRange(tok);
                node.Nodes.Add(n);
                break;

            case TokenType.BOOL:
                tok = scanner.Scan(TokenType.BOOL);
                if (tok.Type != TokenType.BOOL)
                {
                    tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.BOOL.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length));
                }
                n = node.CreateNode(tok, tok.ToString());
                node.Token.UpdateRange(tok);
                node.Nodes.Add(n);
                break;

            case TokenType.NUMBER:
                tok = scanner.Scan(TokenType.NUMBER);
                if (tok.Type != TokenType.NUMBER)
                {
                    tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.NUMBER.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length));
                }
                n = node.CreateNode(tok, tok.ToString());
                node.Token.UpdateRange(tok);
                node.Nodes.Add(n);
                break;

            case TokenType.STRING:
                tok = scanner.Scan(TokenType.STRING);
                if (tok.Type != TokenType.STRING)
                {
                    tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.STRING.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length));
                }
                n = node.CreateNode(tok, tok.ToString());
                node.Token.UpdateRange(tok);
                node.Nodes.Add(n);
                break;

            case TokenType.PARENOPEN:


                tok = scanner.Scan(TokenType.PARENOPEN);
                if (tok.Type != TokenType.PARENOPEN)
                {
                    tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.PARENOPEN.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length));
                }
                n = node.CreateNode(tok, tok.ToString());
                node.Token.UpdateRange(tok);
                node.Nodes.Add(n);


                ParseExpr(node);


                tok = scanner.Scan(TokenType.PARENCLOSE);
                if (tok.Type != TokenType.PARENCLOSE)
                {
                    tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.PARENCLOSE.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length));
                }
                n = node.CreateNode(tok, tok.ToString());
                node.Token.UpdateRange(tok);
                node.Nodes.Add(n);
                break;

            case TokenType.BRACEOPEN:
                ParseArray(node);
                break;

            case TokenType.SHEETNAME:
            case TokenType.ADDRESS:
            case TokenType.ERR:
                ParseRange(node);
                break;

            case TokenType.FUNC:
                ParseFuncCall(node);
                break;

            default:
                tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found.", 0x0002, 0, tok.StartPos, tok.StartPos, tok.Length));
                break;
            }

            parent.Token.UpdateRange(node.Token);
        }
コード例 #6
0
        private void ParseRange(ParseNode parent)
        {
            Token     tok;
            ParseNode n;
            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Range), "Range");

            parent.Nodes.Add(node);



            tok = scanner.LookAhead(TokenType.SHEETNAME);
            if (tok.Type == TokenType.SHEETNAME)
            {
                tok = scanner.Scan(TokenType.SHEETNAME);
                if (tok.Type != TokenType.SHEETNAME)
                {
                    tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.SHEETNAME.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length));
                }
                n = node.CreateNode(tok, tok.ToString());
                node.Token.UpdateRange(tok);
                node.Nodes.Add(n);
            }


            tok = scanner.LookAhead(TokenType.ADDRESS, TokenType.ERR);
            switch (tok.Type)
            {
            case TokenType.ADDRESS:
                tok = scanner.Scan(TokenType.ADDRESS);
                if (tok.Type != TokenType.ADDRESS)
                {
                    tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.ADDRESS.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length));
                }
                n = node.CreateNode(tok, tok.ToString());
                node.Token.UpdateRange(tok);
                node.Nodes.Add(n);
                break;

            case TokenType.ERR:
                tok = scanner.Scan(TokenType.ERR);
                if (tok.Type != TokenType.ERR)
                {
                    tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.ERR.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length));
                }
                n = node.CreateNode(tok, tok.ToString());
                node.Token.UpdateRange(tok);
                node.Nodes.Add(n);
                break;

            default:
                tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found.", 0x0002, 0, tok.StartPos, tok.StartPos, tok.Length));
                break;
            }


            tok = scanner.LookAhead(TokenType.COLON);
            if (tok.Type == TokenType.COLON)
            {
                tok = scanner.Scan(TokenType.COLON);
                if (tok.Type != TokenType.COLON)
                {
                    tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.COLON.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length));
                }
                n = node.CreateNode(tok, tok.ToString());
                node.Token.UpdateRange(tok);
                node.Nodes.Add(n);


                tok = scanner.LookAhead(TokenType.ADDRESS, TokenType.ERR);
                switch (tok.Type)
                {
                case TokenType.ADDRESS:
                    tok = scanner.Scan(TokenType.ADDRESS);
                    if (tok.Type != TokenType.ADDRESS)
                    {
                        tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.ADDRESS.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length));
                    }
                    n = node.CreateNode(tok, tok.ToString());
                    node.Token.UpdateRange(tok);
                    node.Nodes.Add(n);
                    break;

                case TokenType.ERR:
                    tok = scanner.Scan(TokenType.ERR);
                    if (tok.Type != TokenType.ERR)
                    {
                        tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.ERR.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length));
                    }
                    n = node.CreateNode(tok, tok.ToString());
                    node.Token.UpdateRange(tok);
                    node.Nodes.Add(n);
                    break;

                default:
                    tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found.", 0x0002, 0, tok.StartPos, tok.StartPos, tok.Length));
                    break;
                }
            }

            parent.Token.UpdateRange(node.Token);
        }
コード例 #7
0
        private void ParseArrayElems(ParseNode parent)
        {
            Token     tok;
            ParseNode n;
            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.ArrayElems), "ArrayElems");

            parent.Nodes.Add(node);



            tok = scanner.LookAhead(TokenType.NULL, TokenType.BOOL, TokenType.NUMBER, TokenType.STRING, TokenType.PARENOPEN, TokenType.BRACEOPEN, TokenType.SHEETNAME, TokenType.ADDRESS, TokenType.ERR, TokenType.FUNC);
            if (tok.Type == TokenType.NULL ||
                tok.Type == TokenType.BOOL ||
                tok.Type == TokenType.NUMBER ||
                tok.Type == TokenType.STRING ||
                tok.Type == TokenType.PARENOPEN ||
                tok.Type == TokenType.BRACEOPEN ||
                tok.Type == TokenType.SHEETNAME ||
                tok.Type == TokenType.ADDRESS ||
                tok.Type == TokenType.ERR ||
                tok.Type == TokenType.FUNC)
            {
                ParseComplexExpr(node);
            }


            tok = scanner.LookAhead(TokenType.COMMA, TokenType.SEMICOLON);
            while (tok.Type == TokenType.COMMA ||
                   tok.Type == TokenType.SEMICOLON)
            {
                tok = scanner.LookAhead(TokenType.COMMA, TokenType.SEMICOLON);
                switch (tok.Type)
                {
                case TokenType.COMMA:
                    tok = scanner.Scan(TokenType.COMMA);
                    if (tok.Type != TokenType.COMMA)
                    {
                        tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.COMMA.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length));
                    }
                    n = node.CreateNode(tok, tok.ToString());
                    node.Token.UpdateRange(tok);
                    node.Nodes.Add(n);
                    break;

                case TokenType.SEMICOLON:
                    tok = scanner.Scan(TokenType.SEMICOLON);
                    if (tok.Type != TokenType.SEMICOLON)
                    {
                        tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.SEMICOLON.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length));
                    }
                    n = node.CreateNode(tok, tok.ToString());
                    node.Token.UpdateRange(tok);
                    node.Nodes.Add(n);
                    break;

                default:
                    tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found.", 0x0002, 0, tok.StartPos, tok.StartPos, tok.Length));
                    break;
                }


                ParseComplexExpr(node);
                tok = scanner.LookAhead(TokenType.COMMA, TokenType.SEMICOLON);
            }

            parent.Token.UpdateRange(node.Token);
        }