127 lines
3.0 KiB
ANTLR
127 lines
3.0 KiB
ANTLR
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;
|