fItemPlugin.ItemRules.Core.Parser.ParseCompExpr C# (CSharp) Метод

ParseCompExpr() приватный Метод

private ParseCompExpr ( ParseNode parent ) : void
parent ParseNode
Результат void
        private void ParseCompExpr(ParseNode parent)
        {
            Token tok;
            ParseNode n;
            ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.CompExpr), "CompExpr");
            parent.Nodes.Add(node);

            ParseAddExpr(node);

            tok = scanner.LookAhead(TokenType.EQUAL, TokenType.NOTEQUAL, TokenType.SMALLEQ, TokenType.GREATEQ, TokenType.SMALLTH, TokenType.GREATTH);
            if (tok.Type == TokenType.EQUAL
                || tok.Type == TokenType.NOTEQUAL
                || tok.Type == TokenType.SMALLEQ
                || tok.Type == TokenType.GREATEQ
                || tok.Type == TokenType.SMALLTH
                || tok.Type == TokenType.GREATTH)
            {

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

                ParseAddExpr(node);
            }

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