Seprate syntactic grammar started

This commit is contained in:
Mandeep Moun
2025-09-25 23:06:20 -06:00
parent 184793f0e2
commit 107c519f02
6 changed files with 132 additions and 8 deletions

View File

@@ -238,7 +238,7 @@ UnsighnedRightShiftAssign: '>>>=';
//IDENTIFIERS ------------------------------------------------------------------------------------------------------------------------------------------- //IDENTIFIERS -------------------------------------------------------------------------------------------------------------------------------------------
Identifier: JavaLetter JavaLetterOrDigit; IDENTIFIER: JavaLetter JavaLetterOrDigit;
fragment JavaLetter: fragment JavaLetter:
[a-zA-Z_$]; [a-zA-Z_$];

View File

@@ -42,3 +42,83 @@ expression1: expression2 [expression1Rest];
expression1Rest: ['?' expression ':' expression1]; expression1Rest: ['?' expression ':' expression1];
expression2: expression3 [expression2Rest]; expression2: expression3 [expression2Rest];
expression2Rest: {infixop expression3}
| 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
| (expr | type) expression3
| primary {selector} {postfixOP};
primary: (expression)
| This [arguments]
| Super superSuffix
| literal
| New creator
| identifier {'.' identifier} [identifierSuffix]
| basicType bracketsOpt '.'Class
| Void '.' Class;
identifierSuffix: '['(']' bracketsOpt '.' Class '/' expression ']')
| arguments
|'.' '(' Class '/' This '/' Super arguments '/' New innerCreator ')';
// confused about this need to ask prof
prefixOp: Increment
| Decrement
| LogicalComplement
| BitWiseComplement
| Addition
| Subtraction;
postfixOp: Increment | Decrement;
selector: '.' identifier [arguments]
| '.' This
| '.' Super superSuffix
| '.' New innerCreator
| [expression];
superSuffix: arguments
| '.' identifier [arguments];
basicType: Byte
| Short
| Char
| Int
| Long
| Float
| Double
| Boolean;
argumentsOpt: [arguments];
arguments: '(' [expression {',' expression}] ')';
bracketsOpt: {'[' ']'}; //ask prof.
creator: qualifiedIdentifier ( arrayCreatorRest | classCreatorRest);
innerCreator: identifier classCreatorRest;
arrayCreatorRest: '[' ( ']' bracketsOpt arrayInitializer | expression ']' {[expression]};

View File

@@ -216,7 +216,7 @@ RemainderAssign
LeftShiftAssign LeftShiftAssign
SighnedRightShiftAssign SighnedRightShiftAssign
UnsighnedRightShiftAssign UnsighnedRightShiftAssign
Identifier IDENTIFIER
rule names: rule names:
UnicodeInputCharacter UnicodeInputCharacter
@@ -360,7 +360,7 @@ RemainderAssign
LeftShiftAssign LeftShiftAssign
SighnedRightShiftAssign SighnedRightShiftAssign
UnsighnedRightShiftAssign UnsighnedRightShiftAssign
Identifier IDENTIFIER
JavaLetter JavaLetter
JavaLetterOrDigit JavaLetterOrDigit

View File

@@ -1,4 +1,4 @@
// Generated from /Users/mannpatel/Desktop/CPSC-499/ExprLexer.g4 by ANTLR 4.13.2 // Generated from C:/Users/mande/OneDrive - University of Calgary/Documents/GitHub/CPSC-499/ExprLexer.g4 by ANTLR 4.13.2
import org.antlr.v4.runtime.Lexer; import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.Token;
@@ -36,7 +36,7 @@ public class ExprLexer extends Lexer {
UnsignedRightShift=95, AddAssign=96, SubtractAssign=97, MultiplyAssign=98, UnsignedRightShift=95, AddAssign=96, SubtractAssign=97, MultiplyAssign=98,
DivideAssign=99, BitwiseANDAssign=100, BitwiseORAssign=101, BitwiseXORAssign=102, DivideAssign=99, BitwiseANDAssign=100, BitwiseORAssign=101, BitwiseXORAssign=102,
RemainderAssign=103, LeftShiftAssign=104, SighnedRightShiftAssign=105, RemainderAssign=103, LeftShiftAssign=104, SighnedRightShiftAssign=105,
UnsighnedRightShiftAssign=106, Identifier=107; UnsighnedRightShiftAssign=106, IDENTIFIER=107;
public static String[] channelNames = { public static String[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN" "DEFAULT_TOKEN_CHANNEL", "HIDDEN"
}; };
@@ -73,7 +73,7 @@ public class ExprLexer extends Lexer {
"Remainder", "LeftShift", "SignedRightShift", "UnsignedRightShift", "AddAssign", "Remainder", "LeftShift", "SignedRightShift", "UnsignedRightShift", "AddAssign",
"SubtractAssign", "MultiplyAssign", "DivideAssign", "BitwiseANDAssign", "SubtractAssign", "MultiplyAssign", "DivideAssign", "BitwiseANDAssign",
"BitwiseORAssign", "BitwiseXORAssign", "RemainderAssign", "LeftShiftAssign", "BitwiseORAssign", "BitwiseXORAssign", "RemainderAssign", "LeftShiftAssign",
"SighnedRightShiftAssign", "UnsighnedRightShiftAssign", "Identifier", "SighnedRightShiftAssign", "UnsighnedRightShiftAssign", "IDENTIFIER",
"JavaLetter", "JavaLetterOrDigit" "JavaLetter", "JavaLetterOrDigit"
}; };
} }
@@ -119,7 +119,7 @@ public class ExprLexer extends Lexer {
"SignedRightShift", "UnsignedRightShift", "AddAssign", "SubtractAssign", "SignedRightShift", "UnsignedRightShift", "AddAssign", "SubtractAssign",
"MultiplyAssign", "DivideAssign", "BitwiseANDAssign", "BitwiseORAssign", "MultiplyAssign", "DivideAssign", "BitwiseANDAssign", "BitwiseORAssign",
"BitwiseXORAssign", "RemainderAssign", "LeftShiftAssign", "SighnedRightShiftAssign", "BitwiseXORAssign", "RemainderAssign", "LeftShiftAssign", "SighnedRightShiftAssign",
"UnsighnedRightShiftAssign", "Identifier" "UnsighnedRightShiftAssign", "IDENTIFIER"
}; };
} }
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();

View File

@@ -104,7 +104,7 @@ RemainderAssign=103
LeftShiftAssign=104 LeftShiftAssign=104
SighnedRightShiftAssign=105 SighnedRightShiftAssign=105
UnsighnedRightShiftAssign=106 UnsighnedRightShiftAssign=106
Identifier=107 IDENTIFIER=107
'abstract'=6 'abstract'=6
'assert'=7 'assert'=7
'boolean'=8 'boolean'=8

44
gen/syntactic.g4 Normal file
View File

@@ -0,0 +1,44 @@
parser grammar syntactic;
options {
tokenVocab=ExprLexer;
}
identifier: IDENTIFIER;
qualifiedIdentifier: identifier {'.' identifier};
literal: IntegerLiteral
| FloatingPointLiteral
| CharacterLiteral
| StringLiteral
| BooleanLiteral
| NullLiteral;
expression: expression1 [assignmentOperator expression1];
assignmentOperator: Assignment
| AddAssign
| SubtractAssign
| MultiplyAssign
| DivideAssign
| BitwiseANDAssign
| BitwiseORAssign
| BitwiseXORAssign
| RemainderAssign
| LeftShiftAssign
| SighnedRightShiftAssign
| UnsighnedRightShiftAssign;
type: identifier {'.' identifier} bracketsOpt
| basicType;
statementExpression: expression;
constantExpression: expression;
expression1: expression2 [expression1Rest];
expression1Rest: ['?' expression ':' expression1];
expression2: expression3 [expression2Rest];