Пример #1
0
        public new static Value Parse(TokenParser p)
        {
            Token t = p.GetNext(), t2;

            if (t == null)
            {
                Program.ErrorToken       = null;
                Program.ErrorDescription = "Era esperado um valor";
                return(null);
            }

            switch (t.Type)
            {
            case TokenType.Number:
                return(new Constant(t));

            case TokenType.OpenBracket:
                Expression e = Expression.Parse(p);
                if (e == null)
                {
                    return(null);
                }
                t2 = p.GetNext();
                if (t2 == null)
                {
                    Program.ErrorToken       = null;
                    Program.ErrorDescription = "Era esperado )";
                    return(null);
                }
                if (t2.Type == TokenType.CloseBracket)
                {
                    return(new Bracket(t, e, t2));
                }
                Program.ErrorToken       = t2;
                Program.ErrorDescription = "Símbolo inválido! Era esperado )";
                return(null);

            case TokenType.OperatorSub:
                Value v = Parse(p);
                if (v == null)
                {
                    return(null);
                }
                return(new Negate(t, v));
            }
            Program.ErrorToken       = t;
            Program.ErrorDescription = "Símbolo inválido: \"" + t.ToString() + "\"";
            return(null);
        }
Пример #2
0
        //public static List<Statement> Parse(TokenParser p)
        public static Expression Parse(TokenParser p)
        {
            ErrorToken       = null;
            ErrorDescription = null;

            Expression e = Expression.Parse(p);

            if (e == null)
            {
                return(null);
            }
            Token t = p.GetNext();

            if (t != null)
            {
                ErrorToken       = t;
                ErrorDescription = "Símbolo inválido! Era esperado fim de arquivo";
                return(null);
            }
            if (p.HasError)
            {
                return(null);
            }
            return(e);
        }