parser grammar ExprParser; options { tokenVocab=ExprLexer; } // Class Parser rules prog : class EOF; class:(Public | Private | Protected ) Class ID SLPAREN method+ SRPAREN; //Method Decloration method: Public Static Void ID LPAREN arg* RPAREN SLPAREN methodCode SRPAREN | Private Static Void ID SLPAREN methodCode SRPAREN | Protected Static Void ID SLPAREN methodCode SRPAREN ; methodCode: systemOutPrint* forloop* ; systemOutPrint : SYSTEM DOT OUT DOT PRINT LPAREN data RPAREN SEMI; forloop: For LPAREN arg RPAREN SLPAREN methodCode SRPAREN; arg: String arraydef* ID | exp SEMI exp SEMI exp ; exp: define | ID GreterEql INTE | ID INCMENT ; define : Int ID EQL INTE; arraydef: SqLPAREN (data T)* SqRPAREN; data: STRING ; //TODO: sections 4 to 9 //Primitive Types type: primitiveType dims? //Handle int[] or just int |name dims?; primitiveType: primitiveNumericType |Boolean; primitiveNumericType: primitiveIntegralType |primitiveFloatingPointType; primitiveIntegralType: Byte |Short |Int |Long |Char; primitiveFloatingPointType: Float |Double; dims: (LBracket RBracket)*; name: Identifier (Dot Identifier)*; // Operators 15.20 Relational Operators relationalExpression: shiftExpression |relationalExpression LessThan ShiftExpression |relationalExpression GreaterThan ShiftExpression |relationalExpression LessOrEqual ShiftExpression |relationalExpression GreaterOrEqual ShiftExpression |relationalExpression InstanceOf ReferenceType; //Equality Operators equalityExpression: relationalExpression |equalityExpression EqualEqual relationalExpression |equalityExpression NotEqualTo relationalExpression; //Bitwise and Logical Operators andExpression: equalityExpression |andExpression BitwiseAND andExpression; exclusiveOrExpression: andExpression |exclusiveOrExpression BitwiseXOR andExpression; inclusiveOrExpression: exclusiveOrExpression inclusiveOrExpression BitwiseOR exclusiveOrExpression; //Conditional And (&&) conditionalAndExpression: inclusiveOrExpression |conditionalAndExpression ConditionalAnd inclusiveOrExpression; //conditional Or (||) conditionalOrExpression: conditionalAndExpression |conditionalOrExpression ConditionalOr conditionalAndExpression; //conditional Operator (?) conditionalExpression: conditionalOrExpression |conditionalOrExpression QuestionMark exp Colon conditionalOrExpression; //Assignment operators assignmentExpression: conditionalExpression |assignment; assignment: leftHandSide assignmentOperator assignmentExpression; leftHandSide: expressionName; //|fieldAccess //|arrayAccess; assignmentOperator: Assignment | MultiplyAssign | DivideAssign | RemainderAssign | AddAssign | SubtractAssign | LeftShiftAssign | SighnedRightShiftAssign | BitwiseANDAssign | BitwiseXORAssign | BitwiseORAssign; //Determining Meaning of a Name (Section 6.5) expressionName: name; //|ambiguousName Dot name;