Esempio n. 1
0
        /*additive-expression-p:
         | additive-operators multiplicative-expression additive-expression-p
         | EPSILON */
        private ExpressionNode additive_expression_p(ExpressionNode leftExpression)
        {
            printIfDebug("additive_expression_p");
            if (pass(additiveOperatorOptions))
            {
                Token additiveOperatior = token;
                consumeToken();
                var            multExpression   = multiplicative_expression();
                ExpressionNode resultExpression = null;
                if (additiveOperatior.type == TokenType.OP_SUM)
                {
                    resultExpression = new SumExpressionNode(leftExpression, multExpression, additiveOperatior);
                }
                else
                {
                    resultExpression = new SubExpressionNode(leftExpression, multExpression, additiveOperatior);
                }

                return(additive_expression_p(resultExpression));
            }
            else
            {
                return(leftExpression);
            }
        }
 public static UnaryPostOperatorNode Create(UnaryPostOperatorType type, SubExpressionNode operand, Token token, int tokenIndex)
 {
     switch (type)
     {
         case UnaryPostOperatorType.DoublePlus:
             return new DoublePlusUnaryPostOperatorNode(operand, token, tokenIndex);
         case UnaryPostOperatorType.DoubleMinus:
             return new DoubleMinusUnaryPostOperatorNode(operand, token, tokenIndex);
         default:
             throw new InternalCompilerException("Unknown UnaryPostOperatorType.");
     }
 }
 public static BinaryOperatorNode Create(BinaryOperatorType type, SubExpressionNode left, SubExpressionNode right, Token token, int tokenIndex)
 {
     switch (type)
     {
         case BinaryOperatorType.Ampersand:
             return new AmpersandBinaryOperatorNode(left, right, token, tokenIndex);
         case BinaryOperatorType.AmpersandEqual:
             return new AmpersandEqualBinaryOperatorNode(left, right, token, tokenIndex);
         case BinaryOperatorType.Caret:
             return new CaretBinaryOperatorNode(left, right, token, tokenIndex);
         case BinaryOperatorType.CaretEqual:
             return new CaretEqualBinaryOperaratorNode(left, right, token, tokenIndex);
         case BinaryOperatorType.Divide:
             return new DivideBinaryOperatorNode(left, right, token, tokenIndex);
         case BinaryOperatorType.DivideEqual:
             return new DivideEqualBinaryOperatorNode(left, right, token, tokenIndex);
         case BinaryOperatorType.Minus:
             return new MinusBinaryOperatorNode(left, right, token, tokenIndex);
         case BinaryOperatorType.MinusEqual:
             return new MinusEqualBinaryOperatorNode(left, right, token, tokenIndex);
         case BinaryOperatorType.Mod:
             return new ModBinaryOperatorNode(left, right, token, tokenIndex);
         case BinaryOperatorType.ModEqual:
             return new ModEqualBinaryOperatorNode(left, right, token, tokenIndex);
         case BinaryOperatorType.Pipe:
             return new PipeBinaryOperatorNode(left, right, token, tokenIndex);
         case BinaryOperatorType.PipeEqual:
             return new PipeEqualBinaryOperatorNode(left, right, token, tokenIndex);
         case BinaryOperatorType.Plus:
             return new PlusBinaryOperatorNode(left, right, token, tokenIndex);
         case BinaryOperatorType.PlusEqual:
             return new PlusEqualBinaryOperatorNode(left, right, token, tokenIndex);
         case BinaryOperatorType.ShiftLeft:
             return new ShiftLeftBinaryOperatorNode(left, right, token, tokenIndex);
         case BinaryOperatorType.ShiftLeftEqual:
             return new ShiftLeftEqualBinaryOperatorNode(left, right, token, tokenIndex);
         case BinaryOperatorType.ShiftRight:
             return new ShiftRightBinaryOperatorNode(left, right, token, tokenIndex);
         case BinaryOperatorType.ShiftRightEqual:
             return new ShiftRightEqualBinaryOperatorNode(left, right, token, tokenIndex);
         case BinaryOperatorType.Star:
             return new StarBinaryOperatorNode(left, right, token, tokenIndex);
         case BinaryOperatorType.StarEqual:
             return new StarEqualBinaryOperatorNode(left, right, token, tokenIndex);
         default:
             throw new InternalCompilerException("Unknown BinaryOperatorType.");
     }
 }
 public static UnaryPreOperatorNode Create(UnaryPreOperatorType type, SubExpressionNode operand, Token token, int tokenIndex)
 {
     switch (type)
     {
         case UnaryPreOperatorType.Ampersand:
             return new AmpersandUnaryPreOperatorNode(operand, token, tokenIndex);
         case UnaryPreOperatorType.DoubleMinus:
             return new DoubleMinusUnaryPreOperatorNode(operand, token, tokenIndex);
         case UnaryPreOperatorType.DoublePlus:
             return new DoublePlusUnaryPreOperatorNode(operand, token, tokenIndex);
         case UnaryPreOperatorType.Exclamation:
             return new ExclamationUnaryPreOperatorNode(operand, token, tokenIndex);
         case UnaryPreOperatorType.Minus:
             return new MinusUnaryPreOperatorNode(operand, token, tokenIndex);
         case UnaryPreOperatorType.Star:
             return new StarUnaryPreOperatorNode(operand, token, tokenIndex);
         case UnaryPreOperatorType.Tilde:
             return new TildeUnaryPreOperatorNode(operand, token, tokenIndex);
         default:
             throw new InternalCompilerException("Unknown UnaryPreOperatorType.");
     }
 }
        protected BitwiseBinaryOperatorNode(SubExpressionNode left, SubExpressionNode right, Token token, int tokenIndex) : base(left, right, token, tokenIndex)
        {

        }
 public PipeBinaryOperatorNode(SubExpressionNode left, SubExpressionNode right, Token token, int tokenIndex) : base(left, right, token, tokenIndex)
 {
 }
 public DoubleMinusUnaryPostOperatorNode(SubExpressionNode operand, Token token, int tokenIndex) : base(UnaryPostOperatorType.DoubleMinus, operand, token, tokenIndex)
 {
 }
 protected UnaryPostOperatorNode(UnaryPostOperatorType operatorType, SubExpressionNode operand, Token token, int tokenIndex) : base(token, tokenIndex)
 {
     OperatorType = operatorType;
     Operand = operand;
 }
        public PointerSupportedArithmeticBinaryOperatorNode(SubExpressionNode left, SubExpressionNode right, Token token, int tokenIndex) : base(left, right, token, tokenIndex)
        {

        }
 protected BinaryOperatorNode(SubExpressionNode left, SubExpressionNode right, Token token, int tokenIndex) : base(token, tokenIndex)
 {
     Left = left;
     Right = right;
 }
 public AmpersandUnaryPreOperatorNode(SubExpressionNode operand, Token token, int tokenIndex) : base(UnaryPreOperatorType.Ampersand, operand, token, tokenIndex)
 {
 }
 public TildeUnaryPreOperatorNode(SubExpressionNode operand, Token token, int tokenIndex) : base(UnaryPreOperatorType.Tilde, operand, token, tokenIndex)
 {
 }
 public MinusUnaryPreOperatorNode(SubExpressionNode operand, Token token, int tokenIndex) : base(UnaryPreOperatorType.Minus, operand, token, tokenIndex)
 {
 }
 public ExclamationUnaryPreOperatorNode(SubExpressionNode operand, Token token, int tokenIndex) : base(UnaryPreOperatorType.Exclamation, operand, token, tokenIndex)
 {
 }
 public StarUnaryPreOperatorNode(SubExpressionNode operand, Token token, int tokenIndex) : base(UnaryPreOperatorType.Star, operand, token, tokenIndex)
 {
 }