diff --git a/Test/TestParser.hs b/Test/TestParser.hs index 2911f3f..873f438 100644 --- a/Test/TestParser.hs +++ b/Test/TestParser.hs @@ -145,8 +145,20 @@ testExpressionPreDecrement = TestCase $ assertEqual "expect PreIncrement" (UnaryOperation PreDecrement (Reference "a")) $ parseExpression [DECREMENT,IDENTIFIER "a"] testExpressionAssign = TestCase $ - assertEqual "expect assign and addition" (StatementExpressionExpression (Assignment (Reference "a") (IntegerLiteral 5))) $ + assertEqual "expect assign 5 to a" (StatementExpressionExpression (Assignment (Reference "a") (IntegerLiteral 5))) $ parseExpression [IDENTIFIER "a",ASSIGN,INTEGERLITERAL 5] +testExpressionTimesEqual = TestCase $ + assertEqual "expect assign and multiplication" (StatementExpressionExpression (Assignment (Reference "a") (BinaryOperation Multiplication (Reference "a") (IntegerLiteral 5)))) $ + parseExpression [IDENTIFIER "a",TIMESEQUAL,INTEGERLITERAL 5] +testExpressionDivideEqual = TestCase $ + assertEqual "expect assign and division" (StatementExpressionExpression (Assignment (Reference "a") (BinaryOperation Division (Reference "a") (IntegerLiteral 5)))) $ + parseExpression [IDENTIFIER "a",DIVEQUAL,INTEGERLITERAL 5] +testExpressionPlusEqual = TestCase $ + assertEqual "expect assign and addition" (StatementExpressionExpression (Assignment (Reference "a") (BinaryOperation Addition (Reference "a") (IntegerLiteral 5)))) $ + parseExpression [IDENTIFIER "a",PLUSEQUAL,INTEGERLITERAL 5] +testExpressionMinusEqual = TestCase $ + assertEqual "expect assign and subtraction" (StatementExpressionExpression (Assignment (Reference "a") (BinaryOperation Subtraction (Reference "a") (IntegerLiteral 5)))) $ + parseExpression [IDENTIFIER "a",MINUSEQUAL,INTEGERLITERAL 5] testStatementIfThen = TestCase $ assertEqual "expect empty ifthen" [If (Reference "a") (Block [Block []]) Nothing] $ @@ -201,6 +213,11 @@ tests = TestList [ testExpressionPreIncrement, testExpressionPreDecrement, testExpressionAssign, + testExpressionTimesEqual, + testExpressionTimesEqual, + testExpressionDivideEqual, + testExpressionPlusEqual, + testExpressionMinusEqual, testStatementIfThen, testStatementIfThenElse, testStatementWhile diff --git a/src/Parser/JavaParser.y b/src/Parser/JavaParser.y index fcd3559..4e66850 100644 --- a/src/Parser/JavaParser.y +++ b/src/Parser/JavaParser.y @@ -242,7 +242,9 @@ conditionalexpression : conditionalorexpression { $1 } -- | conditionalorexpression QUESMARK expression COLON conditionalexpression { } assignment : lefthandside assignmentoperator assignmentexpression { - Assignment $1 $3 + case $2 of + Nothing -> Assignment $1 $3 + Just operator -> Assignment $1 (BinaryOperation operator $1 $3) }