Exemple #1
0
 Statement CaseDefaultStatement(SSwitch switchStat)
 {
     //var ret =  new SSequence(new SAssignment(vars["min"], new EUnaryOperation(vars["tempCurrentValue"], OperationType.Switch)),
     //    new SAssignment(vars["max"], new EUnaryOperation(vars["tempCurrentValue"], OperationType.Switch)),
     //    new SAssignment(vars["increasing_or_decreasing_factor"], new EUnaryOperation(vars["tempCurrentValue"], OperationType.Switch)));
     //while(currToken != "}")
     //{
     //    NextToken();
     //}
     //return ret;
     if (Accept(Symbol.S_Default))
     {
         List <Statement> stats = new List <Statement>();
         Expect(Symbol.S_Colon);
         while (!Accept(Symbol.S_Break))
         {
             stats.Add(Statement());
         }
         Expect(Symbol.S_Semicolon);
         switchStat.defaultStat = new SSequence(stats.ToArray());
         return(new SSequence(stats.ToArray()));
     }
     else
     {
         Expect(Symbol.S_Case);
         Numeric    caseKey   = new Numeric(currToken.sequence, 0);
         Expression condition = new EUnaryOperation(new EBinaryOperation(switchStat.dice, new ENumericLiteral(currToken.sequence, 0), OperationType.Substraction), OperationType.EqualZero);
         NextToken();
         Expect(Symbol.S_Colon);
         List <Statement> ifStats = new List <Statement>();
         while (!Accept(Symbol.S_Break))
         {
             ifStats.Add(Statement());
         }
         Expect(Symbol.S_Semicolon);
         switchStat.caseStat.Add(caseKey, new SSequence(ifStats.ToArray()));
         var elseStats = CaseDefaultStatement(switchStat);
         return(new SIfElse(condition, new SSequence(ifStats.ToArray()), elseStats, null, null));
     }
 }
Exemple #2
0
 Expression BooleanFactor()
 {
     if (Accept(Symbol.S_True))
     {
         var num = new ENumericLiteral(1, 0);
         AddDOMForLiteral(num);
         return(num);
     }
     else if (Accept(Symbol.S_False))
     {
         var num = new ENumericLiteral(0, 0);
         AddDOMForLiteral(num);
         return(num);
     }
     else if (Accept(Symbol.S_LParen))
     {
         var exp = BooleanExpression();
         Expect(Symbol.S_RParen);
         return(exp);
     }
     //else if(Accept("!"))
     //{
     //    var exp = BooleanExpression();
     //}
     else
     {
         var        operand1 = NumericExpression();
         Expression result   = null;
         if (Accept(Symbol.S_Equal))
         {
             var operand2 = NumericExpression();
             result = new EUnaryOperation(new EBinaryOperation(operand1, operand2, OperationType.Substraction), OperationType.EqualZero);
         }
         else if (Accept(Symbol.S_NotEqual))
         {
             var operand2 = NumericExpression();
             result = new EUnaryOperation(new EUnaryOperation(new EBinaryOperation(operand1, operand2, OperationType.Substraction), OperationType.EqualZero), OperationType.NOT);
         }
         else if (Accept(Symbol.S_EqualLess))
         {
             var operand2 = NumericExpression();
             result = new EUnaryOperation(new EUnaryOperation(new EBinaryOperation(operand2, operand1, OperationType.Substraction), OperationType.LessZero), OperationType.NOT);
         }
         else if (Accept(Symbol.S_EqualGreater))
         {
             var operand2 = NumericExpression();
             result = new EUnaryOperation(new EUnaryOperation(new EBinaryOperation(operand1, operand2, OperationType.Substraction), OperationType.LessZero), OperationType.NOT);
         }
         else if (Accept(Symbol.S_Less))
         {
             var operand2 = NumericExpression();
             result = new EUnaryOperation(new EBinaryOperation(operand1, operand2, OperationType.Substraction), OperationType.LessZero);
         }
         else if (Accept(Symbol.S_Greater))
         {
             var operand2 = NumericExpression();
             result = new EUnaryOperation(new EBinaryOperation(operand2, operand1, OperationType.Substraction), OperationType.LessZero);
         }
         else
         {
             Error("BooleanFactor: expect ==, !=, <=, >=, < or >");
         }
         return(result);
     }
 }