Example #1
0
        private ExpressionAST ParseBinOpRHS(int expressionPrecedence, ExpressionAST LHS)
        {
            while (true)
            {
                int tokenPrecedence = GetPrecedence(parser.LastToken);
                if (tokenPrecedence < expressionPrecedence)
                {
                    return(LHS);
                }

                string _operator = parser.LastToken.Value;
                parser.ProceedToken(); // 演算子を消費

                var RHS = ParsePrimary();
                RHS.IsReturnValueUsed = true;

                int nextPrecedence = GetPrecedence(parser.LastToken);
                if (tokenPrecedence < nextPrecedence)
                {
                    RHS = ParseBinOpRHS(tokenPrecedence + 1, RHS);
                }

                LHS = new BinaryExpressionAST(LHS, RHS, _operator);
            }
        }
Example #2
0
 internal BinaryExpressionAST(ExpressionAST LHS,
                              ExpressionAST RHS,
                              string _operator)
 {
     this.LHS       = LHS;
     this.RHS       = RHS;
     this._operator = _operator;
     ReturnType     = LHS.ReturnType;
 }