Files
Software-Analysis/ExprParser.g4

127 lines
3.0 KiB
Plaintext
Raw Normal View History

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;