Exemplo n.º 1
0
        Expression Term()
        {
            var lhs = Group();

            while (true)
            {
                var token = Peek();

                if (token != null)
                {
                    if (token.Type == TokenType.Operator && (string)token.Value == "*")
                    {
                        Next();
                        var rhs = Group();

                        var ret = new BinOpExpression();
                        ret.Line     = token.Line;
                        ret.Lhs      = lhs;
                        ret.Rhs      = rhs;
                        ret.Operator = (string)token.Value;
                        lhs          = ret;
                    }
                    else if (token.Type == TokenType.Operator && (string)token.Value == "/")
                    {
                        Next();
                        var rhs = Group();

                        var ret = new BinOpExpression();
                        ret.Line     = token.Line;
                        ret.Lhs      = lhs;
                        ret.Rhs      = rhs;
                        ret.Operator = (string)token.Value;
                        lhs          = ret;
                    }
                    else if (token.Type == TokenType.Operator)
                    {
                        break;
                    }
                    else if (token.Type == TokenType.RightParentheses)
                    {
                        break;
                    }
                    else if (token.Type == TokenType.Equal || token.Type == TokenType.NewLine)
                    {
                        break;
                    }
                    else
                    {
                        throw new CompileException(string.Format("Invalid token {0}", token.Type), token.Line);
                    }
                }
                else
                {
                    return(lhs);
                }
            }

            return(lhs);
        }
Exemplo n.º 2
0
        Expression Term()
        {
            var lhs = Group();

            while (true)
            {
                var token = Peek();

                if (token != null)
                {
                    if (token.Type == TokenType.Operator && ((string)token.Value == "*" || (string)token.Value == "/" || (string)token.Value == "%"))
                    {
                        Next();
                        var rhs = Group();

                        var ret = new BinOpExpression();
                        ret.Line     = token.Line;
                        ret.Lhs      = lhs;
                        ret.Rhs      = rhs;
                        ret.Operator = (string)token.Value;
                        lhs          = ret;
                    }
                    else if (token.Type == TokenType.Operator)
                    {
                        break;
                    }
                    else if (token.Type == TokenType.RightParentheses)
                    {
                        break;
                    }
                    else if (token.Type == TokenType.Equal || token.Type == TokenType.NewLine)
                    {
                        break;
                    }
                    else if (token.Type == TokenType.Comma)
                    {
                        break;
                    }
                    else
                    {
                        throw new InvalidTokenException(token.ToString(), token.Line);
                    }
                }
                else
                {
                    return(lhs);
                }
            }

            return(lhs);
        }