removed part of the grammar for performance

This commit is contained in:
Nicolas Amaya
2025-09-27 14:11:33 -06:00
parent be8499f7fe
commit 9e858a98f3
2 changed files with 237 additions and 145 deletions

View File

@@ -188,7 +188,7 @@ NullLiteral: 'null';
//SEPRATORS ------------------------------------------------------------------------------------------------------------------------- //SEPRATORS -------------------------------------------------------------------------------------------------------------------------
ParenthesesLeft: '('; ParenthesesLeft: '(';
ParanthesesRight: ')'; ParenthesesRight: ')';
CurlyBracketLeft: '{'; CurlyBracketLeft: '{';
CurlyBracketRight: '}'; CurlyBracketRight: '}';
SquareBracketLeft: '['; SquareBracketLeft: '[';
@@ -233,8 +233,8 @@ BitwiseORAssign: '|=';
BitwiseXORAssign: '^='; BitwiseXORAssign: '^=';
RemainderAssign: '%='; RemainderAssign: '%=';
LeftShiftAssign: '<<='; LeftShiftAssign: '<<=';
SighnedRightShiftAssign: '>>='; SignedRightShiftAssign: '>>=';
UnsighnedRightShiftAssign: '>>>='; UnsignedRightShiftAssign: '>>>=';
//IDENTIFIERS ------------------------------------------------------------------------------------------------------------------------------------------- //IDENTIFIERS -------------------------------------------------------------------------------------------------------------------------------------------

View File

@@ -15,8 +15,111 @@ literal: IntegerLiteral
| BooleanLiteral | BooleanLiteral
| NullLiteral; | NullLiteral;
expression: expression1 (assignmentOperator expression1)?; //expression: assignmentExpression;//expression1 (assignmentOperator expression1)?;
//testy test
// Top
expression
: assignmentExpression
;
// Assignment is right-assoc and restricts LHS
assignmentExpression
: leftHandSide assignmentOperator assignmentExpression
| conditionalExpression
;
// ?: binds looser than ||
conditionalExpression
: conditionalOrExpression
(Question expression Colon conditionalExpression)?
;
// || (left-assoc)
conditionalOrExpression
: conditionalAndExpression
(ConditionalOR conditionalAndExpression)*
;
// && (left-assoc)
conditionalAndExpression
: inclusiveOrExpression
(ConditionalAND inclusiveOrExpression)*
;
// | ^ & (left-assoc, each tier)
inclusiveOrExpression
: exclusiveOrExpression
(BitwiseOR exclusiveOrExpression)*
;
exclusiveOrExpression
: andExpression
(BitwiseXOR andExpression)*
;
andExpression
: equalityExpression
(BitwiseAND equalityExpression)*
;
// == !=
equalityExpression
: relationalExpression
((EqualTo | NotEqualTo) relationalExpression)*
;
// < > <= >= and instanceof
relationalExpression
: shiftExpression
((LessThan | GreaterThan | LessThanEqualTo | GreaterThanEqualTo) shiftExpression)*
| shiftExpression InstanceOf type
;
// << >> >>>
shiftExpression
: additiveExpression
((LeftShift | SignedRightShift | UnsignedRightShift) additiveExpression)*
;
// + -
additiveExpression
: multiplicativeExpression
((Addition | Subtraction) multiplicativeExpression)*
;
// * / %
multiplicativeExpression
: unaryExpression
((Multiplication | Division | Remainder) unaryExpression)*
;
// ++x --x +x -x and the rest
unaryExpression
: (Increment | Decrement) unaryExpression
| (Addition | Subtraction) unaryExpression
| unaryExpressionNotPlusMinus
;
unaryExpressionNotPlusMinus
: (BitwiseComplement | LogicalComplement) unaryExpression
| castExpression
| postfixExpression
;
// (T)expr
castExpression
: ParenthesesLeft primitiveType ParanthesesRight unaryExpression
| ParenthesesLeft referenceType ParanthesesRight unaryExpressionNotPlusMinus
;
// post-inc/dec over your suffix-based primary
postfixExpression
: primary (Increment | Decrement)*
;
//end test
assignmentOperator: Assignment assignmentOperator: Assignment
| AddAssign | AddAssign
| SubtractAssign | SubtractAssign
@@ -27,8 +130,8 @@ assignmentOperator: Assignment
| BitwiseXORAssign | BitwiseXORAssign
| RemainderAssign | RemainderAssign
| LeftShiftAssign | LeftShiftAssign
| SighnedRightShiftAssign | SignedRightShiftAssign
| UnsighnedRightShiftAssign; | UnsignedRightShiftAssign;
type: identifier (Dot identifier)* bracketsOpt type: identifier (Dot identifier)* bracketsOpt
| basicType; | basicType;
@@ -37,65 +140,65 @@ statementExpression: expression;
constantExpression: expression; constantExpression: expression;
expression1: expression2 (expression1Rest)?; //expression1: expression2 (expression1Rest)?;
expression1Rest: Question expression Colon expression1;
expression2: expression3 expression2Rest?;
expression2Rest: (infixop expression3)+
| InstanceOf type;
infixop: ConditionalOR
| ConditionalAND
| BitwiseOR
| BitwiseXOR
| BitwiseAND
| EqualTo
| NotEqualTO
| LessThan
| GreterThan
| LessThanEqualTo
| GreaterThanEqualTo
| LeftShift
| SignedRightShift
| UnsignedRightShift
| Addition
| Subtraction
| Multiplication
| Division
| Remainder;
expression3: prefixOp expression3 // Recursion
| (expression | type) expression3
| primary (selector)* (postfixOp)*;
primary: (expression)
| This (arguments)?
| Super superSuffix
| literal
| New creator
| identifier (Dot identifier)* (identifierSuffix)?
| basicType bracketsOpt Dot Class
| Void Dot Class;
////TEST
//primary: primaryAtom primarySuffix*
// | New creator ;
// //
//primaryAtom: ParenthesesLeft expression ParenthesesRight //expression1Rest: Question expression Colon expression1;
// | This //
//expression2: expression3 expression2Rest?;
//
//expression2Rest: (infixop expression3)+
// | InstanceOf type;
//
//infixop: ConditionalOR
// | ConditionalAND
// | BitwiseOR
// | BitwiseXOR
// | BitwiseAND
// | EqualTo
// | NotEqualTo
// | LessThan
// | GreaterThan
// | LessThanEqualTo
// | GreaterThanEqualTo
// | LeftShift
// | SignedRightShift
// | UnsignedRightShift
// | Addition
// | Subtraction
// | Multiplication
// | Division
// | Remainder;
//
//expression3: prefixOp expression3 // Recursion
// | ParenthesesLeft type ParenthesesRight expression3
// | primary (selector)* (postfixOp)*;
//primary: (expression)
// | This (arguments)?
// | Super superSuffix
// | literal // | literal
// | qualifiedIdentifier // | New creator
// | qualifiedIdentifier Dot This // | identifier (Dot identifier)* (identifierSuffix)?
// | basicType bracketsOpt Dot Class // | basicType bracketsOpt Dot Class
// | Void Dot Class // | Void Dot Class;
// | Super;
// //TEST
//// All selectors / postfix pieces (no recursion back to primary) primary: primaryAtom primarySuffix*
//primarySuffix: Dot Identifier arguments? | New creator ;
// | SquareBracketLeft expression SquareBracketRight
// | Dot Class; primaryAtom: ParenthesesLeft expression ParenthesesRight
| This
| literal
| qualifiedIdentifier
| qualifiedIdentifier Dot This
| basicType bracketsOpt Dot Class
| Void Dot Class
| Super;
// All selectors / postfix pieces (no recursion back to primary)
primarySuffix: Dot Identifier arguments?
| SquareBracketLeft expression SquareBracketRight
| Dot Class;
////END test ////END test
identifierSuffix: SquareBracketLeft SquareBracketRight bracketsOpt Dot Class //Case []...'.'class identifierSuffix: SquareBracketLeft SquareBracketRight bracketsOpt Dot Class //Case []...'.'class
@@ -174,12 +277,12 @@ statement: block
| Break (identifier)? Semicolon | Break (identifier)? Semicolon
| Continue (identifier)? Semicolon | Continue (identifier)? Semicolon
| Semicolon | Semicolon
| expressionStatement //| expressionStatement
| identifier Colon statement; | identifier Colon statement;
catches: catchClause (catchClause)*; catches: catchClause (catchClause)*;
catchClause: Catch ParenthesesLeft formalParameter ParanthesesRight block; catchClause: Catch ParenthesesLeft formalParameter ParenthesesRight block;
switchBlockStatementGroups: (switchBlockStatementGroup)*; switchBlockStatementGroups: (switchBlockStatementGroup)*;
@@ -226,7 +329,7 @@ variableDeclaratorId: identifier bracketsOpt;
compilationUnit: (Package qualifiedIdentifier Semicolon)? (importDeclaration)*; compilationUnit: (Package qualifiedIdentifier Semicolon)? (importDeclaration)*;
importDeclaration: Import identifier (Dot identifier)*(importDeclaration Multiplication)? Semicolon; importDeclaration: Import identifier (Dot identifier)* (Dot Multiplication)? Semicolon;
typeDeclaration: classOrInterfaceDeclaration Semicolon; typeDeclaration: classOrInterfaceDeclaration Semicolon;
@@ -236,7 +339,7 @@ classDeclaration: Class identifier (Extends type)? (Implements typeList)? classB
interfaceDeclaration: Interface identifier (Extends typeList)? interfaceBody; interfaceDeclaration: Interface identifier (Extends typeList)? interfaceBody;
typeList: type (Semicolon type)*; typeList: type (Comma type)*;
classBody: CurlyBracketLeft (classBodyDeclaration)* CurlyBracketRight; classBody: CurlyBracketLeft (classBodyDeclaration)* CurlyBracketRight;
@@ -279,7 +382,7 @@ constructorDeclaratorRest: formalParameters (Throws qualifiedIdentifierList)? me
qualifiedIdentifierList: qualifiedIdentifier (Semicolon qualifiedIdentifier)*; qualifiedIdentifierList: qualifiedIdentifier (Semicolon qualifiedIdentifier)*;
formalParameters:ParenthesesLeft (formalParameters(Semicolon formalParameter))? ParanthesesRight; formalParameters: ParenthesesLeft (formalParameter (Comma formalParameter)*)? ParenthesesRight;
formalParameter: (Final)? type variableDeclaratorId; formalParameter: (Final)? type variableDeclaratorId;
@@ -294,63 +397,63 @@ assignment: leftHandSide assignmentOperator assignmentExpression;
leftHandSide: expressionName leftHandSide: expressionName
| fieldAccess | fieldAccess
| arrayAccess; | primary SquareBracketLeft expression SquareBracketRight(SquareBracketLeft expression SquareBracketRight)*;
conditionalExpression: conditionalOrExpression //conditionalExpression: conditionalOrExpression
| conditionalOrExpression Question expression Colon conditionalExpression; // | conditionalOrExpression Question expression Colon conditionalExpression;
//
conditionalOrExpression: // conditionalOrExpression:
conditionalAndExpression // conditionalAndExpression
|conditionalOrExpression ConditionalOr conditionalAndExpression; // |conditionalOrExpression ConditionalOr conditionalAndExpression;
//Conditional And (&&) // //Conditional And (&&)
conditionalAndExpression: // conditionalAndExpression:
inclusiveOrExpression // inclusiveOrExpression
|conditionalAndExpression ConditionalAnd inclusiveOrExpression; // |conditionalAndExpression ConditionalAnd inclusiveOrExpression;
inclusiveOrExpression: // inclusiveOrExpression:
exclusiveOrExpression // exclusiveOrExpression
inclusiveOrExpression BitwiseOR exclusiveOrExpression; // inclusiveOrExpression BitwiseOR exclusiveOrExpression;
//Assignment operators ////Assignment operators
assignmentExpression:conditionalExpression //assignmentExpression:conditionalExpression
|assignment; // |assignment;
//
relationalExpression: // relationalExpression:
shiftExpression // shiftExpression
|relationalExpression LessThan shiftExpression // |relationalExpression LessThan shiftExpression
|relationalExpression GreaterThan shiftExpression // |relationalExpression GreaterThan shiftExpression
|relationalExpression LessOrEqual shiftExpression // |relationalExpression LessOrEqual shiftExpression
|relationalExpression GreaterOrEqual shiftExpression // |relationalExpression GreaterOrEqual shiftExpression
|relationalExpression InstanceOf referenceType; // |relationalExpression InstanceOf referenceType;
//ShiftExpression: //ShiftExpression:
shiftExpression: additiveExpression //shiftExpression: additiveExpression
|shiftExpression LeftShift additiveExpression // |shiftExpression LeftShift additiveExpression
|shiftExpression SignedRightShift additiveExpression // |shiftExpression SignedRightShift additiveExpression
|shiftExpression UnsignedRightShift additiveExpression; // |shiftExpression UnsignedRightShift additiveExpression;
//Additive Operators ////Additive Operators
additiveExpression: multiplicativeExpression //additiveExpression: multiplicativeExpression
| additiveExpression Addition multiplicativeExpression // | additiveExpression Addition multiplicativeExpression
| additiveExpression Subtraction multiplicativeExpression; // | additiveExpression Subtraction multiplicativeExpression;
//
//Multiplicative Operators ////Multiplicative Operators
multiplicativeExpression: unaryExpression //multiplicativeExpression: unaryExpression
| multiplicativeExpression Multiplication unaryExpression // | multiplicativeExpression Multiplication unaryExpression
| multiplicativeExpression Division unaryExpression // | multiplicativeExpression Division unaryExpression
| multiplicativeExpression Remainder unaryExpression; // | multiplicativeExpression Remainder unaryExpression;
//Unary Operators ////Unary Operators
unaryExpression: preIncrementExpression //unaryExpression: preIncrementExpression
|preDecrementExpression // |preDecrementExpression
|Addition unaryExpression // |Addition unaryExpression
|Subtraction unaryExpression // |Subtraction unaryExpression
|unaryExpressionNotPlusMinus; // |unaryExpressionNotPlusMinus;
preIncrementExpression: Increment unaryExpression; preIncrementExpression: Increment unaryExpression;
preDecrementExpression: Decrement unaryExpression; preDecrementExpression: Decrement unaryExpression;
unaryExpressionNotPlusMinus: postfixExpression //unaryExpressionNotPlusMinus: postfixExpression
|BitwiseComplement unaryExpression // |BitwiseComplement unaryExpression
|LogicalComplement unaryExpression // |LogicalComplement unaryExpression
| castExpression; // | castExpression;
castExpression: ParenthesesLeft primitiveType ParanthesesRight unaryExpression //castExpression: ParenthesesLeft primitiveType ParanthesesRight unaryExpression
| ParenthesesLeft referenceType ParanthesesRight unaryExpressionNotPlusMinus; // | ParenthesesLeft referenceType ParanthesesRight unaryExpressionNotPlusMinus;
//Primitive types //Primitive types
primitiveType: numericType primitiveType: numericType
| Boolean; | Boolean;
@@ -376,23 +479,23 @@ floatingPointType: Float | Double;
// | postIncrementExpression // | postIncrementExpression
// | postDecrementExpression; // | postDecrementExpression;
postfixBase: primary | expressionName ; postfixBase: primary | expressionName ;
postfixExpression : postfixBase (Increment | Decrement)* ; //postfixExpression : postfixBase (Increment | Decrement)* ;
postIncrementExpression: postfixExpression Increment; //postIncrementExpression: postfixExpression Increment;
postDecrementExpression: postfixExpression Decrement; //postDecrementExpression: postfixExpression Decrement;
//Equality Operators // //Equality Operators
equalityExpression: // equalityExpression:
relationalExpression // relationalExpression
|equalityExpression EqualEqual relationalExpression // |equalityExpression EqualEqual relationalExpression
|equalityExpression NotEqualTo relationalExpression; // |equalityExpression NotEqualTo relationalExpression;
//Bitwise and Logical Operators //Bitwise and Logical Operators
andExpression: // andExpression:
equalityExpression // equalityExpression
|andExpression BitwiseAND andExpression; // |andExpression BitwiseAND andExpression;
exclusiveOrExpression: // exclusiveOrExpression:
andExpression // andExpression
|exclusiveOrExpression BitwiseXOR andExpression; // |exclusiveOrExpression BitwiseXOR andExpression;
expressionName: Identifier (Dot Identifier)*; expressionName: Identifier (Dot Identifier)*;
fieldAccess fieldAccess
: primary Dot Identifier : primary Dot Identifier
@@ -400,17 +503,6 @@ fieldAccess
| typeName Dot Super Dot Identifier | typeName Dot Super Dot Identifier
; ;
primaryNoNewArray: literal
| type Dot Class
|Void Dot Class
|This
|qualifiedIdentifier Dot This
|ParenthesesLeft expression ParanthesesRight
|classInstanceCreationExpression
|fieldAccess
|methodInvocation
|arrayAccess;
classInstanceCreationExpression: New classOrInterfaceType ParenthesesLeft argumentsOpt ParanthesesRight classBody classInstanceCreationExpression: New classOrInterfaceType ParenthesesLeft argumentsOpt ParanthesesRight classBody
| primary New identifier ParenthesesLeft argumentsOpt ParanthesesRight classBody; | primary New identifier ParenthesesLeft argumentsOpt ParanthesesRight classBody;