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)); } }
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); } }