Merge branch 'create-parser' of ssh://gitea.hb.dhbw-stuttgart.de:2222/MisterChaos69/MiniJavaCompiler into bytecode
This commit is contained in:
commit
393253c9bb
@ -80,6 +80,59 @@ testLocalBoolWithInitialization = TestCase $
|
|||||||
testFieldNullWithInitialization = TestCase $
|
testFieldNullWithInitialization = TestCase $
|
||||||
assertEqual "expect Class with initialized field" [Class "WithInitField" [] [VariableDeclaration "Object" "bar" $ Just NullLiteral]] $
|
assertEqual "expect Class with initialized field" [Class "WithInitField" [] [VariableDeclaration "Object" "bar" $ Just NullLiteral]] $
|
||||||
parse [CLASS,IDENTIFIER "WithInitField",LBRACKET,IDENTIFIER "Object",IDENTIFIER "bar",ASSIGN,NULLLITERAL,SEMICOLON,RBRACKET]
|
parse [CLASS,IDENTIFIER "WithInitField",LBRACKET,IDENTIFIER "Object",IDENTIFIER "bar",ASSIGN,NULLLITERAL,SEMICOLON,RBRACKET]
|
||||||
|
testReturnVoid = TestCase $
|
||||||
|
assertEqual "expect block with return nothing" (Block [Return Nothing]) $
|
||||||
|
parseBlock [LBRACKET,RETURN,SEMICOLON,RBRACKET]
|
||||||
|
|
||||||
|
testExpressionNot = TestCase $
|
||||||
|
assertEqual "expect expression not" (UnaryOperation Not (Reference "boar")) $
|
||||||
|
parseExpression [NOT,IDENTIFIER "boar"]
|
||||||
|
testExpressionMinus = TestCase $
|
||||||
|
assertEqual "expect expression minus" (UnaryOperation Minus (Reference "boo")) $
|
||||||
|
parseExpression [MINUS,IDENTIFIER "boo"]
|
||||||
|
testExpressionMultiplication = TestCase $
|
||||||
|
assertEqual "expect multiplication" (BinaryOperation Multiplication (Reference "bar") (IntegerLiteral 3)) $
|
||||||
|
parseExpression [IDENTIFIER "bar",TIMES,INTEGERLITERAL 3]
|
||||||
|
testExpressionDivision = TestCase $
|
||||||
|
assertEqual "expect division" (BinaryOperation Division (Reference "bar") (IntegerLiteral 3)) $
|
||||||
|
parseExpression [IDENTIFIER "bar",DIV,INTEGERLITERAL 3]
|
||||||
|
testExpressionModulo = TestCase $
|
||||||
|
assertEqual "expect modulo operation" (BinaryOperation Modulo (Reference "bar") (IntegerLiteral 3)) $
|
||||||
|
parseExpression [IDENTIFIER "bar",MODULO,INTEGERLITERAL 3]
|
||||||
|
testExpressionAddition = TestCase $
|
||||||
|
assertEqual "expect addition" (BinaryOperation Addition (Reference "bar") (IntegerLiteral 3)) $
|
||||||
|
parseExpression [IDENTIFIER "bar",PLUS,INTEGERLITERAL 3]
|
||||||
|
testExpressionSubtraction = TestCase $
|
||||||
|
assertEqual "expect subtraction" (BinaryOperation Subtraction (Reference "bar") (IntegerLiteral 3)) $
|
||||||
|
parseExpression [IDENTIFIER "bar",MINUS,INTEGERLITERAL 3]
|
||||||
|
testExpressionLessThan = TestCase $
|
||||||
|
assertEqual "expect comparision less than" (BinaryOperation CompareLessThan (Reference "bar") (IntegerLiteral 3)) $
|
||||||
|
parseExpression [IDENTIFIER "bar",LESS,INTEGERLITERAL 3]
|
||||||
|
testExpressionGreaterThan = TestCase $
|
||||||
|
assertEqual "expect comparision greater than" (BinaryOperation CompareGreaterThan (Reference "bar") (IntegerLiteral 3)) $
|
||||||
|
parseExpression [IDENTIFIER "bar",GREATER,INTEGERLITERAL 3]
|
||||||
|
testExpressionLessThanEqual = TestCase $
|
||||||
|
assertEqual "expect comparision less than or equal" (BinaryOperation CompareLessOrEqual (Reference "bar") (IntegerLiteral 3)) $
|
||||||
|
parseExpression [IDENTIFIER "bar",LESSEQUAL,INTEGERLITERAL 3]
|
||||||
|
testExpressionGreaterThanOrEqual = TestCase $
|
||||||
|
assertEqual "expect comparision greater than or equal" (BinaryOperation CompareGreaterOrEqual (Reference "bar") (IntegerLiteral 3)) $
|
||||||
|
parseExpression [IDENTIFIER "bar",GREATEREQUAL,INTEGERLITERAL 3]
|
||||||
|
testExpressionEqual = TestCase $
|
||||||
|
assertEqual "expect comparison equal" (BinaryOperation CompareEqual (Reference "bar") (IntegerLiteral 3)) $
|
||||||
|
parseExpression [IDENTIFIER "bar",EQUAL,INTEGERLITERAL 3]
|
||||||
|
testExpressionNotEqual = TestCase $
|
||||||
|
assertEqual "expect comparison equal" (BinaryOperation CompareNotEqual (Reference "bar") (IntegerLiteral 3)) $
|
||||||
|
parseExpression [IDENTIFIER "bar",NOTEQUAL,INTEGERLITERAL 3]
|
||||||
|
testExpressionAnd = TestCase $
|
||||||
|
assertEqual "expect and expression" (BinaryOperation And (Reference "bar") (Reference "baz")) $
|
||||||
|
parseExpression [IDENTIFIER "bar",AND,IDENTIFIER "baz"]
|
||||||
|
testExpressionXor = TestCase $
|
||||||
|
assertEqual "expect xor expression" (BinaryOperation BitwiseXor (Reference "bar") (Reference "baz")) $
|
||||||
|
parseExpression [IDENTIFIER "bar",XOR,IDENTIFIER "baz"]
|
||||||
|
testExpressionOr = TestCase $
|
||||||
|
assertEqual "expect or expression" (BinaryOperation Or (Reference "bar") (Reference "baz")) $
|
||||||
|
parseExpression [IDENTIFIER "bar",OR,IDENTIFIER "baz"]
|
||||||
|
|
||||||
|
|
||||||
tests = TestList [
|
tests = TestList [
|
||||||
testSingleEmptyClass,
|
testSingleEmptyClass,
|
||||||
@ -104,5 +157,17 @@ tests = TestList [
|
|||||||
testExpressionIntLiteral,
|
testExpressionIntLiteral,
|
||||||
testFieldWithInitialization,
|
testFieldWithInitialization,
|
||||||
testLocalBoolWithInitialization,
|
testLocalBoolWithInitialization,
|
||||||
testFieldNullWithInitialization
|
testFieldNullWithInitialization,
|
||||||
|
testReturnVoid,
|
||||||
|
testExpressionNot,
|
||||||
|
testExpressionMinus,
|
||||||
|
testExpressionLessThan,
|
||||||
|
testExpressionGreaterThan,
|
||||||
|
testExpressionLessThanEqual,
|
||||||
|
testExpressionGreaterThanOrEqual,
|
||||||
|
testExpressionEqual,
|
||||||
|
testExpressionNotEqual,
|
||||||
|
testExpressionAnd,
|
||||||
|
testExpressionXor,
|
||||||
|
testExpressionOr
|
||||||
]
|
]
|
@ -31,6 +31,7 @@ data BinaryOperator
|
|||||||
| Subtraction
|
| Subtraction
|
||||||
| Multiplication
|
| Multiplication
|
||||||
| Division
|
| Division
|
||||||
|
| Modulo
|
||||||
| BitwiseAnd
|
| BitwiseAnd
|
||||||
| BitwiseOr
|
| BitwiseOr
|
||||||
| BitwiseXor
|
| BitwiseXor
|
||||||
|
@ -44,7 +44,6 @@ import Parser.Lexer
|
|||||||
JNULL { NULLLITERAL }
|
JNULL { NULLLITERAL }
|
||||||
BOOLLITERAL { BOOLLITERAL $$ }
|
BOOLLITERAL { BOOLLITERAL $$ }
|
||||||
DIV { DIV }
|
DIV { DIV }
|
||||||
LOGICALOR { OR }
|
|
||||||
NOTEQUAL { NOTEQUAL }
|
NOTEQUAL { NOTEQUAL }
|
||||||
INSTANCEOF { INSTANCEOF }
|
INSTANCEOF { INSTANCEOF }
|
||||||
ANDEQUAL { ANDEQUAL }
|
ANDEQUAL { ANDEQUAL }
|
||||||
@ -217,7 +216,7 @@ localvariabledeclaration : type variabledeclarators { map LocalVariableDeclarati
|
|||||||
statementwithouttrailingsubstatement : block { [$1] }
|
statementwithouttrailingsubstatement : block { [$1] }
|
||||||
| emptystatement { [] }
|
| emptystatement { [] }
|
||||||
-- | expressionstatement { }
|
-- | expressionstatement { }
|
||||||
-- | returnstatement { }
|
| returnstatement { [$1] }
|
||||||
|
|
||||||
ifthenstatement : IF LBRACE expression RBRACE statement { }
|
ifthenstatement : IF LBRACE expression RBRACE statement { }
|
||||||
|
|
||||||
@ -232,8 +231,8 @@ emptystatement : SEMICOLON { Block [] }
|
|||||||
|
|
||||||
expressionstatement : statementexpression SEMICOLON { }
|
expressionstatement : statementexpression SEMICOLON { }
|
||||||
|
|
||||||
returnstatement : RETURN SEMICOLON { }
|
returnstatement : RETURN SEMICOLON { Return Nothing }
|
||||||
| RETURN expression SEMICOLON { }
|
| RETURN expression SEMICOLON { Return $ Just $2 }
|
||||||
|
|
||||||
statementnoshortif : statementwithouttrailingsubstatement { }
|
statementnoshortif : statementwithouttrailingsubstatement { }
|
||||||
| ifthenelsestatementnoshortif { }
|
| ifthenelsestatementnoshortif { }
|
||||||
@ -298,19 +297,19 @@ fieldaccess : primary DOT IDENTIFIER { }
|
|||||||
|
|
||||||
unaryexpression : unaryexpressionnotplusminus { $1 }
|
unaryexpression : unaryexpressionnotplusminus { $1 }
|
||||||
-- | predecrementexpression { }
|
-- | predecrementexpression { }
|
||||||
-- | PLUS unaryexpression { }
|
| PLUS unaryexpression { $2 }
|
||||||
-- | MINUS unaryexpression { }
|
| MINUS unaryexpression { UnaryOperation Minus $2 }
|
||||||
-- | preincrementexpression { $1 }
|
-- | preincrementexpression { $1 }
|
||||||
|
|
||||||
postfixexpression : primary { $1 }
|
postfixexpression : primary { $1 }
|
||||||
-- | name { }
|
| name { Reference $1 }
|
||||||
-- | postincrementexpression { }
|
-- | postincrementexpression { }
|
||||||
-- | postdecrementexpression{ }
|
-- | postdecrementexpression{ }
|
||||||
|
|
||||||
primary : primarynonewarray { $1 }
|
primary : primarynonewarray { $1 }
|
||||||
|
|
||||||
inclusiveorexpression : exclusiveorexpression { $1 }
|
inclusiveorexpression : exclusiveorexpression { $1 }
|
||||||
-- | inclusiveorexpression OR exclusiveorexpression { }
|
| inclusiveorexpression OR exclusiveorexpression { BinaryOperation Or $1 $3 }
|
||||||
|
|
||||||
primarynonewarray : literal { $1 }
|
primarynonewarray : literal { $1 }
|
||||||
-- | THIS { }
|
-- | THIS { }
|
||||||
@ -321,11 +320,11 @@ primarynonewarray : literal { $1 }
|
|||||||
|
|
||||||
unaryexpressionnotplusminus : postfixexpression { $1 }
|
unaryexpressionnotplusminus : postfixexpression { $1 }
|
||||||
-- | TILDE unaryexpression { }
|
-- | TILDE unaryexpression { }
|
||||||
-- | EXCLMARK unaryexpression { }
|
| EXCLMARK unaryexpression { UnaryOperation Not $2 }
|
||||||
-- | castexpression{ }
|
-- | castexpression{ }
|
||||||
|
|
||||||
exclusiveorexpression : andexpression { $1 }
|
exclusiveorexpression : andexpression { $1 }
|
||||||
-- | exclusiveorexpression XOR andexpression { }
|
| exclusiveorexpression XOR andexpression { BinaryOperation BitwiseXor $1 $3 }
|
||||||
|
|
||||||
literal : INTLITERAL { IntegerLiteral $1 }
|
literal : INTLITERAL { IntegerLiteral $1 }
|
||||||
| BOOLLITERAL { BooleanLiteral $1 }
|
| BOOLLITERAL { BooleanLiteral $1 }
|
||||||
@ -336,29 +335,29 @@ castexpression : LBRACE primitivetype RBRACE unaryexpression { }
|
|||||||
| LBRACE expression RBRACE unaryexpressionnotplusminus{ }
|
| LBRACE expression RBRACE unaryexpressionnotplusminus{ }
|
||||||
|
|
||||||
andexpression : equalityexpression { $1 }
|
andexpression : equalityexpression { $1 }
|
||||||
-- | andexpression AND equalityexpression { }
|
| andexpression AND equalityexpression { BinaryOperation And $1 $3 }
|
||||||
|
|
||||||
equalityexpression : relationalexpression { $1 }
|
equalityexpression : relationalexpression { $1 }
|
||||||
-- | equalityexpression EQUAL relationalexpression { }
|
| equalityexpression EQUAL relationalexpression { BinaryOperation CompareEqual $1 $3 }
|
||||||
-- | equalityexpression NOTEQUAL relationalexpression { }
|
| equalityexpression NOTEQUAL relationalexpression { BinaryOperation CompareNotEqual $1 $3 }
|
||||||
|
|
||||||
relationalexpression : shiftexpression { $1 }
|
relationalexpression : shiftexpression { $1 }
|
||||||
-- | relationalexpression LESS shiftexpression { }
|
| relationalexpression LESS shiftexpression { BinaryOperation CompareLessThan $1 $3 }
|
||||||
-- | relationalexpression GREATER shiftexpression { }
|
| relationalexpression GREATER shiftexpression { BinaryOperation CompareGreaterThan $1 $3 }
|
||||||
-- | relationalexpression LESSEQUAL shiftexpression { }
|
| relationalexpression LESSEQUAL shiftexpression { BinaryOperation CompareLessOrEqual $1 $3 }
|
||||||
-- | relationalexpression GREATEREQUAL shiftexpression { }
|
| relationalexpression GREATEREQUAL shiftexpression { BinaryOperation CompareGreaterOrEqual $1 $3 }
|
||||||
-- | relationalexpression INSTANCEOF referencetype { }
|
-- | relationalexpression INSTANCEOF referencetype { }
|
||||||
|
|
||||||
shiftexpression : additiveexpression { $1 }
|
shiftexpression : additiveexpression { $1 }
|
||||||
|
|
||||||
additiveexpression : multiplicativeexpression { $1 }
|
additiveexpression : multiplicativeexpression { $1 }
|
||||||
-- | additiveexpression PLUS multiplicativeexpression { }
|
| additiveexpression PLUS multiplicativeexpression { BinaryOperation Addition $1 $3 }
|
||||||
-- | additiveexpression MINUS multiplicativeexpression { }
|
| additiveexpression MINUS multiplicativeexpression { BinaryOperation Subtraction $1 $3 }
|
||||||
|
|
||||||
multiplicativeexpression : unaryexpression { $1 }
|
multiplicativeexpression : unaryexpression { $1 }
|
||||||
-- | multiplicativeexpression MUL unaryexpression { }
|
| multiplicativeexpression MUL unaryexpression { BinaryOperation Multiplication $1 $3 }
|
||||||
-- | multiplicativeexpression DIV unaryexpression { }
|
| multiplicativeexpression DIV unaryexpression { BinaryOperation Division $1 $3 }
|
||||||
-- | multiplicativeexpression MOD unaryexpression { }
|
| multiplicativeexpression MOD unaryexpression { BinaryOperation Modulo $1 $3 }
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user