-- File generated by the BNF Converter. -- Parser definition for use with Happy. { {-# OPTIONS_GHC -fno-warn-incomplete-patterns -fno-warn-overlapping-patterns #-} {-# LANGUAGE PatternSynonyms #-} module ParJava ( happyError , myLexer , pProgramFile , pImport , pListImport , pTypeDeclaration , pListTypeDeclaration , pClassHeader , pFieldDeclaration , pListFieldDeclaration , pMethodBody , pLVarStatement , pListLVarStatement , pBody , pStm , pDeclaratorName , pVarDecl , pListVarDecl , pVariableInits , pArrayInits , pMethodDecl , pParameter , pListParameter , pSelectionStm , pElseIfStm , pListElseIfStm , pJumpStm , pGuardStm , pCatch , pListCatch , pIterStm , pForInit , pModifier , pListModifier , pBasicType , pTypeSpec , pTypeName , pListTypeName , pBracketsOpt , pListBracketsOpt , pListIdent , pExp , pExp2 , pExp3 , pExp4 , pExp5 , pExp6 , pExp7 , pExp8 , pExp9 , pExp10 , pExp11 , pExp12 , pExp13 , pExp14 , pExp15 , pExp16 , pExp17 , pExp18 , pSpecName , pNewAlloc , pArrAcc , pSpecExp , pSpecExpNP , pMthCall , pFieldAcc , pArgs , pDimExpr , pListDimExpr , pListExp , pExp1 , pConstant , pUnary_operator , pAssignment_op , pSemi , pListSemi ) where import Prelude import qualified AbsJava import LexJava } %name pProgramFile_internal ProgramFile %name pImport_internal Import %name pListImport_internal ListImport %name pTypeDeclaration_internal TypeDeclaration %name pListTypeDeclaration_internal ListTypeDeclaration %name pClassHeader_internal ClassHeader %name pFieldDeclaration_internal FieldDeclaration %name pListFieldDeclaration_internal ListFieldDeclaration %name pMethodBody_internal MethodBody %name pLVarStatement_internal LVarStatement %name pListLVarStatement_internal ListLVarStatement %name pBody_internal Body %name pStm_internal Stm %name pDeclaratorName_internal DeclaratorName %name pVarDecl_internal VarDecl %name pListVarDecl_internal ListVarDecl %name pVariableInits_internal VariableInits %name pArrayInits_internal ArrayInits %name pMethodDecl_internal MethodDecl %name pParameter_internal Parameter %name pListParameter_internal ListParameter %name pSelectionStm_internal SelectionStm %name pElseIfStm_internal ElseIfStm %name pListElseIfStm_internal ListElseIfStm %name pJumpStm_internal JumpStm %name pGuardStm_internal GuardStm %name pCatch_internal Catch %name pListCatch_internal ListCatch %name pIterStm_internal IterStm %name pForInit_internal ForInit %name pModifier_internal Modifier %name pListModifier_internal ListModifier %name pBasicType_internal BasicType %name pTypeSpec_internal TypeSpec %name pTypeName_internal TypeName %name pListTypeName_internal ListTypeName %name pBracketsOpt_internal BracketsOpt %name pListBracketsOpt_internal ListBracketsOpt %name pListIdent_internal ListIdent %name pExp_internal Exp %name pExp2_internal Exp2 %name pExp3_internal Exp3 %name pExp4_internal Exp4 %name pExp5_internal Exp5 %name pExp6_internal Exp6 %name pExp7_internal Exp7 %name pExp8_internal Exp8 %name pExp9_internal Exp9 %name pExp10_internal Exp10 %name pExp11_internal Exp11 %name pExp12_internal Exp12 %name pExp13_internal Exp13 %name pExp14_internal Exp14 %name pExp15_internal Exp15 %name pExp16_internal Exp16 %name pExp17_internal Exp17 %name pExp18_internal Exp18 %name pSpecName_internal SpecName %name pNewAlloc_internal NewAlloc %name pArrAcc_internal ArrAcc %name pSpecExp_internal SpecExp %name pSpecExpNP_internal SpecExpNP %name pMthCall_internal MthCall %name pFieldAcc_internal FieldAcc %name pArgs_internal Args %name pDimExpr_internal DimExpr %name pListDimExpr_internal ListDimExpr %name pListExp_internal ListExp %name pExp1_internal Exp1 %name pConstant_internal Constant %name pUnary_operator_internal Unary_operator %name pAssignment_op_internal Assignment_op %name pSemi_internal Semi %name pListSemi_internal ListSemi %monad { Err } { (>>=) } { return } %tokentype {Token} %token '!' { PT _ (TS _ 1) } '!=' { PT _ (TS _ 2) } '%' { PT _ (TS _ 3) } '%=' { PT _ (TS _ 4) } '&' { PT _ (TS _ 5) } '&&' { PT _ (TS _ 6) } '&=' { PT _ (TS _ 7) } '(' { PT _ (TS _ 8) } ')' { PT _ (TS _ 9) } '*' { PT _ (TS _ 10) } '*=' { PT _ (TS _ 11) } '+' { PT _ (TS _ 12) } '++' { PT _ (TS _ 13) } '+=' { PT _ (TS _ 14) } ',' { PT _ (TS _ 15) } '-' { PT _ (TS _ 16) } '--' { PT _ (TS _ 17) } '-=' { PT _ (TS _ 18) } '.' { PT _ (TS _ 19) } '.*' { PT _ (TS _ 20) } '.class' { PT _ (TS _ 21) } '.this' { PT _ (TS _ 22) } '/' { PT _ (TS _ 23) } '/=' { PT _ (TS _ 24) } ':' { PT _ (TS _ 25) } ';' { PT _ (TS _ 26) } '<' { PT _ (TS _ 27) } '<<' { PT _ (TS _ 28) } '<<=' { PT _ (TS _ 29) } '<=' { PT _ (TS _ 30) } '=' { PT _ (TS _ 31) } '==' { PT _ (TS _ 32) } '>' { PT _ (TS _ 33) } '>=' { PT _ (TS _ 34) } '>>' { PT _ (TS _ 35) } '>>=' { PT _ (TS _ 36) } '>>>' { PT _ (TS _ 37) } '>>>=' { PT _ (TS _ 38) } '?' { PT _ (TS _ 39) } '[' { PT _ (TS _ 40) } '[]' { PT _ (TS _ 41) } ']' { PT _ (TS _ 42) } '^' { PT _ (TS _ 43) } '^=' { PT _ (TS _ 44) } 'abstract' { PT _ (TS _ 45) } 'boolean' { PT _ (TS _ 46) } 'break' { PT _ (TS _ 47) } 'byte' { PT _ (TS _ 48) } 'case' { PT _ (TS _ 49) } 'catch' { PT _ (TS _ 50) } 'char' { PT _ (TS _ 51) } 'class' { PT _ (TS _ 52) } 'continue' { PT _ (TS _ 53) } 'default' { PT _ (TS _ 54) } 'do' { PT _ (TS _ 55) } 'double' { PT _ (TS _ 56) } 'else' { PT _ (TS _ 57) } 'else if' { PT _ (TS _ 58) } 'extends' { PT _ (TS _ 59) } 'false' { PT _ (TS _ 60) } 'final' { PT _ (TS _ 61) } 'finally' { PT _ (TS _ 62) } 'float' { PT _ (TS _ 63) } 'for' { PT _ (TS _ 64) } 'if' { PT _ (TS _ 65) } 'implements' { PT _ (TS _ 66) } 'import' { PT _ (TS _ 67) } 'instanceof' { PT _ (TS _ 68) } 'int' { PT _ (TS _ 69) } 'interface' { PT _ (TS _ 70) } 'long' { PT _ (TS _ 71) } 'native' { PT _ (TS _ 72) } 'new' { PT _ (TS _ 73) } 'null' { PT _ (TS _ 74) } 'package' { PT _ (TS _ 75) } 'private' { PT _ (TS _ 76) } 'protected' { PT _ (TS _ 77) } 'public' { PT _ (TS _ 78) } 'return' { PT _ (TS _ 79) } 'short' { PT _ (TS _ 80) } 'static' { PT _ (TS _ 81) } 'super' { PT _ (TS _ 82) } 'switch' { PT _ (TS _ 83) } 'synchronized' { PT _ (TS _ 84) } 'this' { PT _ (TS _ 85) } 'throw' { PT _ (TS _ 86) } 'throws' { PT _ (TS _ 87) } 'transient' { PT _ (TS _ 88) } 'true' { PT _ (TS _ 89) } 'try' { PT _ (TS _ 90) } 'volatile' { PT _ (TS _ 91) } 'while' { PT _ (TS _ 92) } '{' { PT _ (TS _ 93) } '|' { PT _ (TS _ 94) } '|=' { PT _ (TS _ 95) } '||' { PT _ (TS _ 96) } '}' { PT _ (TS _ 97) } '~' { PT _ (TS _ 98) } L_Ident { PT _ (TV _)} L_doubl { PT _ (TD _)} L_integ { PT _ (TI _)} L_quoted { PT _ (TL _)} L_Unsigned { PT _ (T_Unsigned _) } L_Long { PT _ (T_Long _) } L_UnsignedLong { PT _ (T_UnsignedLong _) } L_Hexadecimal { PT _ (T_Hexadecimal _) } L_HexUnsigned { PT _ (T_HexUnsigned _) } L_HexLong { PT _ (T_HexLong _) } L_HexUnsLong { PT _ (T_HexUnsLong _) } L_Octal { PT _ (T_Octal _) } L_OctalUnsigned { PT _ (T_OctalUnsigned _) } L_OctalLong { PT _ (T_OctalLong _) } L_OctalUnsLong { PT _ (T_OctalUnsLong _) } L_JDouble { PT _ (T_JDouble _) } L_JFloat { PT _ (T_JFloat _) } L_JLongDouble { PT _ (T_JLongDouble _) } L_UnicodeChar { PT _ (T_UnicodeChar _) } L_JChar { PT _ (T_JChar _) } %% Ident :: { (AbsJava.BNFC'Position, AbsJava.Ident) } Ident : L_Ident { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Ident (tokenText $1)) } Double :: { (AbsJava.BNFC'Position, Double) } Double : L_doubl { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), (read (tokenText $1) ) :: Double) } Integer :: { (AbsJava.BNFC'Position, Integer) } Integer : L_integ { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), (read (tokenText $1) ) :: Integer) } String :: { (AbsJava.BNFC'Position, String) } String : L_quoted { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), ((\(PT _ (TL s)) -> s) $1)) } Unsigned :: { (AbsJava.BNFC'Position, AbsJava.Unsigned) } Unsigned : L_Unsigned { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Unsigned (tokenText $1)) } Long :: { (AbsJava.BNFC'Position, AbsJava.Long) } Long : L_Long { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Long (tokenText $1)) } UnsignedLong :: { (AbsJava.BNFC'Position, AbsJava.UnsignedLong) } UnsignedLong : L_UnsignedLong { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.UnsignedLong (tokenText $1)) } Hexadecimal :: { (AbsJava.BNFC'Position, AbsJava.Hexadecimal) } Hexadecimal : L_Hexadecimal { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Hexadecimal (tokenText $1)) } HexUnsigned :: { (AbsJava.BNFC'Position, AbsJava.HexUnsigned) } HexUnsigned : L_HexUnsigned { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.HexUnsigned (tokenText $1)) } HexLong :: { (AbsJava.BNFC'Position, AbsJava.HexLong) } HexLong : L_HexLong { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.HexLong (tokenText $1)) } HexUnsLong :: { (AbsJava.BNFC'Position, AbsJava.HexUnsLong) } HexUnsLong : L_HexUnsLong { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.HexUnsLong (tokenText $1)) } Octal :: { (AbsJava.BNFC'Position, AbsJava.Octal) } Octal : L_Octal { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Octal (tokenText $1)) } OctalUnsigned :: { (AbsJava.BNFC'Position, AbsJava.OctalUnsigned) } OctalUnsigned : L_OctalUnsigned { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.OctalUnsigned (tokenText $1)) } OctalLong :: { (AbsJava.BNFC'Position, AbsJava.OctalLong) } OctalLong : L_OctalLong { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.OctalLong (tokenText $1)) } OctalUnsLong :: { (AbsJava.BNFC'Position, AbsJava.OctalUnsLong) } OctalUnsLong : L_OctalUnsLong { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.OctalUnsLong (tokenText $1)) } JDouble :: { (AbsJava.BNFC'Position, AbsJava.JDouble) } JDouble : L_JDouble { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.JDouble (tokenText $1)) } JFloat :: { (AbsJava.BNFC'Position, AbsJava.JFloat) } JFloat : L_JFloat { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.JFloat (tokenText $1)) } JLongDouble :: { (AbsJava.BNFC'Position, AbsJava.JLongDouble) } JLongDouble : L_JLongDouble { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.JLongDouble (tokenText $1)) } UnicodeChar :: { (AbsJava.BNFC'Position, AbsJava.UnicodeChar) } UnicodeChar : L_UnicodeChar { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.UnicodeChar (tokenText $1)) } JChar :: { (AbsJava.BNFC'Position, AbsJava.JChar) } JChar : L_JChar { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.JChar (tokenText $1)) } ProgramFile :: { (AbsJava.BNFC'Position, AbsJava.ProgramFile) } ProgramFile : 'package' ListIdent ListSemi ListImport ListTypeDeclaration { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Prpkg (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3) (snd $4) (snd $5)) } | ListImport ListTypeDeclaration { (fst $1, AbsJava.ProgF (fst $1) (snd $1) (snd $2)) } Import :: { (AbsJava.BNFC'Position, AbsJava.Import) } Import : 'import' ListIdent '.*' ListSemi { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.ImportA (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) } | 'import' ListIdent ListSemi { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.ImportN (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3)) } ListImport :: { (AbsJava.BNFC'Position, [AbsJava.Import]) } ListImport : {- empty -} { (AbsJava.BNFC'NoPosition, []) } | Import ListImport { (fst $1, (:) (snd $1) (snd $2)) } TypeDeclaration :: { (AbsJava.BNFC'Position, AbsJava.TypeDeclaration) } TypeDeclaration : ClassHeader '{' ListFieldDeclaration '}' { (fst $1, AbsJava.TypeDecl (fst $1) (snd $1) (snd $3)) } ListTypeDeclaration :: { (AbsJava.BNFC'Position, [AbsJava.TypeDeclaration]) } ListTypeDeclaration : {- empty -} { (AbsJava.BNFC'NoPosition, []) } | TypeDeclaration ListTypeDeclaration { (fst $1, (:) (snd $1) (snd $2)) } ClassHeader :: { (AbsJava.BNFC'Position, AbsJava.ClassHeader) } ClassHeader : ListModifier 'class' Ident { (fst $1, AbsJava.ClassDec (fst $1) (snd $1) (snd $3)) } | ListModifier 'class' Ident 'extends' ListTypeName { (fst $1, AbsJava.ClassDecE (fst $1) (snd $1) (snd $3) (snd $5)) } | ListModifier 'class' Ident 'extends' ListTypeName 'implements' ListTypeName { (fst $1, AbsJava.ClassDecEI (fst $1) (snd $1) (snd $3) (snd $5) (snd $7)) } | ListModifier 'class' Ident 'implements' ListTypeName { (fst $1, AbsJava.ClassDecI (fst $1) (snd $1) (snd $3) (snd $5)) } | ListModifier 'interface' Ident { (fst $1, AbsJava.InterDec (fst $1) (snd $1) (snd $3)) } | ListModifier 'interface' Ident 'extends' ListTypeName { (fst $1, AbsJava.InterDecE (fst $1) (snd $1) (snd $3) (snd $5)) } | ListModifier 'interface' Ident 'extends' ListTypeName 'implements' ListTypeName { (fst $1, AbsJava.InterDecEI (fst $1) (snd $1) (snd $3) (snd $5) (snd $7)) } | ListModifier 'interface' Ident 'implements' ListTypeName { (fst $1, AbsJava.InterDecI (fst $1) (snd $1) (snd $3) (snd $5)) } FieldDeclaration :: { (AbsJava.BNFC'Position, AbsJava.FieldDeclaration) } FieldDeclaration : Body { (fst $1, AbsJava.Dblk (fst $1) (snd $1)) } | TypeDeclaration { (fst $1, AbsJava.Dinnerclass (fst $1) (snd $1)) } | ListModifier Ident '(' ListParameter ')' 'throws' ListTypeName Body { (fst $1, AbsJava.Dconstt (fst $1) (snd $1) (snd $2) (snd $4) (snd $7) (snd $8)) } | ListModifier Ident '(' ListParameter ')' Body { (fst $1, AbsJava.Dconst (fst $1) (snd $1) (snd $2) (snd $4) (snd $6)) } | ListModifier TypeSpec MethodDecl 'throws' ListTypeName MethodBody { (fst $1, AbsJava.Dmthth (fst $1) (snd $1) (snd $2) (snd $3) (snd $5) (snd $6)) } | ListModifier TypeSpec MethodDecl MethodBody { (fst $1, AbsJava.Dmth (fst $1) (snd $1) (snd $2) (snd $3) (snd $4)) } | ListModifier TypeSpec ListVarDecl ';' { (fst $1, AbsJava.Dvar (fst $1) (snd $1) (snd $2) (snd $3)) } ListFieldDeclaration :: { (AbsJava.BNFC'Position, [AbsJava.FieldDeclaration]) } ListFieldDeclaration : {- empty -} { (AbsJava.BNFC'NoPosition, []) } | FieldDeclaration ListFieldDeclaration { (fst $1, (:) (snd $1) (snd $2)) } MethodBody :: { (AbsJava.BNFC'Position, AbsJava.MethodBody) } MethodBody : ';' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.IBody (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | Body { (fst $1, AbsJava.MBody (fst $1) (snd $1)) } LVarStatement :: { (AbsJava.BNFC'Position, AbsJava.LVarStatement) } LVarStatement : 'final' TypeSpec ListVarDecl ';' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.LVarf (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3)) } | Stm { (fst $1, AbsJava.Statem (fst $1) (snd $1)) } | TypeSpec ListVarDecl ';' { (fst $1, AbsJava.LVar (fst $1) (snd $1) (snd $2)) } ListLVarStatement :: { (AbsJava.BNFC'Position, [AbsJava.LVarStatement]) } ListLVarStatement : {- empty -} { (AbsJava.BNFC'NoPosition, []) } | LVarStatement ListLVarStatement { (fst $1, (:) (snd $1) (snd $2)) } Body :: { (AbsJava.BNFC'Position, AbsJava.Body) } Body : '{' ListLVarStatement '}' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.BodyImpl (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2)) } Stm :: { (AbsJava.BNFC'Position, AbsJava.Stm) } Stm : ';' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Sem (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'case' Exp ':' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Case (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2)) } | 'default' ':' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Dflt (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | '{' ListLVarStatement '}' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.LV (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2)) } | Ident ':' { (fst $1, AbsJava.Lbl (fst $1) (snd $1)) } | Exp ';' { (fst $1, AbsJava.Exps (fst $1) (snd $1)) } | GuardStm { (fst $1, AbsJava.Grd (fst $1) (snd $1)) } | IterStm { (fst $1, AbsJava.Iter (fst $1) (snd $1)) } | JumpStm { (fst $1, AbsJava.Jmp (fst $1) (snd $1)) } | SelectionStm { (fst $1, AbsJava.Sel (fst $1) (snd $1)) } DeclaratorName :: { (AbsJava.BNFC'Position, AbsJava.DeclaratorName) } DeclaratorName : Ident { (fst $1, AbsJava.DeclName (fst $1) (snd $1)) } | Ident ListBracketsOpt { (fst $1, AbsJava.DeclArray (fst $1) (snd $1) (snd $2)) } VarDecl :: { (AbsJava.BNFC'Position, AbsJava.VarDecl) } VarDecl : Ident { (fst $1, AbsJava.VDecl (fst $1) (snd $1)) } | DeclaratorName '=' VariableInits { (fst $1, AbsJava.VDeclAssign (fst $1) (snd $1) (snd $3)) } ListVarDecl :: { (AbsJava.BNFC'Position, [AbsJava.VarDecl]) } ListVarDecl : VarDecl { (fst $1, (:[]) (snd $1)) } | VarDecl ',' ListVarDecl { (fst $1, (:) (snd $1) (snd $3)) } VariableInits :: { (AbsJava.BNFC'Position, AbsJava.VariableInits) } VariableInits : '{' '}' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.IEmpt (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | '{' ArrayInits '}' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.IArri (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2)) } | Exp { (fst $1, AbsJava.IExp (fst $1) (snd $1)) } ArrayInits :: { (AbsJava.BNFC'Position, AbsJava.ArrayInits) } ArrayInits : ArrayInits ',' { (fst $1, AbsJava.Vais (fst $1) (snd $1)) } | ArrayInits ',' VariableInits { (fst $1, AbsJava.Vai (fst $1) (snd $1) (snd $3)) } | VariableInits { (fst $1, AbsJava.Vainit (fst $1) (snd $1)) } MethodDecl :: { (AbsJava.BNFC'Position, AbsJava.MethodDecl) } MethodDecl : DeclaratorName '(' ListParameter ')' { (fst $1, AbsJava.Mth (fst $1) (snd $1) (snd $3)) } | MethodDecl BracketsOpt { (fst $1, AbsJava.MthdArr (fst $1) (snd $1) (snd $2)) } Parameter :: { (AbsJava.BNFC'Position, AbsJava.Parameter) } Parameter : 'final' TypeSpec DeclaratorName { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Pfinal (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3)) } | TypeSpec DeclaratorName { (fst $1, AbsJava.Param (fst $1) (snd $1) (snd $2)) } ListParameter :: { (AbsJava.BNFC'Position, [AbsJava.Parameter]) } ListParameter : {- empty -} { (AbsJava.BNFC'NoPosition, []) } | Parameter { (fst $1, (:[]) (snd $1)) } | Parameter ',' ListParameter { (fst $1, (:) (snd $1) (snd $3)) } SelectionStm :: { (AbsJava.BNFC'Position, AbsJava.SelectionStm) } SelectionStm : 'if' '(' Exp ')' Stm ListElseIfStm { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Ifone (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $6)) } | 'if' '(' Exp ')' Stm ListElseIfStm 'else' Stm { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.If (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5) (snd $6) (snd $8)) } | 'switch' '(' Exp ')' Body { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Switch (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5)) } ElseIfStm :: { (AbsJava.BNFC'Position, AbsJava.ElseIfStm) } ElseIfStm : 'else if' '(' Exp ')' Stm { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Elseif (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5)) } ListElseIfStm :: { (AbsJava.BNFC'Position, [AbsJava.ElseIfStm]) } ListElseIfStm : {- empty -} { (AbsJava.BNFC'NoPosition, []) } | ElseIfStm ListElseIfStm { (fst $1, (:) (snd $1) (snd $2)) } JumpStm :: { (AbsJava.BNFC'Position, AbsJava.JumpStm) } JumpStm : 'break' ';' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Break (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'break' Ident ';' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Brlabel (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2)) } | 'continue' ';' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Continue (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'continue' Ident ';' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Continuelabel (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2)) } | 'return' ';' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Return (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'return' Exp ';' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.ReturnExp (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2)) } | 'throw' Exp ';' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Throw (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2)) } GuardStm :: { (AbsJava.BNFC'Position, AbsJava.GuardStm) } GuardStm : 'synchronized' '(' Exp ')' Body { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Synchronized (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5)) } | 'try' Body ListCatch { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Try (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3)) } | 'try' Body ListCatch 'finally' Body { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Tryfinally (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3) (snd $5)) } Catch :: { (AbsJava.BNFC'Position, AbsJava.Catch) } Catch : 'catch' '(' TypeSpec ')' Body { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Catch2 (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5)) } | 'catch' '(' TypeSpec Ident ')' Body { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Catch1 (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $4) (snd $6)) } ListCatch :: { (AbsJava.BNFC'Position, [AbsJava.Catch]) } ListCatch : {- empty -} { (AbsJava.BNFC'NoPosition, []) } | Catch ListCatch { (fst $1, (:) (snd $1) (snd $2)) } IterStm :: { (AbsJava.BNFC'Position, AbsJava.IterStm) } IterStm : 'do' Stm 'while' '(' Exp ')' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Do (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $5)) } | 'for' '(' ForInit ListExp ';' ListExp ')' Stm { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.For (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $4) (snd $6) (snd $8)) } | 'while' '(' Exp ')' Stm { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.While (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $3) (snd $5)) } ForInit :: { (AbsJava.BNFC'Position, AbsJava.ForInit) } ForInit : 'final' TypeSpec ListVarDecl ';' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.DeclVarFinal (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3)) } | TypeSpec ListVarDecl ';' { (fst $1, AbsJava.DeclVar (fst $1) (snd $1) (snd $2)) } | ListExp ';' { (fst $1, AbsJava.Exprs1 (fst $1) (snd $1)) } Modifier :: { (AbsJava.BNFC'Position, AbsJava.Modifier) } Modifier : 'abstract' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Mabstract (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'final' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Mfinal (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'native' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Mnative (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'private' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Mprivate (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'protected' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Mprotected (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'public' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Mpublic (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'static' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Mstatic (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'synchronized' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Msync (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'transient' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Mtransient (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'volatile' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Mvolatile (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } ListModifier :: { (AbsJava.BNFC'Position, [AbsJava.Modifier]) } ListModifier : {- empty -} { (AbsJava.BNFC'NoPosition, []) } | Modifier ListModifier { (fst $1, (:) (snd $1) (snd $2)) } BasicType :: { (AbsJava.BNFC'Position, AbsJava.BasicType) } BasicType : 'boolean' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Tboolean (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'byte' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Tbyte (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'char' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Tchar (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'double' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Tdouble (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'float' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Tfloat (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'int' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Tint (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'long' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Tlong (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'short' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Tshort (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } TypeSpec :: { (AbsJava.BNFC'Position, AbsJava.TypeSpec) } TypeSpec : TypeName { (fst $1, AbsJava.NamedType (fst $1) (snd $1)) } | TypeName ListBracketsOpt { (fst $1, AbsJava.ArrayType (fst $1) (snd $1) (snd $2)) } TypeName :: { (AbsJava.BNFC'Position, AbsJava.TypeName) } TypeName : BasicType { (fst $1, AbsJava.BuiltIn (fst $1) (snd $1)) } | ListIdent { (fst $1, AbsJava.ClassType (fst $1) (snd $1)) } ListTypeName :: { (AbsJava.BNFC'Position, [AbsJava.TypeName]) } ListTypeName : TypeName { (fst $1, (:[]) (snd $1)) } | TypeName ',' ListTypeName { (fst $1, (:) (snd $1) (snd $3)) } BracketsOpt :: { (AbsJava.BNFC'Position, AbsJava.BracketsOpt) } BracketsOpt : '[]' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.BracketsEmpty (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } ListBracketsOpt :: { (AbsJava.BNFC'Position, [AbsJava.BracketsOpt]) } ListBracketsOpt : BracketsOpt { (fst $1, (:[]) (snd $1)) } | BracketsOpt ListBracketsOpt { (fst $1, (:) (snd $1) (snd $2)) } ListIdent :: { (AbsJava.BNFC'Position, [AbsJava.Ident]) } ListIdent : Ident { (fst $1, (:[]) (snd $1)) } | Ident '.' ListIdent { (fst $1, (:) (snd $1) (snd $3)) } Exp :: { (AbsJava.BNFC'Position, AbsJava.Exp) } Exp : Exp1 { (fst $1, (snd $1)) } | Exp14 'instanceof' TypeName { (fst $1, AbsJava.Etype (fst $1) (snd $1) (snd $3)) } | Exp14 Assignment_op Exp { (fst $1, AbsJava.Eassign (fst $1) (snd $1) (snd $2) (snd $3)) } Exp2 :: { (AbsJava.BNFC'Position, AbsJava.Exp) } Exp2 : Exp3 { (fst $1, (snd $1)) } | Exp3 '?' Exp ':' Exp2 { (fst $1, AbsJava.Econdition (fst $1) (snd $1) (snd $3) (snd $5)) } Exp3 :: { (AbsJava.BNFC'Position, AbsJava.Exp) } Exp3 : Exp3 '||' Exp4 { (fst $1, AbsJava.Elor (fst $1) (snd $1) (snd $3)) } | Exp4 { (fst $1, (snd $1)) } Exp4 :: { (AbsJava.BNFC'Position, AbsJava.Exp) } Exp4 : Exp4 '&&' Exp5 { (fst $1, AbsJava.Eland (fst $1) (snd $1) (snd $3)) } | Exp5 { (fst $1, (snd $1)) } Exp5 :: { (AbsJava.BNFC'Position, AbsJava.Exp) } Exp5 : Exp5 '|' Exp6 { (fst $1, AbsJava.Ebitor (fst $1) (snd $1) (snd $3)) } | Exp6 { (fst $1, (snd $1)) } Exp6 :: { (AbsJava.BNFC'Position, AbsJava.Exp) } Exp6 : Exp6 '^' Exp7 { (fst $1, AbsJava.Ebitexor (fst $1) (snd $1) (snd $3)) } | Exp7 { (fst $1, (snd $1)) } Exp7 :: { (AbsJava.BNFC'Position, AbsJava.Exp) } Exp7 : Exp7 '&' Exp8 { (fst $1, AbsJava.Ebitand (fst $1) (snd $1) (snd $3)) } | Exp8 { (fst $1, (snd $1)) } Exp8 :: { (AbsJava.BNFC'Position, AbsJava.Exp) } Exp8 : Exp8 '!=' Exp9 { (fst $1, AbsJava.Eneq (fst $1) (snd $1) (snd $3)) } | Exp8 '==' Exp9 { (fst $1, AbsJava.Eeq (fst $1) (snd $1) (snd $3)) } | Exp9 { (fst $1, (snd $1)) } Exp9 :: { (AbsJava.BNFC'Position, AbsJava.Exp) } Exp9 : Exp9 '<' Exp10 { (fst $1, AbsJava.Elthen (fst $1) (snd $1) (snd $3)) } | Exp9 '<=' Exp10 { (fst $1, AbsJava.Ele (fst $1) (snd $1) (snd $3)) } | Exp9 '>' Exp10 { (fst $1, AbsJava.Egrthen (fst $1) (snd $1) (snd $3)) } | Exp9 '>=' Exp10 { (fst $1, AbsJava.Ege (fst $1) (snd $1) (snd $3)) } | Exp10 { (fst $1, (snd $1)) } Exp10 :: { (AbsJava.BNFC'Position, AbsJava.Exp) } Exp10 : Exp10 '<<' Exp11 { (fst $1, AbsJava.Eleft (fst $1) (snd $1) (snd $3)) } | Exp10 '>>' Exp11 { (fst $1, AbsJava.Eright (fst $1) (snd $1) (snd $3)) } | Exp10 '>>>' Exp11 { (fst $1, AbsJava.Etrip (fst $1) (snd $1) (snd $3)) } | Exp11 { (fst $1, (snd $1)) } Exp11 :: { (AbsJava.BNFC'Position, AbsJava.Exp) } Exp11 : Exp11 '+' Exp12 { (fst $1, AbsJava.Eplus (fst $1) (snd $1) (snd $3)) } | Exp11 '-' Exp12 { (fst $1, AbsJava.Eminus (fst $1) (snd $1) (snd $3)) } | Exp12 { (fst $1, (snd $1)) } Exp12 :: { (AbsJava.BNFC'Position, AbsJava.Exp) } Exp12 : Exp12 '%' Exp13 { (fst $1, AbsJava.Emod (fst $1) (snd $1) (snd $3)) } | Exp12 '*' Exp13 { (fst $1, AbsJava.Etimes (fst $1) (snd $1) (snd $3)) } | Exp12 '/' Exp13 { (fst $1, AbsJava.Ediv (fst $1) (snd $1) (snd $3)) } | Exp13 { (fst $1, (snd $1)) } Exp13 :: { (AbsJava.BNFC'Position, AbsJava.Exp) } Exp13 : '(' BasicType ')' Exp13 { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Ebcoercion (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) } | '(' Exp ')' Exp15 { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Eexpcoercion (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $4)) } | '(' ListIdent ListBracketsOpt ')' Exp13 { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Earrcoercion (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3) (snd $5)) } | Exp14 { (fst $1, (snd $1)) } Exp14 :: { (AbsJava.BNFC'Position, AbsJava.Exp) } Exp14 : '++' Exp14 { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Epreinc (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2)) } | '--' Exp14 { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Epredec (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2)) } | Unary_operator Exp13 { (fst $1, AbsJava.Epreop (fst $1) (snd $1) (snd $2)) } | Exp15 { (fst $1, (snd $1)) } Exp15 :: { (AbsJava.BNFC'Position, AbsJava.Exp) } Exp15 : Exp15 '++' { (fst $1, AbsJava.Epostinc (fst $1) (snd $1)) } | Exp15 '--' { (fst $1, AbsJava.Epostdec (fst $1) (snd $1)) } | Exp16 { (fst $1, (snd $1)) } Exp16 :: { (AbsJava.BNFC'Position, AbsJava.Exp) } Exp16 : String { (fst $1, AbsJava.Estring (fst $1) (snd $1)) } | ArrAcc { (fst $1, AbsJava.Earr (fst $1) (snd $1)) } | Constant { (fst $1, AbsJava.Econst (fst $1) (snd $1)) } | FieldAcc { (fst $1, AbsJava.Efld (fst $1) (snd $1)) } | MthCall { (fst $1, AbsJava.Emth (fst $1) (snd $1)) } | SpecName { (fst $1, AbsJava.Especname (fst $1) (snd $1)) } | Exp17 { (fst $1, (snd $1)) } Exp17 :: { (AbsJava.BNFC'Position, AbsJava.Exp) } Exp17 : NewAlloc { (fst $1, AbsJava.Enewalloc (fst $1) (snd $1)) } | Exp18 { (fst $1, (snd $1)) } Exp18 :: { (AbsJava.BNFC'Position, AbsJava.Exp) } Exp18 : '(' Exp ')' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), (snd $2)) } | ListIdent { (fst $1, AbsJava.Evar (fst $1) (snd $1)) } SpecName :: { (AbsJava.BNFC'Position, AbsJava.SpecName) } SpecName : 'null' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.SSnull (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'super' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.SSsuper (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'this' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.SSthis (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } NewAlloc :: { (AbsJava.BNFC'Position, AbsJava.NewAlloc) } NewAlloc : 'new' TypeName Args { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Anewclass (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3)) } | 'new' TypeName Args '{' ListFieldDeclaration '}' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Anewinnerclass (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3) (snd $5)) } | 'new' TypeName ListDimExpr { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Anewarray (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3)) } | 'new' TypeName ListDimExpr '{' '}' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Anewarriempty (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3)) } | 'new' TypeName ListDimExpr '{' ArrayInits '}' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Anewarrinits (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2) (snd $3) (snd $5)) } ArrAcc :: { (AbsJava.BNFC'Position, AbsJava.ArrAcc) } ArrAcc : SpecExp '[' Exp ']' { (fst $1, AbsJava.Aarr1 (fst $1) (snd $1) (snd $3)) } | ListIdent '[' Exp ']' { (fst $1, AbsJava.Aarr (fst $1) (snd $1) (snd $3)) } SpecExp :: { (AbsJava.BNFC'Position, AbsJava.SpecExp) } SpecExp : '(' Exp ')' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Cep (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2)) } | SpecExpNP { (fst $1, AbsJava.Cnp (fst $1) (snd $1)) } | SpecName { (fst $1, AbsJava.Cthis (fst $1) (snd $1)) } SpecExpNP :: { (AbsJava.BNFC'Position, AbsJava.SpecExpNP) } SpecExpNP : ArrAcc { (fst $1, AbsJava.CNParr (fst $1) (snd $1)) } | Constant { (fst $1, AbsJava.CNLit (fst $1) (snd $1)) } | FieldAcc { (fst $1, AbsJava.CNPfld (fst $1) (snd $1)) } | MthCall { (fst $1, AbsJava.CNPmth (fst $1) (snd $1)) } MthCall :: { (AbsJava.BNFC'Position, AbsJava.MthCall) } MthCall : SpecExpNP Args { (fst $1, AbsJava.Mmth1 (fst $1) (snd $1) (snd $2)) } | SpecName Args { (fst $1, AbsJava.Mmthspec (fst $1) (snd $1) (snd $2)) } | ListIdent Args { (fst $1, AbsJava.Mmth (fst $1) (snd $1) (snd $2)) } FieldAcc :: { (AbsJava.BNFC'Position, AbsJava.FieldAcc) } FieldAcc : BasicType '.class' { (fst $1, AbsJava.Ffclass2 (fst $1) (snd $1)) } | NewAlloc '.' Ident { (fst $1, AbsJava.Ffvar1 (fst $1) (snd $1) (snd $3)) } | SpecExp '.' Ident { (fst $1, AbsJava.Ffvar (fst $1) (snd $1) (snd $3)) } | ListIdent '.class' { (fst $1, AbsJava.Fclass (fst $1) (snd $1)) } | ListIdent '.this' { (fst $1, AbsJava.Ffthis (fst $1) (snd $1)) } Args :: { (AbsJava.BNFC'Position, AbsJava.Args) } Args : '(' ListExp ')' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.ArgList (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2)) } DimExpr :: { (AbsJava.BNFC'Position, AbsJava.DimExpr) } DimExpr : '[' Exp ']' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Dim (uncurry AbsJava.BNFC'Position (tokenLineCol $1)) (snd $2)) } ListDimExpr :: { (AbsJava.BNFC'Position, [AbsJava.DimExpr]) } ListDimExpr : DimExpr { (fst $1, (:[]) (snd $1)) } | DimExpr ListDimExpr { (fst $1, (:) (snd $1) (snd $2)) } ListExp :: { (AbsJava.BNFC'Position, [AbsJava.Exp]) } ListExp : {- empty -} { (AbsJava.BNFC'NoPosition, []) } | Exp { (fst $1, (:[]) (snd $1)) } | Exp ',' ListExp { (fst $1, (:) (snd $1) (snd $3)) } Exp1 :: { (AbsJava.BNFC'Position, AbsJava.Exp) } Exp1 : Exp2 { (fst $1, (snd $1)) } Constant :: { (AbsJava.BNFC'Position, AbsJava.Constant) } Constant : 'false' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Efalse (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | 'true' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Etrue (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | Double { (fst $1, AbsJava.Efloat (fst $1) (snd $1)) } | Integer { (fst $1, AbsJava.Eint (fst $1) (snd $1)) } | HexLong { (fst $1, AbsJava.Ehexalong (fst $1) (snd $1)) } | HexUnsLong { (fst $1, AbsJava.Ehexaunslong (fst $1) (snd $1)) } | HexUnsigned { (fst $1, AbsJava.Ehexaunsign (fst $1) (snd $1)) } | Hexadecimal { (fst $1, AbsJava.Ehexadec (fst $1) (snd $1)) } | JChar { (fst $1, AbsJava.Echar (fst $1) (snd $1)) } | JDouble { (fst $1, AbsJava.Ecdouble (fst $1) (snd $1)) } | JFloat { (fst $1, AbsJava.Ecfloat (fst $1) (snd $1)) } | JLongDouble { (fst $1, AbsJava.Eclongdouble (fst $1) (snd $1)) } | Long { (fst $1, AbsJava.Elong (fst $1) (snd $1)) } | Octal { (fst $1, AbsJava.Eoctal (fst $1) (snd $1)) } | OctalLong { (fst $1, AbsJava.Eoctallong (fst $1) (snd $1)) } | OctalUnsLong { (fst $1, AbsJava.Eoctalunslong (fst $1) (snd $1)) } | OctalUnsigned { (fst $1, AbsJava.Eoctalunsign (fst $1) (snd $1)) } | UnicodeChar { (fst $1, AbsJava.Eunicode (fst $1) (snd $1)) } | Unsigned { (fst $1, AbsJava.Eunsigned (fst $1) (snd $1)) } | UnsignedLong { (fst $1, AbsJava.Eunsignlong (fst $1) (snd $1)) } Unary_operator :: { (AbsJava.BNFC'Position, AbsJava.Unary_operator) } Unary_operator : '!' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Logicalneg (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | '+' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Plus (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | '-' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Negative (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | '~' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Complement (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } Assignment_op :: { (AbsJava.BNFC'Position, AbsJava.Assignment_op) } Assignment_op : '%=' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.AssignMod (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | '&=' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.AssignAnd (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | '*=' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.AssignMul (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | '+=' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.AssignAdd (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | '-=' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.AssignSub (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | '/=' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.AssignDiv (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | '<<=' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.AssignLeft (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | '=' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Assign (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | '>>=' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.AssignRight (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | '>>>=' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.AssignTrip (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | '^=' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.AssignXor (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } | '|=' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.AssignOr (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } Semi :: { (AbsJava.BNFC'Position, AbsJava.Semi) } Semi : ';' { (uncurry AbsJava.BNFC'Position (tokenLineCol $1), AbsJava.Sem1 (uncurry AbsJava.BNFC'Position (tokenLineCol $1))) } ListSemi :: { (AbsJava.BNFC'Position, [AbsJava.Semi]) } ListSemi : {- empty -} { (AbsJava.BNFC'NoPosition, []) } | Semi ListSemi { (fst $1, (:) (snd $1) (snd $2)) } { type Err = Either String happyError :: [Token] -> Err a happyError ts = Left $ "syntax error at " ++ tokenPos ts ++ case ts of [] -> [] [Err _] -> " due to lexer error" t:_ -> " before `" ++ (prToken t) ++ "'" myLexer :: String -> [Token] myLexer = tokens -- Entrypoints pProgramFile :: [Token] -> Err AbsJava.ProgramFile pProgramFile = fmap snd . pProgramFile_internal pImport :: [Token] -> Err AbsJava.Import pImport = fmap snd . pImport_internal pListImport :: [Token] -> Err [AbsJava.Import] pListImport = fmap snd . pListImport_internal pTypeDeclaration :: [Token] -> Err AbsJava.TypeDeclaration pTypeDeclaration = fmap snd . pTypeDeclaration_internal pListTypeDeclaration :: [Token] -> Err [AbsJava.TypeDeclaration] pListTypeDeclaration = fmap snd . pListTypeDeclaration_internal pClassHeader :: [Token] -> Err AbsJava.ClassHeader pClassHeader = fmap snd . pClassHeader_internal pFieldDeclaration :: [Token] -> Err AbsJava.FieldDeclaration pFieldDeclaration = fmap snd . pFieldDeclaration_internal pListFieldDeclaration :: [Token] -> Err [AbsJava.FieldDeclaration] pListFieldDeclaration = fmap snd . pListFieldDeclaration_internal pMethodBody :: [Token] -> Err AbsJava.MethodBody pMethodBody = fmap snd . pMethodBody_internal pLVarStatement :: [Token] -> Err AbsJava.LVarStatement pLVarStatement = fmap snd . pLVarStatement_internal pListLVarStatement :: [Token] -> Err [AbsJava.LVarStatement] pListLVarStatement = fmap snd . pListLVarStatement_internal pBody :: [Token] -> Err AbsJava.Body pBody = fmap snd . pBody_internal pStm :: [Token] -> Err AbsJava.Stm pStm = fmap snd . pStm_internal pDeclaratorName :: [Token] -> Err AbsJava.DeclaratorName pDeclaratorName = fmap snd . pDeclaratorName_internal pVarDecl :: [Token] -> Err AbsJava.VarDecl pVarDecl = fmap snd . pVarDecl_internal pListVarDecl :: [Token] -> Err [AbsJava.VarDecl] pListVarDecl = fmap snd . pListVarDecl_internal pVariableInits :: [Token] -> Err AbsJava.VariableInits pVariableInits = fmap snd . pVariableInits_internal pArrayInits :: [Token] -> Err AbsJava.ArrayInits pArrayInits = fmap snd . pArrayInits_internal pMethodDecl :: [Token] -> Err AbsJava.MethodDecl pMethodDecl = fmap snd . pMethodDecl_internal pParameter :: [Token] -> Err AbsJava.Parameter pParameter = fmap snd . pParameter_internal pListParameter :: [Token] -> Err [AbsJava.Parameter] pListParameter = fmap snd . pListParameter_internal pSelectionStm :: [Token] -> Err AbsJava.SelectionStm pSelectionStm = fmap snd . pSelectionStm_internal pElseIfStm :: [Token] -> Err AbsJava.ElseIfStm pElseIfStm = fmap snd . pElseIfStm_internal pListElseIfStm :: [Token] -> Err [AbsJava.ElseIfStm] pListElseIfStm = fmap snd . pListElseIfStm_internal pJumpStm :: [Token] -> Err AbsJava.JumpStm pJumpStm = fmap snd . pJumpStm_internal pGuardStm :: [Token] -> Err AbsJava.GuardStm pGuardStm = fmap snd . pGuardStm_internal pCatch :: [Token] -> Err AbsJava.Catch pCatch = fmap snd . pCatch_internal pListCatch :: [Token] -> Err [AbsJava.Catch] pListCatch = fmap snd . pListCatch_internal pIterStm :: [Token] -> Err AbsJava.IterStm pIterStm = fmap snd . pIterStm_internal pForInit :: [Token] -> Err AbsJava.ForInit pForInit = fmap snd . pForInit_internal pModifier :: [Token] -> Err AbsJava.Modifier pModifier = fmap snd . pModifier_internal pListModifier :: [Token] -> Err [AbsJava.Modifier] pListModifier = fmap snd . pListModifier_internal pBasicType :: [Token] -> Err AbsJava.BasicType pBasicType = fmap snd . pBasicType_internal pTypeSpec :: [Token] -> Err AbsJava.TypeSpec pTypeSpec = fmap snd . pTypeSpec_internal pTypeName :: [Token] -> Err AbsJava.TypeName pTypeName = fmap snd . pTypeName_internal pListTypeName :: [Token] -> Err [AbsJava.TypeName] pListTypeName = fmap snd . pListTypeName_internal pBracketsOpt :: [Token] -> Err AbsJava.BracketsOpt pBracketsOpt = fmap snd . pBracketsOpt_internal pListBracketsOpt :: [Token] -> Err [AbsJava.BracketsOpt] pListBracketsOpt = fmap snd . pListBracketsOpt_internal pListIdent :: [Token] -> Err [AbsJava.Ident] pListIdent = fmap snd . pListIdent_internal pExp :: [Token] -> Err AbsJava.Exp pExp = fmap snd . pExp_internal pExp2 :: [Token] -> Err AbsJava.Exp pExp2 = fmap snd . pExp2_internal pExp3 :: [Token] -> Err AbsJava.Exp pExp3 = fmap snd . pExp3_internal pExp4 :: [Token] -> Err AbsJava.Exp pExp4 = fmap snd . pExp4_internal pExp5 :: [Token] -> Err AbsJava.Exp pExp5 = fmap snd . pExp5_internal pExp6 :: [Token] -> Err AbsJava.Exp pExp6 = fmap snd . pExp6_internal pExp7 :: [Token] -> Err AbsJava.Exp pExp7 = fmap snd . pExp7_internal pExp8 :: [Token] -> Err AbsJava.Exp pExp8 = fmap snd . pExp8_internal pExp9 :: [Token] -> Err AbsJava.Exp pExp9 = fmap snd . pExp9_internal pExp10 :: [Token] -> Err AbsJava.Exp pExp10 = fmap snd . pExp10_internal pExp11 :: [Token] -> Err AbsJava.Exp pExp11 = fmap snd . pExp11_internal pExp12 :: [Token] -> Err AbsJava.Exp pExp12 = fmap snd . pExp12_internal pExp13 :: [Token] -> Err AbsJava.Exp pExp13 = fmap snd . pExp13_internal pExp14 :: [Token] -> Err AbsJava.Exp pExp14 = fmap snd . pExp14_internal pExp15 :: [Token] -> Err AbsJava.Exp pExp15 = fmap snd . pExp15_internal pExp16 :: [Token] -> Err AbsJava.Exp pExp16 = fmap snd . pExp16_internal pExp17 :: [Token] -> Err AbsJava.Exp pExp17 = fmap snd . pExp17_internal pExp18 :: [Token] -> Err AbsJava.Exp pExp18 = fmap snd . pExp18_internal pSpecName :: [Token] -> Err AbsJava.SpecName pSpecName = fmap snd . pSpecName_internal pNewAlloc :: [Token] -> Err AbsJava.NewAlloc pNewAlloc = fmap snd . pNewAlloc_internal pArrAcc :: [Token] -> Err AbsJava.ArrAcc pArrAcc = fmap snd . pArrAcc_internal pSpecExp :: [Token] -> Err AbsJava.SpecExp pSpecExp = fmap snd . pSpecExp_internal pSpecExpNP :: [Token] -> Err AbsJava.SpecExpNP pSpecExpNP = fmap snd . pSpecExpNP_internal pMthCall :: [Token] -> Err AbsJava.MthCall pMthCall = fmap snd . pMthCall_internal pFieldAcc :: [Token] -> Err AbsJava.FieldAcc pFieldAcc = fmap snd . pFieldAcc_internal pArgs :: [Token] -> Err AbsJava.Args pArgs = fmap snd . pArgs_internal pDimExpr :: [Token] -> Err AbsJava.DimExpr pDimExpr = fmap snd . pDimExpr_internal pListDimExpr :: [Token] -> Err [AbsJava.DimExpr] pListDimExpr = fmap snd . pListDimExpr_internal pListExp :: [Token] -> Err [AbsJava.Exp] pListExp = fmap snd . pListExp_internal pExp1 :: [Token] -> Err AbsJava.Exp pExp1 = fmap snd . pExp1_internal pConstant :: [Token] -> Err AbsJava.Constant pConstant = fmap snd . pConstant_internal pUnary_operator :: [Token] -> Err AbsJava.Unary_operator pUnary_operator = fmap snd . pUnary_operator_internal pAssignment_op :: [Token] -> Err AbsJava.Assignment_op pAssignment_op = fmap snd . pAssignment_op_internal pSemi :: [Token] -> Err AbsJava.Semi pSemi = fmap snd . pSemi_internal pListSemi :: [Token] -> Err [AbsJava.Semi] pListSemi = fmap snd . pListSemi_internal }