From 107c519f020c7180f4a9af10565e1355639853bd Mon Sep 17 00:00:00 2001 From: Mandeep Moun Date: Thu, 25 Sep 2025 23:06:20 -0600 Subject: [PATCH] Seprate syntactic grammar started --- ExprLexer.g4 | 2 +- ExprSyntactic.g4 | 80 ++++++++++++++++++++++++++++++++++++++++++++ gen/ExprLexer.interp | 4 +-- gen/ExprLexer.java | 8 ++--- gen/ExprLexer.tokens | 2 +- gen/syntactic.g4 | 44 ++++++++++++++++++++++++ 6 files changed, 132 insertions(+), 8 deletions(-) create mode 100644 gen/syntactic.g4 diff --git a/ExprLexer.g4 b/ExprLexer.g4 index 8e6c8b6..88e6e98 100644 --- a/ExprLexer.g4 +++ b/ExprLexer.g4 @@ -238,7 +238,7 @@ UnsighnedRightShiftAssign: '>>>='; //IDENTIFIERS ------------------------------------------------------------------------------------------------------------------------------------------- -Identifier: JavaLetter JavaLetterOrDigit; +IDENTIFIER: JavaLetter JavaLetterOrDigit; fragment JavaLetter: [a-zA-Z_$]; diff --git a/ExprSyntactic.g4 b/ExprSyntactic.g4 index a70aa45..e243cd3 100644 --- a/ExprSyntactic.g4 +++ b/ExprSyntactic.g4 @@ -42,3 +42,83 @@ expression1: expression2 [expression1Rest]; expression1Rest: ['?' expression ':' expression1]; 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]}; \ No newline at end of file diff --git a/gen/ExprLexer.interp b/gen/ExprLexer.interp index 789c9e8..ae74fa3 100644 --- a/gen/ExprLexer.interp +++ b/gen/ExprLexer.interp @@ -216,7 +216,7 @@ RemainderAssign LeftShiftAssign SighnedRightShiftAssign UnsighnedRightShiftAssign -Identifier +IDENTIFIER rule names: UnicodeInputCharacter @@ -360,7 +360,7 @@ RemainderAssign LeftShiftAssign SighnedRightShiftAssign UnsighnedRightShiftAssign -Identifier +IDENTIFIER JavaLetter JavaLetterOrDigit diff --git a/gen/ExprLexer.java b/gen/ExprLexer.java index d9e7973..50efa3b 100644 --- a/gen/ExprLexer.java +++ b/gen/ExprLexer.java @@ -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.CharStream; import org.antlr.v4.runtime.Token; @@ -36,7 +36,7 @@ public class ExprLexer extends Lexer { UnsignedRightShift=95, AddAssign=96, SubtractAssign=97, MultiplyAssign=98, DivideAssign=99, BitwiseANDAssign=100, BitwiseORAssign=101, BitwiseXORAssign=102, RemainderAssign=103, LeftShiftAssign=104, SighnedRightShiftAssign=105, - UnsighnedRightShiftAssign=106, Identifier=107; + UnsighnedRightShiftAssign=106, IDENTIFIER=107; public static String[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -73,7 +73,7 @@ public class ExprLexer extends Lexer { "Remainder", "LeftShift", "SignedRightShift", "UnsignedRightShift", "AddAssign", "SubtractAssign", "MultiplyAssign", "DivideAssign", "BitwiseANDAssign", "BitwiseORAssign", "BitwiseXORAssign", "RemainderAssign", "LeftShiftAssign", - "SighnedRightShiftAssign", "UnsighnedRightShiftAssign", "Identifier", + "SighnedRightShiftAssign", "UnsighnedRightShiftAssign", "IDENTIFIER", "JavaLetter", "JavaLetterOrDigit" }; } @@ -119,7 +119,7 @@ public class ExprLexer extends Lexer { "SignedRightShift", "UnsignedRightShift", "AddAssign", "SubtractAssign", "MultiplyAssign", "DivideAssign", "BitwiseANDAssign", "BitwiseORAssign", "BitwiseXORAssign", "RemainderAssign", "LeftShiftAssign", "SighnedRightShiftAssign", - "UnsighnedRightShiftAssign", "Identifier" + "UnsighnedRightShiftAssign", "IDENTIFIER" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); diff --git a/gen/ExprLexer.tokens b/gen/ExprLexer.tokens index 33386ed..7289afd 100644 --- a/gen/ExprLexer.tokens +++ b/gen/ExprLexer.tokens @@ -104,7 +104,7 @@ RemainderAssign=103 LeftShiftAssign=104 SighnedRightShiftAssign=105 UnsighnedRightShiftAssign=106 -Identifier=107 +IDENTIFIER=107 'abstract'=6 'assert'=7 'boolean'=8 diff --git a/gen/syntactic.g4 b/gen/syntactic.g4 new file mode 100644 index 0000000..b6c5ce6 --- /dev/null +++ b/gen/syntactic.g4 @@ -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];