From 30825d63726167aa11a669621ab3f9c4e24322cc Mon Sep 17 00:00:00 2001 From: Catarina Gamboa Date: Wed, 18 Jun 2025 18:12:56 +0900 Subject: [PATCH 01/14] infrastructure for refinements language --- latte/pom.xml | 33 +++++++++++ .../java/refinements/RefinementsLanguage.g4 | 56 +++++++++++++++++++ latte/src/main/java/refinements/Test.java | 38 +++++++++++++ 3 files changed, 127 insertions(+) create mode 100644 latte/src/main/java/refinements/RefinementsLanguage.g4 create mode 100644 latte/src/main/java/refinements/Test.java diff --git a/latte/pom.xml b/latte/pom.xml index 6b77334..1b724df 100644 --- a/latte/pom.xml +++ b/latte/pom.xml @@ -16,10 +16,24 @@ 1.8 1.8 10.4.2 + 4.5 + 4.5 + + org.antlr + antlr4-runtime + ${antlr4.version} + + + org.antlr + antlr4-maven-plugin + ${antlr4.plugin.version} + + + com.google.code.gson gson @@ -137,6 +151,25 @@ maven-project-info-reports-plugin 3.0.0 + + org.antlr + antlr4-maven-plugin + ${antlr.plugin.version} + + ${basedir}/src/main/java/refinements + ${basedir}/src/main/java/refinements + refinements + true + true + + + + + antlr4 + + + + diff --git a/latte/src/main/java/refinements/RefinementsLanguage.g4 b/latte/src/main/java/refinements/RefinementsLanguage.g4 new file mode 100644 index 0000000..7a7ce79 --- /dev/null +++ b/latte/src/main/java/refinements/RefinementsLanguage.g4 @@ -0,0 +1,56 @@ +grammar RefinementsLanguage; + + +prog: start | ; +start: + pred #startPred + ; + + +pred: + '(' pred ')' #predGroup + | '!' pred #predNegate + | pred LOGOP pred #predLogic + | exp #predExp + ; + +exp: + '(' exp ')' #expGroup + | exp BOOLOP exp #expBool + | operand #expOperand + ; + +operand: + literalExpression #opLiteral + | operand ARITHOP operand #opArith + | operand '-' operand #opSub + | '-' operand #opMinus + | '!' operand #opNot + | '(' operand ')' #opGroup + ; + + +literalExpression: + '(' literalExpression ')' #litGroup + | literal #lit + | ID #var + | ID '.' ID #targetInvocation + ; + + +literal: + BOOL + | INT; + + + +LOGOP : '&&'|'||'| '-->'; +BOOLOP : '=='|'!='|'>='|'>'|'<='|'<'; +ARITHOP : '+'|'*'|'/'|'%';//|'-'; + +BOOL : 'true' | 'false'; +ID_UPPER: ([A-Z][a-zA-Z0-9]*); +ID : '#'*[a-zA-Z_][a-zA-Z0-9_#]*; +INT : (([0-9]+) | ([0-9]+('_'[0-9]+)*)); + +WS : (' '|'\t'|'\n'|'\r')+ -> channel(HIDDEN); diff --git a/latte/src/main/java/refinements/Test.java b/latte/src/main/java/refinements/Test.java new file mode 100644 index 0000000..559e4af --- /dev/null +++ b/latte/src/main/java/refinements/Test.java @@ -0,0 +1,38 @@ +package refinements; + +import org.antlr.v4.runtime.CharStream; +// import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.tree.ParseTree; + +// import refinements.antlr.RefinementsLanguageLexer; +// import refinements.antlr.RefinementsLanguageParser; + +public class Test { + + // public static void main(String[] args) { + // String input = "a + b < 10"; + + // // // Create input stream (modern way) + // CharStream inputStream = CharStreams.fromString(input); + + // // Create lexer + // RefinementsLanguageLexer lexer = new RefinementsLanguageLexer(inputStream); + + // // Create token stream + // CommonTokenStream tokens = new CommonTokenStream(lexer); + + // // Create parser + // RefinementsLanguageParser parser = new RefinementsLanguageParser(tokens); + + // // Parse starting from your grammar's start rule + // // Replace 'program' with your actual start rule name + // ParseTree tree = parser.program(); // Change 'program' to your start rule + + // // Print the parse tree + // System.out.println("Parse Tree:"); + // System.out.println(tree.toStringTree(parser)); + + // } + +} From 800bf11a6798369c8049bb45f7c4e28c0c09c477 Mon Sep 17 00:00:00 2001 From: Catarina Gamboa Date: Thu, 19 Jun 2025 12:12:35 +0900 Subject: [PATCH 02/14] Added g4 grammar and proper generated files from pom. Added test just for the grammar + parser --- latte/pom.xml | 68 +- .../.antlr/RefinementsLanguage.interp | 44 + .../.antlr/RefinementsLanguage.tokens | 18 + .../.antlr/RefinementsLanguageLexer.interp | 56 + .../.antlr/RefinementsLanguageLexer.java | 190 +++ .../.antlr/RefinementsLanguageLexer.tokens | 18 + .../.antlr/RefinementsLanguageParser.java | 861 +++++++++++++ .../refinements/RefinementsLanguage.interp | 44 + .../refinements/RefinementsLanguage.tokens | 18 + .../RefinementsLanguageBaseListener.java | 280 ++++ .../RefinementsLanguageBaseVisitor.java | 155 +++ .../RefinementsLanguageLexer.interp | 56 + .../refinements/RefinementsLanguageLexer.java | 191 +++ .../RefinementsLanguageLexer.tokens | 18 + .../RefinementsLanguageListener.java | 246 ++++ .../RefinementsLanguageParser.java | 1122 +++++++++++++++++ .../RefinementsLanguageVisitor.java | 151 +++ latte/src/main/java/refinements/Test.java | 35 +- 18 files changed, 3519 insertions(+), 52 deletions(-) create mode 100644 latte/src/main/java/refinements/.antlr/RefinementsLanguage.interp create mode 100644 latte/src/main/java/refinements/.antlr/RefinementsLanguage.tokens create mode 100644 latte/src/main/java/refinements/.antlr/RefinementsLanguageLexer.interp create mode 100644 latte/src/main/java/refinements/.antlr/RefinementsLanguageLexer.java create mode 100644 latte/src/main/java/refinements/.antlr/RefinementsLanguageLexer.tokens create mode 100644 latte/src/main/java/refinements/.antlr/RefinementsLanguageParser.java create mode 100644 latte/src/main/java/refinements/RefinementsLanguage.interp create mode 100644 latte/src/main/java/refinements/RefinementsLanguage.tokens create mode 100644 latte/src/main/java/refinements/RefinementsLanguageBaseListener.java create mode 100644 latte/src/main/java/refinements/RefinementsLanguageBaseVisitor.java create mode 100644 latte/src/main/java/refinements/RefinementsLanguageLexer.interp create mode 100644 latte/src/main/java/refinements/RefinementsLanguageLexer.java create mode 100644 latte/src/main/java/refinements/RefinementsLanguageLexer.tokens create mode 100644 latte/src/main/java/refinements/RefinementsLanguageListener.java create mode 100644 latte/src/main/java/refinements/RefinementsLanguageParser.java create mode 100644 latte/src/main/java/refinements/RefinementsLanguageVisitor.java diff --git a/latte/pom.xml b/latte/pom.xml index 1b724df..46a511c 100644 --- a/latte/pom.xml +++ b/latte/pom.xml @@ -16,8 +16,7 @@ 1.8 1.8 10.4.2 - 4.5 - 4.5 + 4.13.1 @@ -27,12 +26,7 @@ antlr4-runtime ${antlr4.version} - - org.antlr - antlr4-maven-plugin - ${antlr4.plugin.version} - - + com.google.code.gson @@ -49,23 +43,21 @@ org.junit.jupiter junit-jupiter-api - 5.11.4 + 5.11.4 test - org.junit.jupiter junit-jupiter-params - 5.11.4 + 5.11.4 test - org.junit.jupiter junit-jupiter-engine - 5.11.4 + 5.11.4 test @@ -103,7 +95,6 @@ test - fr.inria.gforge.spoon spoon-core @@ -129,7 +120,7 @@ maven-surefire-plugin - 3.0.0-M5 + 3.0.0-M5 maven-jar-plugin @@ -151,26 +142,33 @@ maven-project-info-reports-plugin 3.0.0 - - org.antlr - antlr4-maven-plugin - ${antlr.plugin.version} - - ${basedir}/src/main/java/refinements - ${basedir}/src/main/java/refinements - refinements - true - true - - - - - antlr4 - - - - + + + + + org.antlr + antlr4-maven-plugin + ${antlr4.version} + + ${basedir}/src/main/java/refinements + ${basedir}/src/main/java/refinements + + -package + refinements + + true + true + + + + + antlr4 + + + + + - + \ No newline at end of file diff --git a/latte/src/main/java/refinements/.antlr/RefinementsLanguage.interp b/latte/src/main/java/refinements/.antlr/RefinementsLanguage.interp new file mode 100644 index 0000000..965ad9b --- /dev/null +++ b/latte/src/main/java/refinements/.antlr/RefinementsLanguage.interp @@ -0,0 +1,44 @@ +token literal names: +null +'(' +')' +'!' +'-' +'.' +null +null +null +null +null +null +null +null + +token symbolic names: +null +null +null +null +null +null +LOGOP +BOOLOP +ARITHOP +BOOL +ID_UPPER +ID +INT +WS + +rule names: +prog +start +pred +exp +operand +literalExpression +literal + + +atn: +[4, 1, 13, 91, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 1, 0, 1, 0, 3, 0, 17, 8, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 29, 8, 2, 1, 2, 1, 2, 1, 2, 5, 2, 34, 8, 2, 10, 2, 12, 2, 37, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 45, 8, 3, 1, 3, 1, 3, 1, 3, 5, 3, 50, 8, 3, 10, 3, 12, 3, 53, 9, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 65, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 73, 8, 4, 10, 4, 12, 4, 76, 9, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 87, 8, 5, 1, 6, 1, 6, 1, 6, 0, 3, 4, 6, 8, 7, 0, 2, 4, 6, 8, 10, 12, 0, 1, 2, 0, 9, 9, 12, 12, 97, 0, 16, 1, 0, 0, 0, 2, 18, 1, 0, 0, 0, 4, 28, 1, 0, 0, 0, 6, 44, 1, 0, 0, 0, 8, 64, 1, 0, 0, 0, 10, 86, 1, 0, 0, 0, 12, 88, 1, 0, 0, 0, 14, 17, 3, 2, 1, 0, 15, 17, 1, 0, 0, 0, 16, 14, 1, 0, 0, 0, 16, 15, 1, 0, 0, 0, 17, 1, 1, 0, 0, 0, 18, 19, 3, 4, 2, 0, 19, 3, 1, 0, 0, 0, 20, 21, 6, 2, -1, 0, 21, 22, 5, 1, 0, 0, 22, 23, 3, 4, 2, 0, 23, 24, 5, 2, 0, 0, 24, 29, 1, 0, 0, 0, 25, 26, 5, 3, 0, 0, 26, 29, 3, 4, 2, 3, 27, 29, 3, 6, 3, 0, 28, 20, 1, 0, 0, 0, 28, 25, 1, 0, 0, 0, 28, 27, 1, 0, 0, 0, 29, 35, 1, 0, 0, 0, 30, 31, 10, 2, 0, 0, 31, 32, 5, 6, 0, 0, 32, 34, 3, 4, 2, 3, 33, 30, 1, 0, 0, 0, 34, 37, 1, 0, 0, 0, 35, 33, 1, 0, 0, 0, 35, 36, 1, 0, 0, 0, 36, 5, 1, 0, 0, 0, 37, 35, 1, 0, 0, 0, 38, 39, 6, 3, -1, 0, 39, 40, 5, 1, 0, 0, 40, 41, 3, 6, 3, 0, 41, 42, 5, 2, 0, 0, 42, 45, 1, 0, 0, 0, 43, 45, 3, 8, 4, 0, 44, 38, 1, 0, 0, 0, 44, 43, 1, 0, 0, 0, 45, 51, 1, 0, 0, 0, 46, 47, 10, 2, 0, 0, 47, 48, 5, 7, 0, 0, 48, 50, 3, 6, 3, 3, 49, 46, 1, 0, 0, 0, 50, 53, 1, 0, 0, 0, 51, 49, 1, 0, 0, 0, 51, 52, 1, 0, 0, 0, 52, 7, 1, 0, 0, 0, 53, 51, 1, 0, 0, 0, 54, 55, 6, 4, -1, 0, 55, 65, 3, 10, 5, 0, 56, 57, 5, 4, 0, 0, 57, 65, 3, 8, 4, 3, 58, 59, 5, 3, 0, 0, 59, 65, 3, 8, 4, 2, 60, 61, 5, 1, 0, 0, 61, 62, 3, 8, 4, 0, 62, 63, 5, 2, 0, 0, 63, 65, 1, 0, 0, 0, 64, 54, 1, 0, 0, 0, 64, 56, 1, 0, 0, 0, 64, 58, 1, 0, 0, 0, 64, 60, 1, 0, 0, 0, 65, 74, 1, 0, 0, 0, 66, 67, 10, 5, 0, 0, 67, 68, 5, 8, 0, 0, 68, 73, 3, 8, 4, 6, 69, 70, 10, 4, 0, 0, 70, 71, 5, 4, 0, 0, 71, 73, 3, 8, 4, 5, 72, 66, 1, 0, 0, 0, 72, 69, 1, 0, 0, 0, 73, 76, 1, 0, 0, 0, 74, 72, 1, 0, 0, 0, 74, 75, 1, 0, 0, 0, 75, 9, 1, 0, 0, 0, 76, 74, 1, 0, 0, 0, 77, 78, 5, 1, 0, 0, 78, 79, 3, 10, 5, 0, 79, 80, 5, 2, 0, 0, 80, 87, 1, 0, 0, 0, 81, 87, 3, 12, 6, 0, 82, 87, 5, 11, 0, 0, 83, 84, 5, 11, 0, 0, 84, 85, 5, 5, 0, 0, 85, 87, 5, 11, 0, 0, 86, 77, 1, 0, 0, 0, 86, 81, 1, 0, 0, 0, 86, 82, 1, 0, 0, 0, 86, 83, 1, 0, 0, 0, 87, 11, 1, 0, 0, 0, 88, 89, 7, 0, 0, 0, 89, 13, 1, 0, 0, 0, 9, 16, 28, 35, 44, 51, 64, 72, 74, 86] \ No newline at end of file diff --git a/latte/src/main/java/refinements/.antlr/RefinementsLanguage.tokens b/latte/src/main/java/refinements/.antlr/RefinementsLanguage.tokens new file mode 100644 index 0000000..91471e1 --- /dev/null +++ b/latte/src/main/java/refinements/.antlr/RefinementsLanguage.tokens @@ -0,0 +1,18 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T__4=5 +LOGOP=6 +BOOLOP=7 +ARITHOP=8 +BOOL=9 +ID_UPPER=10 +ID=11 +INT=12 +WS=13 +'('=1 +')'=2 +'!'=3 +'-'=4 +'.'=5 diff --git a/latte/src/main/java/refinements/.antlr/RefinementsLanguageLexer.interp b/latte/src/main/java/refinements/.antlr/RefinementsLanguageLexer.interp new file mode 100644 index 0000000..026a442 --- /dev/null +++ b/latte/src/main/java/refinements/.antlr/RefinementsLanguageLexer.interp @@ -0,0 +1,56 @@ +token literal names: +null +'(' +')' +'!' +'-' +'.' +null +null +null +null +null +null +null +null + +token symbolic names: +null +null +null +null +null +null +LOGOP +BOOLOP +ARITHOP +BOOL +ID_UPPER +ID +INT +WS + +rule names: +T__0 +T__1 +T__2 +T__3 +T__4 +LOGOP +BOOLOP +ARITHOP +BOOL +ID_UPPER +ID +INT +WS + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 13, 121, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 45, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 57, 8, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 70, 8, 8, 1, 9, 1, 9, 5, 9, 74, 8, 9, 10, 9, 12, 9, 77, 9, 9, 1, 10, 5, 10, 80, 8, 10, 10, 10, 12, 10, 83, 9, 10, 1, 10, 1, 10, 5, 10, 87, 8, 10, 10, 10, 12, 10, 90, 9, 10, 1, 11, 4, 11, 93, 8, 11, 11, 11, 12, 11, 94, 1, 11, 4, 11, 98, 8, 11, 11, 11, 12, 11, 99, 1, 11, 1, 11, 4, 11, 104, 8, 11, 11, 11, 12, 11, 105, 5, 11, 108, 8, 11, 10, 11, 12, 11, 111, 9, 11, 3, 11, 113, 8, 11, 1, 12, 4, 12, 116, 8, 12, 11, 12, 12, 12, 117, 1, 12, 1, 12, 0, 0, 13, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 1, 0, 7, 3, 0, 37, 37, 42, 43, 47, 47, 1, 0, 65, 90, 3, 0, 48, 57, 65, 90, 97, 122, 3, 0, 65, 90, 95, 95, 97, 122, 5, 0, 35, 35, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 3, 0, 9, 10, 13, 13, 32, 32, 137, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 1, 27, 1, 0, 0, 0, 3, 29, 1, 0, 0, 0, 5, 31, 1, 0, 0, 0, 7, 33, 1, 0, 0, 0, 9, 35, 1, 0, 0, 0, 11, 44, 1, 0, 0, 0, 13, 56, 1, 0, 0, 0, 15, 58, 1, 0, 0, 0, 17, 69, 1, 0, 0, 0, 19, 71, 1, 0, 0, 0, 21, 81, 1, 0, 0, 0, 23, 112, 1, 0, 0, 0, 25, 115, 1, 0, 0, 0, 27, 28, 5, 40, 0, 0, 28, 2, 1, 0, 0, 0, 29, 30, 5, 41, 0, 0, 30, 4, 1, 0, 0, 0, 31, 32, 5, 33, 0, 0, 32, 6, 1, 0, 0, 0, 33, 34, 5, 45, 0, 0, 34, 8, 1, 0, 0, 0, 35, 36, 5, 46, 0, 0, 36, 10, 1, 0, 0, 0, 37, 38, 5, 38, 0, 0, 38, 45, 5, 38, 0, 0, 39, 40, 5, 124, 0, 0, 40, 45, 5, 124, 0, 0, 41, 42, 5, 45, 0, 0, 42, 43, 5, 45, 0, 0, 43, 45, 5, 62, 0, 0, 44, 37, 1, 0, 0, 0, 44, 39, 1, 0, 0, 0, 44, 41, 1, 0, 0, 0, 45, 12, 1, 0, 0, 0, 46, 47, 5, 61, 0, 0, 47, 57, 5, 61, 0, 0, 48, 49, 5, 33, 0, 0, 49, 57, 5, 61, 0, 0, 50, 51, 5, 62, 0, 0, 51, 57, 5, 61, 0, 0, 52, 57, 5, 62, 0, 0, 53, 54, 5, 60, 0, 0, 54, 57, 5, 61, 0, 0, 55, 57, 5, 60, 0, 0, 56, 46, 1, 0, 0, 0, 56, 48, 1, 0, 0, 0, 56, 50, 1, 0, 0, 0, 56, 52, 1, 0, 0, 0, 56, 53, 1, 0, 0, 0, 56, 55, 1, 0, 0, 0, 57, 14, 1, 0, 0, 0, 58, 59, 7, 0, 0, 0, 59, 16, 1, 0, 0, 0, 60, 61, 5, 116, 0, 0, 61, 62, 5, 114, 0, 0, 62, 63, 5, 117, 0, 0, 63, 70, 5, 101, 0, 0, 64, 65, 5, 102, 0, 0, 65, 66, 5, 97, 0, 0, 66, 67, 5, 108, 0, 0, 67, 68, 5, 115, 0, 0, 68, 70, 5, 101, 0, 0, 69, 60, 1, 0, 0, 0, 69, 64, 1, 0, 0, 0, 70, 18, 1, 0, 0, 0, 71, 75, 7, 1, 0, 0, 72, 74, 7, 2, 0, 0, 73, 72, 1, 0, 0, 0, 74, 77, 1, 0, 0, 0, 75, 73, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 20, 1, 0, 0, 0, 77, 75, 1, 0, 0, 0, 78, 80, 5, 35, 0, 0, 79, 78, 1, 0, 0, 0, 80, 83, 1, 0, 0, 0, 81, 79, 1, 0, 0, 0, 81, 82, 1, 0, 0, 0, 82, 84, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 84, 88, 7, 3, 0, 0, 85, 87, 7, 4, 0, 0, 86, 85, 1, 0, 0, 0, 87, 90, 1, 0, 0, 0, 88, 86, 1, 0, 0, 0, 88, 89, 1, 0, 0, 0, 89, 22, 1, 0, 0, 0, 90, 88, 1, 0, 0, 0, 91, 93, 7, 5, 0, 0, 92, 91, 1, 0, 0, 0, 93, 94, 1, 0, 0, 0, 94, 92, 1, 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 113, 1, 0, 0, 0, 96, 98, 7, 5, 0, 0, 97, 96, 1, 0, 0, 0, 98, 99, 1, 0, 0, 0, 99, 97, 1, 0, 0, 0, 99, 100, 1, 0, 0, 0, 100, 109, 1, 0, 0, 0, 101, 103, 5, 95, 0, 0, 102, 104, 7, 5, 0, 0, 103, 102, 1, 0, 0, 0, 104, 105, 1, 0, 0, 0, 105, 103, 1, 0, 0, 0, 105, 106, 1, 0, 0, 0, 106, 108, 1, 0, 0, 0, 107, 101, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 113, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 92, 1, 0, 0, 0, 112, 97, 1, 0, 0, 0, 113, 24, 1, 0, 0, 0, 114, 116, 7, 6, 0, 0, 115, 114, 1, 0, 0, 0, 116, 117, 1, 0, 0, 0, 117, 115, 1, 0, 0, 0, 117, 118, 1, 0, 0, 0, 118, 119, 1, 0, 0, 0, 119, 120, 6, 12, 0, 0, 120, 26, 1, 0, 0, 0, 13, 0, 44, 56, 69, 75, 81, 88, 94, 99, 105, 109, 112, 117, 1, 0, 1, 0] \ No newline at end of file diff --git a/latte/src/main/java/refinements/.antlr/RefinementsLanguageLexer.java b/latte/src/main/java/refinements/.antlr/RefinementsLanguageLexer.java new file mode 100644 index 0000000..cef7c64 --- /dev/null +++ b/latte/src/main/java/refinements/.antlr/RefinementsLanguageLexer.java @@ -0,0 +1,190 @@ +// Generated from /Users/cgamboa/git/latte/latte/src/main/java/refinements/RefinementsLanguage.g4 by ANTLR 4.13.1 +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"}) +public class RefinementsLanguageLexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, LOGOP=6, BOOLOP=7, ARITHOP=8, + BOOL=9, ID_UPPER=10, ID=11, INT=12, WS=13; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static String[] modeNames = { + "DEFAULT_MODE" + }; + + private static String[] makeRuleNames() { + return new String[] { + "T__0", "T__1", "T__2", "T__3", "T__4", "LOGOP", "BOOLOP", "ARITHOP", + "BOOL", "ID_UPPER", "ID", "INT", "WS" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "'('", "')'", "'!'", "'-'", "'.'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, null, null, null, null, null, "LOGOP", "BOOLOP", "ARITHOP", "BOOL", + "ID_UPPER", "ID", "INT", "WS" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + public RefinementsLanguageLexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "RefinementsLanguage.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + public static final String _serializedATN = + "\u0004\u0000\ry\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ + "\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+ + "\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+ + "\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+ + "\u0007\u000b\u0002\f\u0007\f\u0001\u0000\u0001\u0000\u0001\u0001\u0001"+ + "\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001"+ + "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001"+ + "\u0005\u0001\u0005\u0003\u0005-\b\u0005\u0001\u0006\u0001\u0006\u0001"+ + "\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001"+ + "\u0006\u0001\u0006\u0003\u00069\b\u0006\u0001\u0007\u0001\u0007\u0001"+ + "\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0003"+ + "\bF\b\b\u0001\t\u0001\t\u0005\tJ\b\t\n\t\f\tM\t\t\u0001\n\u0005\nP\b\n"+ + "\n\n\f\nS\t\n\u0001\n\u0001\n\u0005\nW\b\n\n\n\f\nZ\t\n\u0001\u000b\u0004"+ + "\u000b]\b\u000b\u000b\u000b\f\u000b^\u0001\u000b\u0004\u000bb\b\u000b"+ + "\u000b\u000b\f\u000bc\u0001\u000b\u0001\u000b\u0004\u000bh\b\u000b\u000b"+ + "\u000b\f\u000bi\u0005\u000bl\b\u000b\n\u000b\f\u000bo\t\u000b\u0003\u000b"+ + "q\b\u000b\u0001\f\u0004\ft\b\f\u000b\f\f\fu\u0001\f\u0001\f\u0000\u0000"+ + "\r\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006"+ + "\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u0001\u0000"+ + "\u0007\u0003\u0000%%*+//\u0001\u0000AZ\u0003\u000009AZaz\u0003\u0000A"+ + "Z__az\u0005\u0000##09AZ__az\u0001\u000009\u0003\u0000\t\n\r\r \u0089"+ + "\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0000"+ + "\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000\u0000"+ + "\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000\u0000"+ + "\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000\u0011"+ + "\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000\u0015"+ + "\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000\u0019"+ + "\u0001\u0000\u0000\u0000\u0001\u001b\u0001\u0000\u0000\u0000\u0003\u001d"+ + "\u0001\u0000\u0000\u0000\u0005\u001f\u0001\u0000\u0000\u0000\u0007!\u0001"+ + "\u0000\u0000\u0000\t#\u0001\u0000\u0000\u0000\u000b,\u0001\u0000\u0000"+ + "\u0000\r8\u0001\u0000\u0000\u0000\u000f:\u0001\u0000\u0000\u0000\u0011"+ + "E\u0001\u0000\u0000\u0000\u0013G\u0001\u0000\u0000\u0000\u0015Q\u0001"+ + "\u0000\u0000\u0000\u0017p\u0001\u0000\u0000\u0000\u0019s\u0001\u0000\u0000"+ + "\u0000\u001b\u001c\u0005(\u0000\u0000\u001c\u0002\u0001\u0000\u0000\u0000"+ + "\u001d\u001e\u0005)\u0000\u0000\u001e\u0004\u0001\u0000\u0000\u0000\u001f"+ + " \u0005!\u0000\u0000 \u0006\u0001\u0000\u0000\u0000!\"\u0005-\u0000\u0000"+ + "\"\b\u0001\u0000\u0000\u0000#$\u0005.\u0000\u0000$\n\u0001\u0000\u0000"+ + "\u0000%&\u0005&\u0000\u0000&-\u0005&\u0000\u0000\'(\u0005|\u0000\u0000"+ + "(-\u0005|\u0000\u0000)*\u0005-\u0000\u0000*+\u0005-\u0000\u0000+-\u0005"+ + ">\u0000\u0000,%\u0001\u0000\u0000\u0000,\'\u0001\u0000\u0000\u0000,)\u0001"+ + "\u0000\u0000\u0000-\f\u0001\u0000\u0000\u0000./\u0005=\u0000\u0000/9\u0005"+ + "=\u0000\u000001\u0005!\u0000\u000019\u0005=\u0000\u000023\u0005>\u0000"+ + "\u000039\u0005=\u0000\u000049\u0005>\u0000\u000056\u0005<\u0000\u0000"+ + "69\u0005=\u0000\u000079\u0005<\u0000\u00008.\u0001\u0000\u0000\u00008"+ + "0\u0001\u0000\u0000\u000082\u0001\u0000\u0000\u000084\u0001\u0000\u0000"+ + "\u000085\u0001\u0000\u0000\u000087\u0001\u0000\u0000\u00009\u000e\u0001"+ + "\u0000\u0000\u0000:;\u0007\u0000\u0000\u0000;\u0010\u0001\u0000\u0000"+ + "\u0000<=\u0005t\u0000\u0000=>\u0005r\u0000\u0000>?\u0005u\u0000\u0000"+ + "?F\u0005e\u0000\u0000@A\u0005f\u0000\u0000AB\u0005a\u0000\u0000BC\u0005"+ + "l\u0000\u0000CD\u0005s\u0000\u0000DF\u0005e\u0000\u0000E<\u0001\u0000"+ + "\u0000\u0000E@\u0001\u0000\u0000\u0000F\u0012\u0001\u0000\u0000\u0000"+ + "GK\u0007\u0001\u0000\u0000HJ\u0007\u0002\u0000\u0000IH\u0001\u0000\u0000"+ + "\u0000JM\u0001\u0000\u0000\u0000KI\u0001\u0000\u0000\u0000KL\u0001\u0000"+ + "\u0000\u0000L\u0014\u0001\u0000\u0000\u0000MK\u0001\u0000\u0000\u0000"+ + "NP\u0005#\u0000\u0000ON\u0001\u0000\u0000\u0000PS\u0001\u0000\u0000\u0000"+ + "QO\u0001\u0000\u0000\u0000QR\u0001\u0000\u0000\u0000RT\u0001\u0000\u0000"+ + "\u0000SQ\u0001\u0000\u0000\u0000TX\u0007\u0003\u0000\u0000UW\u0007\u0004"+ + "\u0000\u0000VU\u0001\u0000\u0000\u0000WZ\u0001\u0000\u0000\u0000XV\u0001"+ + "\u0000\u0000\u0000XY\u0001\u0000\u0000\u0000Y\u0016\u0001\u0000\u0000"+ + "\u0000ZX\u0001\u0000\u0000\u0000[]\u0007\u0005\u0000\u0000\\[\u0001\u0000"+ + "\u0000\u0000]^\u0001\u0000\u0000\u0000^\\\u0001\u0000\u0000\u0000^_\u0001"+ + "\u0000\u0000\u0000_q\u0001\u0000\u0000\u0000`b\u0007\u0005\u0000\u0000"+ + "a`\u0001\u0000\u0000\u0000bc\u0001\u0000\u0000\u0000ca\u0001\u0000\u0000"+ + "\u0000cd\u0001\u0000\u0000\u0000dm\u0001\u0000\u0000\u0000eg\u0005_\u0000"+ + "\u0000fh\u0007\u0005\u0000\u0000gf\u0001\u0000\u0000\u0000hi\u0001\u0000"+ + "\u0000\u0000ig\u0001\u0000\u0000\u0000ij\u0001\u0000\u0000\u0000jl\u0001"+ + "\u0000\u0000\u0000ke\u0001\u0000\u0000\u0000lo\u0001\u0000\u0000\u0000"+ + "mk\u0001\u0000\u0000\u0000mn\u0001\u0000\u0000\u0000nq\u0001\u0000\u0000"+ + "\u0000om\u0001\u0000\u0000\u0000p\\\u0001\u0000\u0000\u0000pa\u0001\u0000"+ + "\u0000\u0000q\u0018\u0001\u0000\u0000\u0000rt\u0007\u0006\u0000\u0000"+ + "sr\u0001\u0000\u0000\u0000tu\u0001\u0000\u0000\u0000us\u0001\u0000\u0000"+ + "\u0000uv\u0001\u0000\u0000\u0000vw\u0001\u0000\u0000\u0000wx\u0006\f\u0000"+ + "\u0000x\u001a\u0001\u0000\u0000\u0000\r\u0000,8EKQX^cimpu\u0001\u0000"+ + "\u0001\u0000"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/latte/src/main/java/refinements/.antlr/RefinementsLanguageLexer.tokens b/latte/src/main/java/refinements/.antlr/RefinementsLanguageLexer.tokens new file mode 100644 index 0000000..91471e1 --- /dev/null +++ b/latte/src/main/java/refinements/.antlr/RefinementsLanguageLexer.tokens @@ -0,0 +1,18 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T__4=5 +LOGOP=6 +BOOLOP=7 +ARITHOP=8 +BOOL=9 +ID_UPPER=10 +ID=11 +INT=12 +WS=13 +'('=1 +')'=2 +'!'=3 +'-'=4 +'.'=5 diff --git a/latte/src/main/java/refinements/.antlr/RefinementsLanguageParser.java b/latte/src/main/java/refinements/.antlr/RefinementsLanguageParser.java new file mode 100644 index 0000000..bdb6149 --- /dev/null +++ b/latte/src/main/java/refinements/.antlr/RefinementsLanguageParser.java @@ -0,0 +1,861 @@ +// Generated from /Users/cgamboa/git/latte/latte/src/main/java/refinements/RefinementsLanguage.g4 by ANTLR 4.13.1 +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.v4.runtime.tree.*; +import java.util.List; +import java.util.Iterator; +import java.util.ArrayList; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) +public class RefinementsLanguageParser extends Parser { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, LOGOP=6, BOOLOP=7, ARITHOP=8, + BOOL=9, ID_UPPER=10, ID=11, INT=12, WS=13; + public static final int + RULE_prog = 0, RULE_start = 1, RULE_pred = 2, RULE_exp = 3, RULE_operand = 4, + RULE_literalExpression = 5, RULE_literal = 6; + private static String[] makeRuleNames() { + return new String[] { + "prog", "start", "pred", "exp", "operand", "literalExpression", "literal" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "'('", "')'", "'!'", "'-'", "'.'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, null, null, null, null, null, "LOGOP", "BOOLOP", "ARITHOP", "BOOL", + "ID_UPPER", "ID", "INT", "WS" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + @Override + public String getGrammarFileName() { return "RefinementsLanguage.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public ATN getATN() { return _ATN; } + + public RefinementsLanguageParser(TokenStream input) { + super(input); + _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @SuppressWarnings("CheckReturnValue") + public static class ProgContext extends ParserRuleContext { + public StartContext start() { + return getRuleContext(StartContext.class,0); + } + public ProgContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_prog; } + } + + public final ProgContext prog() throws RecognitionException { + ProgContext _localctx = new ProgContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_prog); + try { + setState(16); + _errHandler.sync(this); + switch (_input.LA(1)) { + case T__0: + case T__2: + case T__3: + case BOOL: + case ID: + case INT: + enterOuterAlt(_localctx, 1); + { + setState(14); + start(); + } + break; + case EOF: + enterOuterAlt(_localctx, 2); + { + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class StartContext extends ParserRuleContext { + public StartContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_start; } + + public StartContext() { } + public void copyFrom(StartContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class StartPredContext extends StartContext { + public PredContext pred() { + return getRuleContext(PredContext.class,0); + } + public StartPredContext(StartContext ctx) { copyFrom(ctx); } + } + + public final StartContext start() throws RecognitionException { + StartContext _localctx = new StartContext(_ctx, getState()); + enterRule(_localctx, 2, RULE_start); + try { + _localctx = new StartPredContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(18); + pred(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PredContext extends ParserRuleContext { + public PredContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_pred; } + + public PredContext() { } + public void copyFrom(PredContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class PredGroupContext extends PredContext { + public PredContext pred() { + return getRuleContext(PredContext.class,0); + } + public PredGroupContext(PredContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class PredNegateContext extends PredContext { + public PredContext pred() { + return getRuleContext(PredContext.class,0); + } + public PredNegateContext(PredContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class PredExpContext extends PredContext { + public ExpContext exp() { + return getRuleContext(ExpContext.class,0); + } + public PredExpContext(PredContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class PredLogicContext extends PredContext { + public List pred() { + return getRuleContexts(PredContext.class); + } + public PredContext pred(int i) { + return getRuleContext(PredContext.class,i); + } + public TerminalNode LOGOP() { return getToken(RefinementsLanguageParser.LOGOP, 0); } + public PredLogicContext(PredContext ctx) { copyFrom(ctx); } + } + + public final PredContext pred() throws RecognitionException { + return pred(0); + } + + private PredContext pred(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + PredContext _localctx = new PredContext(_ctx, _parentState); + PredContext _prevctx = _localctx; + int _startState = 4; + enterRecursionRule(_localctx, 4, RULE_pred, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(28); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,1,_ctx) ) { + case 1: + { + _localctx = new PredGroupContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(21); + match(T__0); + setState(22); + pred(0); + setState(23); + match(T__1); + } + break; + case 2: + { + _localctx = new PredNegateContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(25); + match(T__2); + setState(26); + pred(3); + } + break; + case 3: + { + _localctx = new PredExpContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(27); + exp(0); + } + break; + } + _ctx.stop = _input.LT(-1); + setState(35); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,2,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new PredLogicContext(new PredContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_pred); + setState(30); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(31); + match(LOGOP); + setState(32); + pred(3); + } + } + } + setState(37); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,2,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ExpContext extends ParserRuleContext { + public ExpContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_exp; } + + public ExpContext() { } + public void copyFrom(ExpContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ExpBoolContext extends ExpContext { + public List exp() { + return getRuleContexts(ExpContext.class); + } + public ExpContext exp(int i) { + return getRuleContext(ExpContext.class,i); + } + public TerminalNode BOOLOP() { return getToken(RefinementsLanguageParser.BOOLOP, 0); } + public ExpBoolContext(ExpContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class ExpOperandContext extends ExpContext { + public OperandContext operand() { + return getRuleContext(OperandContext.class,0); + } + public ExpOperandContext(ExpContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class ExpGroupContext extends ExpContext { + public ExpContext exp() { + return getRuleContext(ExpContext.class,0); + } + public ExpGroupContext(ExpContext ctx) { copyFrom(ctx); } + } + + public final ExpContext exp() throws RecognitionException { + return exp(0); + } + + private ExpContext exp(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + ExpContext _localctx = new ExpContext(_ctx, _parentState); + ExpContext _prevctx = _localctx; + int _startState = 6; + enterRecursionRule(_localctx, 6, RULE_exp, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(44); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,3,_ctx) ) { + case 1: + { + _localctx = new ExpGroupContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(39); + match(T__0); + setState(40); + exp(0); + setState(41); + match(T__1); + } + break; + case 2: + { + _localctx = new ExpOperandContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(43); + operand(0); + } + break; + } + _ctx.stop = _input.LT(-1); + setState(51); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,4,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new ExpBoolContext(new ExpContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_exp); + setState(46); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(47); + match(BOOLOP); + setState(48); + exp(3); + } + } + } + setState(53); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,4,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class OperandContext extends ParserRuleContext { + public OperandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_operand; } + + public OperandContext() { } + public void copyFrom(OperandContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class OpArithContext extends OperandContext { + public List operand() { + return getRuleContexts(OperandContext.class); + } + public OperandContext operand(int i) { + return getRuleContext(OperandContext.class,i); + } + public TerminalNode ARITHOP() { return getToken(RefinementsLanguageParser.ARITHOP, 0); } + public OpArithContext(OperandContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class OpNotContext extends OperandContext { + public OperandContext operand() { + return getRuleContext(OperandContext.class,0); + } + public OpNotContext(OperandContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class OpLiteralContext extends OperandContext { + public LiteralExpressionContext literalExpression() { + return getRuleContext(LiteralExpressionContext.class,0); + } + public OpLiteralContext(OperandContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class OpGroupContext extends OperandContext { + public OperandContext operand() { + return getRuleContext(OperandContext.class,0); + } + public OpGroupContext(OperandContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class OpMinusContext extends OperandContext { + public OperandContext operand() { + return getRuleContext(OperandContext.class,0); + } + public OpMinusContext(OperandContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class OpSubContext extends OperandContext { + public List operand() { + return getRuleContexts(OperandContext.class); + } + public OperandContext operand(int i) { + return getRuleContext(OperandContext.class,i); + } + public OpSubContext(OperandContext ctx) { copyFrom(ctx); } + } + + public final OperandContext operand() throws RecognitionException { + return operand(0); + } + + private OperandContext operand(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + OperandContext _localctx = new OperandContext(_ctx, _parentState); + OperandContext _prevctx = _localctx; + int _startState = 8; + enterRecursionRule(_localctx, 8, RULE_operand, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(64); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,5,_ctx) ) { + case 1: + { + _localctx = new OpLiteralContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(55); + literalExpression(); + } + break; + case 2: + { + _localctx = new OpMinusContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(56); + match(T__3); + setState(57); + operand(3); + } + break; + case 3: + { + _localctx = new OpNotContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(58); + match(T__2); + setState(59); + operand(2); + } + break; + case 4: + { + _localctx = new OpGroupContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(60); + match(T__0); + setState(61); + operand(0); + setState(62); + match(T__1); + } + break; + } + _ctx.stop = _input.LT(-1); + setState(74); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,7,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + setState(72); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) { + case 1: + { + _localctx = new OpArithContext(new OperandContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_operand); + setState(66); + if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)"); + setState(67); + match(ARITHOP); + setState(68); + operand(6); + } + break; + case 2: + { + _localctx = new OpSubContext(new OperandContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_operand); + setState(69); + if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)"); + setState(70); + match(T__3); + setState(71); + operand(5); + } + break; + } + } + } + setState(76); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,7,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LiteralExpressionContext extends ParserRuleContext { + public LiteralExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_literalExpression; } + + public LiteralExpressionContext() { } + public void copyFrom(LiteralExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class TargetInvocationContext extends LiteralExpressionContext { + public List ID() { return getTokens(RefinementsLanguageParser.ID); } + public TerminalNode ID(int i) { + return getToken(RefinementsLanguageParser.ID, i); + } + public TargetInvocationContext(LiteralExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class LitGroupContext extends LiteralExpressionContext { + public LiteralExpressionContext literalExpression() { + return getRuleContext(LiteralExpressionContext.class,0); + } + public LitGroupContext(LiteralExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class LitContext extends LiteralExpressionContext { + public LiteralContext literal() { + return getRuleContext(LiteralContext.class,0); + } + public LitContext(LiteralExpressionContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class VarContext extends LiteralExpressionContext { + public TerminalNode ID() { return getToken(RefinementsLanguageParser.ID, 0); } + public VarContext(LiteralExpressionContext ctx) { copyFrom(ctx); } + } + + public final LiteralExpressionContext literalExpression() throws RecognitionException { + LiteralExpressionContext _localctx = new LiteralExpressionContext(_ctx, getState()); + enterRule(_localctx, 10, RULE_literalExpression); + try { + setState(86); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,8,_ctx) ) { + case 1: + _localctx = new LitGroupContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(77); + match(T__0); + setState(78); + literalExpression(); + setState(79); + match(T__1); + } + break; + case 2: + _localctx = new LitContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(81); + literal(); + } + break; + case 3: + _localctx = new VarContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(82); + match(ID); + } + break; + case 4: + _localctx = new TargetInvocationContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(83); + match(ID); + setState(84); + match(T__4); + setState(85); + match(ID); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LiteralContext extends ParserRuleContext { + public TerminalNode BOOL() { return getToken(RefinementsLanguageParser.BOOL, 0); } + public TerminalNode INT() { return getToken(RefinementsLanguageParser.INT, 0); } + public LiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_literal; } + } + + public final LiteralContext literal() throws RecognitionException { + LiteralContext _localctx = new LiteralContext(_ctx, getState()); + enterRule(_localctx, 12, RULE_literal); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(88); + _la = _input.LA(1); + if ( !(_la==BOOL || _la==INT) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + switch (ruleIndex) { + case 2: + return pred_sempred((PredContext)_localctx, predIndex); + case 3: + return exp_sempred((ExpContext)_localctx, predIndex); + case 4: + return operand_sempred((OperandContext)_localctx, predIndex); + } + return true; + } + private boolean pred_sempred(PredContext _localctx, int predIndex) { + switch (predIndex) { + case 0: + return precpred(_ctx, 2); + } + return true; + } + private boolean exp_sempred(ExpContext _localctx, int predIndex) { + switch (predIndex) { + case 1: + return precpred(_ctx, 2); + } + return true; + } + private boolean operand_sempred(OperandContext _localctx, int predIndex) { + switch (predIndex) { + case 2: + return precpred(_ctx, 5); + case 3: + return precpred(_ctx, 4); + } + return true; + } + + public static final String _serializedATN = + "\u0004\u0001\r[\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ + "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0001\u0000\u0001\u0000\u0003"+ + "\u0000\u0011\b\u0000\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001"+ + "\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0003"+ + "\u0002\u001d\b\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0005\u0002\""+ + "\b\u0002\n\u0002\f\u0002%\t\u0002\u0001\u0003\u0001\u0003\u0001\u0003"+ + "\u0001\u0003\u0001\u0003\u0001\u0003\u0003\u0003-\b\u0003\u0001\u0003"+ + "\u0001\u0003\u0001\u0003\u0005\u00032\b\u0003\n\u0003\f\u00035\t\u0003"+ + "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004"+ + "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0003\u0004A\b\u0004"+ + "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004"+ + "\u0005\u0004I\b\u0004\n\u0004\f\u0004L\t\u0004\u0001\u0005\u0001\u0005"+ + "\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005"+ + "\u0001\u0005\u0003\u0005W\b\u0005\u0001\u0006\u0001\u0006\u0001\u0006"+ + "\u0000\u0003\u0004\u0006\b\u0007\u0000\u0002\u0004\u0006\b\n\f\u0000\u0001"+ + "\u0002\u0000\t\t\f\fa\u0000\u0010\u0001\u0000\u0000\u0000\u0002\u0012"+ + "\u0001\u0000\u0000\u0000\u0004\u001c\u0001\u0000\u0000\u0000\u0006,\u0001"+ + "\u0000\u0000\u0000\b@\u0001\u0000\u0000\u0000\nV\u0001\u0000\u0000\u0000"+ + "\fX\u0001\u0000\u0000\u0000\u000e\u0011\u0003\u0002\u0001\u0000\u000f"+ + "\u0011\u0001\u0000\u0000\u0000\u0010\u000e\u0001\u0000\u0000\u0000\u0010"+ + "\u000f\u0001\u0000\u0000\u0000\u0011\u0001\u0001\u0000\u0000\u0000\u0012"+ + "\u0013\u0003\u0004\u0002\u0000\u0013\u0003\u0001\u0000\u0000\u0000\u0014"+ + "\u0015\u0006\u0002\uffff\uffff\u0000\u0015\u0016\u0005\u0001\u0000\u0000"+ + "\u0016\u0017\u0003\u0004\u0002\u0000\u0017\u0018\u0005\u0002\u0000\u0000"+ + "\u0018\u001d\u0001\u0000\u0000\u0000\u0019\u001a\u0005\u0003\u0000\u0000"+ + "\u001a\u001d\u0003\u0004\u0002\u0003\u001b\u001d\u0003\u0006\u0003\u0000"+ + "\u001c\u0014\u0001\u0000\u0000\u0000\u001c\u0019\u0001\u0000\u0000\u0000"+ + "\u001c\u001b\u0001\u0000\u0000\u0000\u001d#\u0001\u0000\u0000\u0000\u001e"+ + "\u001f\n\u0002\u0000\u0000\u001f \u0005\u0006\u0000\u0000 \"\u0003\u0004"+ + "\u0002\u0003!\u001e\u0001\u0000\u0000\u0000\"%\u0001\u0000\u0000\u0000"+ + "#!\u0001\u0000\u0000\u0000#$\u0001\u0000\u0000\u0000$\u0005\u0001\u0000"+ + "\u0000\u0000%#\u0001\u0000\u0000\u0000&\'\u0006\u0003\uffff\uffff\u0000"+ + "\'(\u0005\u0001\u0000\u0000()\u0003\u0006\u0003\u0000)*\u0005\u0002\u0000"+ + "\u0000*-\u0001\u0000\u0000\u0000+-\u0003\b\u0004\u0000,&\u0001\u0000\u0000"+ + "\u0000,+\u0001\u0000\u0000\u0000-3\u0001\u0000\u0000\u0000./\n\u0002\u0000"+ + "\u0000/0\u0005\u0007\u0000\u000002\u0003\u0006\u0003\u00031.\u0001\u0000"+ + "\u0000\u000025\u0001\u0000\u0000\u000031\u0001\u0000\u0000\u000034\u0001"+ + "\u0000\u0000\u00004\u0007\u0001\u0000\u0000\u000053\u0001\u0000\u0000"+ + "\u000067\u0006\u0004\uffff\uffff\u00007A\u0003\n\u0005\u000089\u0005\u0004"+ + "\u0000\u00009A\u0003\b\u0004\u0003:;\u0005\u0003\u0000\u0000;A\u0003\b"+ + "\u0004\u0002<=\u0005\u0001\u0000\u0000=>\u0003\b\u0004\u0000>?\u0005\u0002"+ + "\u0000\u0000?A\u0001\u0000\u0000\u0000@6\u0001\u0000\u0000\u0000@8\u0001"+ + "\u0000\u0000\u0000@:\u0001\u0000\u0000\u0000@<\u0001\u0000\u0000\u0000"+ + "AJ\u0001\u0000\u0000\u0000BC\n\u0005\u0000\u0000CD\u0005\b\u0000\u0000"+ + "DI\u0003\b\u0004\u0006EF\n\u0004\u0000\u0000FG\u0005\u0004\u0000\u0000"+ + "GI\u0003\b\u0004\u0005HB\u0001\u0000\u0000\u0000HE\u0001\u0000\u0000\u0000"+ + "IL\u0001\u0000\u0000\u0000JH\u0001\u0000\u0000\u0000JK\u0001\u0000\u0000"+ + "\u0000K\t\u0001\u0000\u0000\u0000LJ\u0001\u0000\u0000\u0000MN\u0005\u0001"+ + "\u0000\u0000NO\u0003\n\u0005\u0000OP\u0005\u0002\u0000\u0000PW\u0001\u0000"+ + "\u0000\u0000QW\u0003\f\u0006\u0000RW\u0005\u000b\u0000\u0000ST\u0005\u000b"+ + "\u0000\u0000TU\u0005\u0005\u0000\u0000UW\u0005\u000b\u0000\u0000VM\u0001"+ + "\u0000\u0000\u0000VQ\u0001\u0000\u0000\u0000VR\u0001\u0000\u0000\u0000"+ + "VS\u0001\u0000\u0000\u0000W\u000b\u0001\u0000\u0000\u0000XY\u0007\u0000"+ + "\u0000\u0000Y\r\u0001\u0000\u0000\u0000\t\u0010\u001c#,3@HJV"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/latte/src/main/java/refinements/RefinementsLanguage.interp b/latte/src/main/java/refinements/RefinementsLanguage.interp new file mode 100644 index 0000000..965ad9b --- /dev/null +++ b/latte/src/main/java/refinements/RefinementsLanguage.interp @@ -0,0 +1,44 @@ +token literal names: +null +'(' +')' +'!' +'-' +'.' +null +null +null +null +null +null +null +null + +token symbolic names: +null +null +null +null +null +null +LOGOP +BOOLOP +ARITHOP +BOOL +ID_UPPER +ID +INT +WS + +rule names: +prog +start +pred +exp +operand +literalExpression +literal + + +atn: +[4, 1, 13, 91, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 1, 0, 1, 0, 3, 0, 17, 8, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 29, 8, 2, 1, 2, 1, 2, 1, 2, 5, 2, 34, 8, 2, 10, 2, 12, 2, 37, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 45, 8, 3, 1, 3, 1, 3, 1, 3, 5, 3, 50, 8, 3, 10, 3, 12, 3, 53, 9, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 65, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 73, 8, 4, 10, 4, 12, 4, 76, 9, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 87, 8, 5, 1, 6, 1, 6, 1, 6, 0, 3, 4, 6, 8, 7, 0, 2, 4, 6, 8, 10, 12, 0, 1, 2, 0, 9, 9, 12, 12, 97, 0, 16, 1, 0, 0, 0, 2, 18, 1, 0, 0, 0, 4, 28, 1, 0, 0, 0, 6, 44, 1, 0, 0, 0, 8, 64, 1, 0, 0, 0, 10, 86, 1, 0, 0, 0, 12, 88, 1, 0, 0, 0, 14, 17, 3, 2, 1, 0, 15, 17, 1, 0, 0, 0, 16, 14, 1, 0, 0, 0, 16, 15, 1, 0, 0, 0, 17, 1, 1, 0, 0, 0, 18, 19, 3, 4, 2, 0, 19, 3, 1, 0, 0, 0, 20, 21, 6, 2, -1, 0, 21, 22, 5, 1, 0, 0, 22, 23, 3, 4, 2, 0, 23, 24, 5, 2, 0, 0, 24, 29, 1, 0, 0, 0, 25, 26, 5, 3, 0, 0, 26, 29, 3, 4, 2, 3, 27, 29, 3, 6, 3, 0, 28, 20, 1, 0, 0, 0, 28, 25, 1, 0, 0, 0, 28, 27, 1, 0, 0, 0, 29, 35, 1, 0, 0, 0, 30, 31, 10, 2, 0, 0, 31, 32, 5, 6, 0, 0, 32, 34, 3, 4, 2, 3, 33, 30, 1, 0, 0, 0, 34, 37, 1, 0, 0, 0, 35, 33, 1, 0, 0, 0, 35, 36, 1, 0, 0, 0, 36, 5, 1, 0, 0, 0, 37, 35, 1, 0, 0, 0, 38, 39, 6, 3, -1, 0, 39, 40, 5, 1, 0, 0, 40, 41, 3, 6, 3, 0, 41, 42, 5, 2, 0, 0, 42, 45, 1, 0, 0, 0, 43, 45, 3, 8, 4, 0, 44, 38, 1, 0, 0, 0, 44, 43, 1, 0, 0, 0, 45, 51, 1, 0, 0, 0, 46, 47, 10, 2, 0, 0, 47, 48, 5, 7, 0, 0, 48, 50, 3, 6, 3, 3, 49, 46, 1, 0, 0, 0, 50, 53, 1, 0, 0, 0, 51, 49, 1, 0, 0, 0, 51, 52, 1, 0, 0, 0, 52, 7, 1, 0, 0, 0, 53, 51, 1, 0, 0, 0, 54, 55, 6, 4, -1, 0, 55, 65, 3, 10, 5, 0, 56, 57, 5, 4, 0, 0, 57, 65, 3, 8, 4, 3, 58, 59, 5, 3, 0, 0, 59, 65, 3, 8, 4, 2, 60, 61, 5, 1, 0, 0, 61, 62, 3, 8, 4, 0, 62, 63, 5, 2, 0, 0, 63, 65, 1, 0, 0, 0, 64, 54, 1, 0, 0, 0, 64, 56, 1, 0, 0, 0, 64, 58, 1, 0, 0, 0, 64, 60, 1, 0, 0, 0, 65, 74, 1, 0, 0, 0, 66, 67, 10, 5, 0, 0, 67, 68, 5, 8, 0, 0, 68, 73, 3, 8, 4, 6, 69, 70, 10, 4, 0, 0, 70, 71, 5, 4, 0, 0, 71, 73, 3, 8, 4, 5, 72, 66, 1, 0, 0, 0, 72, 69, 1, 0, 0, 0, 73, 76, 1, 0, 0, 0, 74, 72, 1, 0, 0, 0, 74, 75, 1, 0, 0, 0, 75, 9, 1, 0, 0, 0, 76, 74, 1, 0, 0, 0, 77, 78, 5, 1, 0, 0, 78, 79, 3, 10, 5, 0, 79, 80, 5, 2, 0, 0, 80, 87, 1, 0, 0, 0, 81, 87, 3, 12, 6, 0, 82, 87, 5, 11, 0, 0, 83, 84, 5, 11, 0, 0, 84, 85, 5, 5, 0, 0, 85, 87, 5, 11, 0, 0, 86, 77, 1, 0, 0, 0, 86, 81, 1, 0, 0, 0, 86, 82, 1, 0, 0, 0, 86, 83, 1, 0, 0, 0, 87, 11, 1, 0, 0, 0, 88, 89, 7, 0, 0, 0, 89, 13, 1, 0, 0, 0, 9, 16, 28, 35, 44, 51, 64, 72, 74, 86] \ No newline at end of file diff --git a/latte/src/main/java/refinements/RefinementsLanguage.tokens b/latte/src/main/java/refinements/RefinementsLanguage.tokens new file mode 100644 index 0000000..91471e1 --- /dev/null +++ b/latte/src/main/java/refinements/RefinementsLanguage.tokens @@ -0,0 +1,18 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T__4=5 +LOGOP=6 +BOOLOP=7 +ARITHOP=8 +BOOL=9 +ID_UPPER=10 +ID=11 +INT=12 +WS=13 +'('=1 +')'=2 +'!'=3 +'-'=4 +'.'=5 diff --git a/latte/src/main/java/refinements/RefinementsLanguageBaseListener.java b/latte/src/main/java/refinements/RefinementsLanguageBaseListener.java new file mode 100644 index 0000000..0972f3f --- /dev/null +++ b/latte/src/main/java/refinements/RefinementsLanguageBaseListener.java @@ -0,0 +1,280 @@ +// Generated from RefinementsLanguage.g4 by ANTLR 4.13.1 +package refinements; + +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.tree.ErrorNode; +import org.antlr.v4.runtime.tree.TerminalNode; + +/** + * This class provides an empty implementation of {@link RefinementsLanguageListener}, + * which can be extended to create a listener which only needs to handle a subset + * of the available methods. + */ +@SuppressWarnings("CheckReturnValue") +public class RefinementsLanguageBaseListener implements RefinementsLanguageListener { + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterProg(RefinementsLanguageParser.ProgContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitProg(RefinementsLanguageParser.ProgContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStartPred(RefinementsLanguageParser.StartPredContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStartPred(RefinementsLanguageParser.StartPredContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPredGroup(RefinementsLanguageParser.PredGroupContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPredGroup(RefinementsLanguageParser.PredGroupContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPredNegate(RefinementsLanguageParser.PredNegateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPredNegate(RefinementsLanguageParser.PredNegateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPredExp(RefinementsLanguageParser.PredExpContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPredExp(RefinementsLanguageParser.PredExpContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPredLogic(RefinementsLanguageParser.PredLogicContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPredLogic(RefinementsLanguageParser.PredLogicContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExpBool(RefinementsLanguageParser.ExpBoolContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExpBool(RefinementsLanguageParser.ExpBoolContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExpOperand(RefinementsLanguageParser.ExpOperandContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExpOperand(RefinementsLanguageParser.ExpOperandContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExpGroup(RefinementsLanguageParser.ExpGroupContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExpGroup(RefinementsLanguageParser.ExpGroupContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOpArith(RefinementsLanguageParser.OpArithContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOpArith(RefinementsLanguageParser.OpArithContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOpNot(RefinementsLanguageParser.OpNotContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOpNot(RefinementsLanguageParser.OpNotContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOpLiteral(RefinementsLanguageParser.OpLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOpLiteral(RefinementsLanguageParser.OpLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOpGroup(RefinementsLanguageParser.OpGroupContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOpGroup(RefinementsLanguageParser.OpGroupContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOpMinus(RefinementsLanguageParser.OpMinusContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOpMinus(RefinementsLanguageParser.OpMinusContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOpSub(RefinementsLanguageParser.OpSubContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOpSub(RefinementsLanguageParser.OpSubContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLitGroup(RefinementsLanguageParser.LitGroupContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLitGroup(RefinementsLanguageParser.LitGroupContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLit(RefinementsLanguageParser.LitContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLit(RefinementsLanguageParser.LitContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterVar(RefinementsLanguageParser.VarContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitVar(RefinementsLanguageParser.VarContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTargetInvocation(RefinementsLanguageParser.TargetInvocationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTargetInvocation(RefinementsLanguageParser.TargetInvocationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLiteral(RefinementsLanguageParser.LiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLiteral(RefinementsLanguageParser.LiteralContext ctx) { } + + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitTerminal(TerminalNode node) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitErrorNode(ErrorNode node) { } +} \ No newline at end of file diff --git a/latte/src/main/java/refinements/RefinementsLanguageBaseVisitor.java b/latte/src/main/java/refinements/RefinementsLanguageBaseVisitor.java new file mode 100644 index 0000000..2829556 --- /dev/null +++ b/latte/src/main/java/refinements/RefinementsLanguageBaseVisitor.java @@ -0,0 +1,155 @@ +// Generated from RefinementsLanguage.g4 by ANTLR 4.13.1 +package refinements; +import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; + +/** + * This class provides an empty implementation of {@link RefinementsLanguageVisitor}, + * which can be extended to create a visitor which only needs to handle a subset + * of the available methods. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +@SuppressWarnings("CheckReturnValue") +public class RefinementsLanguageBaseVisitor extends AbstractParseTreeVisitor implements RefinementsLanguageVisitor { + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitProg(RefinementsLanguageParser.ProgContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStartPred(RefinementsLanguageParser.StartPredContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPredGroup(RefinementsLanguageParser.PredGroupContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPredNegate(RefinementsLanguageParser.PredNegateContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPredExp(RefinementsLanguageParser.PredExpContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPredLogic(RefinementsLanguageParser.PredLogicContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpBool(RefinementsLanguageParser.ExpBoolContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpOperand(RefinementsLanguageParser.ExpOperandContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitExpGroup(RefinementsLanguageParser.ExpGroupContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOpArith(RefinementsLanguageParser.OpArithContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOpNot(RefinementsLanguageParser.OpNotContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOpLiteral(RefinementsLanguageParser.OpLiteralContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOpGroup(RefinementsLanguageParser.OpGroupContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOpMinus(RefinementsLanguageParser.OpMinusContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOpSub(RefinementsLanguageParser.OpSubContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLitGroup(RefinementsLanguageParser.LitGroupContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLit(RefinementsLanguageParser.LitContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitVar(RefinementsLanguageParser.VarContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTargetInvocation(RefinementsLanguageParser.TargetInvocationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLiteral(RefinementsLanguageParser.LiteralContext ctx) { return visitChildren(ctx); } +} \ No newline at end of file diff --git a/latte/src/main/java/refinements/RefinementsLanguageLexer.interp b/latte/src/main/java/refinements/RefinementsLanguageLexer.interp new file mode 100644 index 0000000..026a442 --- /dev/null +++ b/latte/src/main/java/refinements/RefinementsLanguageLexer.interp @@ -0,0 +1,56 @@ +token literal names: +null +'(' +')' +'!' +'-' +'.' +null +null +null +null +null +null +null +null + +token symbolic names: +null +null +null +null +null +null +LOGOP +BOOLOP +ARITHOP +BOOL +ID_UPPER +ID +INT +WS + +rule names: +T__0 +T__1 +T__2 +T__3 +T__4 +LOGOP +BOOLOP +ARITHOP +BOOL +ID_UPPER +ID +INT +WS + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 13, 121, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 45, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 57, 8, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 70, 8, 8, 1, 9, 1, 9, 5, 9, 74, 8, 9, 10, 9, 12, 9, 77, 9, 9, 1, 10, 5, 10, 80, 8, 10, 10, 10, 12, 10, 83, 9, 10, 1, 10, 1, 10, 5, 10, 87, 8, 10, 10, 10, 12, 10, 90, 9, 10, 1, 11, 4, 11, 93, 8, 11, 11, 11, 12, 11, 94, 1, 11, 4, 11, 98, 8, 11, 11, 11, 12, 11, 99, 1, 11, 1, 11, 4, 11, 104, 8, 11, 11, 11, 12, 11, 105, 5, 11, 108, 8, 11, 10, 11, 12, 11, 111, 9, 11, 3, 11, 113, 8, 11, 1, 12, 4, 12, 116, 8, 12, 11, 12, 12, 12, 117, 1, 12, 1, 12, 0, 0, 13, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 1, 0, 7, 3, 0, 37, 37, 42, 43, 47, 47, 1, 0, 65, 90, 3, 0, 48, 57, 65, 90, 97, 122, 3, 0, 65, 90, 95, 95, 97, 122, 5, 0, 35, 35, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 3, 0, 9, 10, 13, 13, 32, 32, 137, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 1, 27, 1, 0, 0, 0, 3, 29, 1, 0, 0, 0, 5, 31, 1, 0, 0, 0, 7, 33, 1, 0, 0, 0, 9, 35, 1, 0, 0, 0, 11, 44, 1, 0, 0, 0, 13, 56, 1, 0, 0, 0, 15, 58, 1, 0, 0, 0, 17, 69, 1, 0, 0, 0, 19, 71, 1, 0, 0, 0, 21, 81, 1, 0, 0, 0, 23, 112, 1, 0, 0, 0, 25, 115, 1, 0, 0, 0, 27, 28, 5, 40, 0, 0, 28, 2, 1, 0, 0, 0, 29, 30, 5, 41, 0, 0, 30, 4, 1, 0, 0, 0, 31, 32, 5, 33, 0, 0, 32, 6, 1, 0, 0, 0, 33, 34, 5, 45, 0, 0, 34, 8, 1, 0, 0, 0, 35, 36, 5, 46, 0, 0, 36, 10, 1, 0, 0, 0, 37, 38, 5, 38, 0, 0, 38, 45, 5, 38, 0, 0, 39, 40, 5, 124, 0, 0, 40, 45, 5, 124, 0, 0, 41, 42, 5, 45, 0, 0, 42, 43, 5, 45, 0, 0, 43, 45, 5, 62, 0, 0, 44, 37, 1, 0, 0, 0, 44, 39, 1, 0, 0, 0, 44, 41, 1, 0, 0, 0, 45, 12, 1, 0, 0, 0, 46, 47, 5, 61, 0, 0, 47, 57, 5, 61, 0, 0, 48, 49, 5, 33, 0, 0, 49, 57, 5, 61, 0, 0, 50, 51, 5, 62, 0, 0, 51, 57, 5, 61, 0, 0, 52, 57, 5, 62, 0, 0, 53, 54, 5, 60, 0, 0, 54, 57, 5, 61, 0, 0, 55, 57, 5, 60, 0, 0, 56, 46, 1, 0, 0, 0, 56, 48, 1, 0, 0, 0, 56, 50, 1, 0, 0, 0, 56, 52, 1, 0, 0, 0, 56, 53, 1, 0, 0, 0, 56, 55, 1, 0, 0, 0, 57, 14, 1, 0, 0, 0, 58, 59, 7, 0, 0, 0, 59, 16, 1, 0, 0, 0, 60, 61, 5, 116, 0, 0, 61, 62, 5, 114, 0, 0, 62, 63, 5, 117, 0, 0, 63, 70, 5, 101, 0, 0, 64, 65, 5, 102, 0, 0, 65, 66, 5, 97, 0, 0, 66, 67, 5, 108, 0, 0, 67, 68, 5, 115, 0, 0, 68, 70, 5, 101, 0, 0, 69, 60, 1, 0, 0, 0, 69, 64, 1, 0, 0, 0, 70, 18, 1, 0, 0, 0, 71, 75, 7, 1, 0, 0, 72, 74, 7, 2, 0, 0, 73, 72, 1, 0, 0, 0, 74, 77, 1, 0, 0, 0, 75, 73, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 20, 1, 0, 0, 0, 77, 75, 1, 0, 0, 0, 78, 80, 5, 35, 0, 0, 79, 78, 1, 0, 0, 0, 80, 83, 1, 0, 0, 0, 81, 79, 1, 0, 0, 0, 81, 82, 1, 0, 0, 0, 82, 84, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 84, 88, 7, 3, 0, 0, 85, 87, 7, 4, 0, 0, 86, 85, 1, 0, 0, 0, 87, 90, 1, 0, 0, 0, 88, 86, 1, 0, 0, 0, 88, 89, 1, 0, 0, 0, 89, 22, 1, 0, 0, 0, 90, 88, 1, 0, 0, 0, 91, 93, 7, 5, 0, 0, 92, 91, 1, 0, 0, 0, 93, 94, 1, 0, 0, 0, 94, 92, 1, 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 113, 1, 0, 0, 0, 96, 98, 7, 5, 0, 0, 97, 96, 1, 0, 0, 0, 98, 99, 1, 0, 0, 0, 99, 97, 1, 0, 0, 0, 99, 100, 1, 0, 0, 0, 100, 109, 1, 0, 0, 0, 101, 103, 5, 95, 0, 0, 102, 104, 7, 5, 0, 0, 103, 102, 1, 0, 0, 0, 104, 105, 1, 0, 0, 0, 105, 103, 1, 0, 0, 0, 105, 106, 1, 0, 0, 0, 106, 108, 1, 0, 0, 0, 107, 101, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 113, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 92, 1, 0, 0, 0, 112, 97, 1, 0, 0, 0, 113, 24, 1, 0, 0, 0, 114, 116, 7, 6, 0, 0, 115, 114, 1, 0, 0, 0, 116, 117, 1, 0, 0, 0, 117, 115, 1, 0, 0, 0, 117, 118, 1, 0, 0, 0, 118, 119, 1, 0, 0, 0, 119, 120, 6, 12, 0, 0, 120, 26, 1, 0, 0, 0, 13, 0, 44, 56, 69, 75, 81, 88, 94, 99, 105, 109, 112, 117, 1, 0, 1, 0] \ No newline at end of file diff --git a/latte/src/main/java/refinements/RefinementsLanguageLexer.java b/latte/src/main/java/refinements/RefinementsLanguageLexer.java new file mode 100644 index 0000000..6a543b3 --- /dev/null +++ b/latte/src/main/java/refinements/RefinementsLanguageLexer.java @@ -0,0 +1,191 @@ +// Generated from RefinementsLanguage.g4 by ANTLR 4.13.1 +package refinements; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"}) +public class RefinementsLanguageLexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, LOGOP=6, BOOLOP=7, ARITHOP=8, + BOOL=9, ID_UPPER=10, ID=11, INT=12, WS=13; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static String[] modeNames = { + "DEFAULT_MODE" + }; + + private static String[] makeRuleNames() { + return new String[] { + "T__0", "T__1", "T__2", "T__3", "T__4", "LOGOP", "BOOLOP", "ARITHOP", + "BOOL", "ID_UPPER", "ID", "INT", "WS" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "'('", "')'", "'!'", "'-'", "'.'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, null, null, null, null, null, "LOGOP", "BOOLOP", "ARITHOP", "BOOL", + "ID_UPPER", "ID", "INT", "WS" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + public RefinementsLanguageLexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "RefinementsLanguage.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + public static final String _serializedATN = + "\u0004\u0000\ry\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ + "\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+ + "\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+ + "\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+ + "\u0007\u000b\u0002\f\u0007\f\u0001\u0000\u0001\u0000\u0001\u0001\u0001"+ + "\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001"+ + "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001"+ + "\u0005\u0001\u0005\u0003\u0005-\b\u0005\u0001\u0006\u0001\u0006\u0001"+ + "\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001"+ + "\u0006\u0001\u0006\u0003\u00069\b\u0006\u0001\u0007\u0001\u0007\u0001"+ + "\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0003"+ + "\bF\b\b\u0001\t\u0001\t\u0005\tJ\b\t\n\t\f\tM\t\t\u0001\n\u0005\nP\b\n"+ + "\n\n\f\nS\t\n\u0001\n\u0001\n\u0005\nW\b\n\n\n\f\nZ\t\n\u0001\u000b\u0004"+ + "\u000b]\b\u000b\u000b\u000b\f\u000b^\u0001\u000b\u0004\u000bb\b\u000b"+ + "\u000b\u000b\f\u000bc\u0001\u000b\u0001\u000b\u0004\u000bh\b\u000b\u000b"+ + "\u000b\f\u000bi\u0005\u000bl\b\u000b\n\u000b\f\u000bo\t\u000b\u0003\u000b"+ + "q\b\u000b\u0001\f\u0004\ft\b\f\u000b\f\f\fu\u0001\f\u0001\f\u0000\u0000"+ + "\r\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006"+ + "\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u0001\u0000"+ + "\u0007\u0003\u0000%%*+//\u0001\u0000AZ\u0003\u000009AZaz\u0003\u0000A"+ + "Z__az\u0005\u0000##09AZ__az\u0001\u000009\u0003\u0000\t\n\r\r \u0089"+ + "\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0000"+ + "\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000\u0000"+ + "\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000\u0000"+ + "\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000\u0011"+ + "\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000\u0015"+ + "\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000\u0019"+ + "\u0001\u0000\u0000\u0000\u0001\u001b\u0001\u0000\u0000\u0000\u0003\u001d"+ + "\u0001\u0000\u0000\u0000\u0005\u001f\u0001\u0000\u0000\u0000\u0007!\u0001"+ + "\u0000\u0000\u0000\t#\u0001\u0000\u0000\u0000\u000b,\u0001\u0000\u0000"+ + "\u0000\r8\u0001\u0000\u0000\u0000\u000f:\u0001\u0000\u0000\u0000\u0011"+ + "E\u0001\u0000\u0000\u0000\u0013G\u0001\u0000\u0000\u0000\u0015Q\u0001"+ + "\u0000\u0000\u0000\u0017p\u0001\u0000\u0000\u0000\u0019s\u0001\u0000\u0000"+ + "\u0000\u001b\u001c\u0005(\u0000\u0000\u001c\u0002\u0001\u0000\u0000\u0000"+ + "\u001d\u001e\u0005)\u0000\u0000\u001e\u0004\u0001\u0000\u0000\u0000\u001f"+ + " \u0005!\u0000\u0000 \u0006\u0001\u0000\u0000\u0000!\"\u0005-\u0000\u0000"+ + "\"\b\u0001\u0000\u0000\u0000#$\u0005.\u0000\u0000$\n\u0001\u0000\u0000"+ + "\u0000%&\u0005&\u0000\u0000&-\u0005&\u0000\u0000\'(\u0005|\u0000\u0000"+ + "(-\u0005|\u0000\u0000)*\u0005-\u0000\u0000*+\u0005-\u0000\u0000+-\u0005"+ + ">\u0000\u0000,%\u0001\u0000\u0000\u0000,\'\u0001\u0000\u0000\u0000,)\u0001"+ + "\u0000\u0000\u0000-\f\u0001\u0000\u0000\u0000./\u0005=\u0000\u0000/9\u0005"+ + "=\u0000\u000001\u0005!\u0000\u000019\u0005=\u0000\u000023\u0005>\u0000"+ + "\u000039\u0005=\u0000\u000049\u0005>\u0000\u000056\u0005<\u0000\u0000"+ + "69\u0005=\u0000\u000079\u0005<\u0000\u00008.\u0001\u0000\u0000\u00008"+ + "0\u0001\u0000\u0000\u000082\u0001\u0000\u0000\u000084\u0001\u0000\u0000"+ + "\u000085\u0001\u0000\u0000\u000087\u0001\u0000\u0000\u00009\u000e\u0001"+ + "\u0000\u0000\u0000:;\u0007\u0000\u0000\u0000;\u0010\u0001\u0000\u0000"+ + "\u0000<=\u0005t\u0000\u0000=>\u0005r\u0000\u0000>?\u0005u\u0000\u0000"+ + "?F\u0005e\u0000\u0000@A\u0005f\u0000\u0000AB\u0005a\u0000\u0000BC\u0005"+ + "l\u0000\u0000CD\u0005s\u0000\u0000DF\u0005e\u0000\u0000E<\u0001\u0000"+ + "\u0000\u0000E@\u0001\u0000\u0000\u0000F\u0012\u0001\u0000\u0000\u0000"+ + "GK\u0007\u0001\u0000\u0000HJ\u0007\u0002\u0000\u0000IH\u0001\u0000\u0000"+ + "\u0000JM\u0001\u0000\u0000\u0000KI\u0001\u0000\u0000\u0000KL\u0001\u0000"+ + "\u0000\u0000L\u0014\u0001\u0000\u0000\u0000MK\u0001\u0000\u0000\u0000"+ + "NP\u0005#\u0000\u0000ON\u0001\u0000\u0000\u0000PS\u0001\u0000\u0000\u0000"+ + "QO\u0001\u0000\u0000\u0000QR\u0001\u0000\u0000\u0000RT\u0001\u0000\u0000"+ + "\u0000SQ\u0001\u0000\u0000\u0000TX\u0007\u0003\u0000\u0000UW\u0007\u0004"+ + "\u0000\u0000VU\u0001\u0000\u0000\u0000WZ\u0001\u0000\u0000\u0000XV\u0001"+ + "\u0000\u0000\u0000XY\u0001\u0000\u0000\u0000Y\u0016\u0001\u0000\u0000"+ + "\u0000ZX\u0001\u0000\u0000\u0000[]\u0007\u0005\u0000\u0000\\[\u0001\u0000"+ + "\u0000\u0000]^\u0001\u0000\u0000\u0000^\\\u0001\u0000\u0000\u0000^_\u0001"+ + "\u0000\u0000\u0000_q\u0001\u0000\u0000\u0000`b\u0007\u0005\u0000\u0000"+ + "a`\u0001\u0000\u0000\u0000bc\u0001\u0000\u0000\u0000ca\u0001\u0000\u0000"+ + "\u0000cd\u0001\u0000\u0000\u0000dm\u0001\u0000\u0000\u0000eg\u0005_\u0000"+ + "\u0000fh\u0007\u0005\u0000\u0000gf\u0001\u0000\u0000\u0000hi\u0001\u0000"+ + "\u0000\u0000ig\u0001\u0000\u0000\u0000ij\u0001\u0000\u0000\u0000jl\u0001"+ + "\u0000\u0000\u0000ke\u0001\u0000\u0000\u0000lo\u0001\u0000\u0000\u0000"+ + "mk\u0001\u0000\u0000\u0000mn\u0001\u0000\u0000\u0000nq\u0001\u0000\u0000"+ + "\u0000om\u0001\u0000\u0000\u0000p\\\u0001\u0000\u0000\u0000pa\u0001\u0000"+ + "\u0000\u0000q\u0018\u0001\u0000\u0000\u0000rt\u0007\u0006\u0000\u0000"+ + "sr\u0001\u0000\u0000\u0000tu\u0001\u0000\u0000\u0000us\u0001\u0000\u0000"+ + "\u0000uv\u0001\u0000\u0000\u0000vw\u0001\u0000\u0000\u0000wx\u0006\f\u0000"+ + "\u0000x\u001a\u0001\u0000\u0000\u0000\r\u0000,8EKQX^cimpu\u0001\u0000"+ + "\u0001\u0000"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/latte/src/main/java/refinements/RefinementsLanguageLexer.tokens b/latte/src/main/java/refinements/RefinementsLanguageLexer.tokens new file mode 100644 index 0000000..91471e1 --- /dev/null +++ b/latte/src/main/java/refinements/RefinementsLanguageLexer.tokens @@ -0,0 +1,18 @@ +T__0=1 +T__1=2 +T__2=3 +T__3=4 +T__4=5 +LOGOP=6 +BOOLOP=7 +ARITHOP=8 +BOOL=9 +ID_UPPER=10 +ID=11 +INT=12 +WS=13 +'('=1 +')'=2 +'!'=3 +'-'=4 +'.'=5 diff --git a/latte/src/main/java/refinements/RefinementsLanguageListener.java b/latte/src/main/java/refinements/RefinementsLanguageListener.java new file mode 100644 index 0000000..96ea7bb --- /dev/null +++ b/latte/src/main/java/refinements/RefinementsLanguageListener.java @@ -0,0 +1,246 @@ +// Generated from RefinementsLanguage.g4 by ANTLR 4.13.1 +package refinements; +import org.antlr.v4.runtime.tree.ParseTreeListener; + +/** + * This interface defines a complete listener for a parse tree produced by + * {@link RefinementsLanguageParser}. + */ +public interface RefinementsLanguageListener extends ParseTreeListener { + /** + * Enter a parse tree produced by {@link RefinementsLanguageParser#prog}. + * @param ctx the parse tree + */ + void enterProg(RefinementsLanguageParser.ProgContext ctx); + /** + * Exit a parse tree produced by {@link RefinementsLanguageParser#prog}. + * @param ctx the parse tree + */ + void exitProg(RefinementsLanguageParser.ProgContext ctx); + /** + * Enter a parse tree produced by the {@code startPred} + * labeled alternative in {@link RefinementsLanguageParser#start}. + * @param ctx the parse tree + */ + void enterStartPred(RefinementsLanguageParser.StartPredContext ctx); + /** + * Exit a parse tree produced by the {@code startPred} + * labeled alternative in {@link RefinementsLanguageParser#start}. + * @param ctx the parse tree + */ + void exitStartPred(RefinementsLanguageParser.StartPredContext ctx); + /** + * Enter a parse tree produced by the {@code predGroup} + * labeled alternative in {@link RefinementsLanguageParser#pred}. + * @param ctx the parse tree + */ + void enterPredGroup(RefinementsLanguageParser.PredGroupContext ctx); + /** + * Exit a parse tree produced by the {@code predGroup} + * labeled alternative in {@link RefinementsLanguageParser#pred}. + * @param ctx the parse tree + */ + void exitPredGroup(RefinementsLanguageParser.PredGroupContext ctx); + /** + * Enter a parse tree produced by the {@code predNegate} + * labeled alternative in {@link RefinementsLanguageParser#pred}. + * @param ctx the parse tree + */ + void enterPredNegate(RefinementsLanguageParser.PredNegateContext ctx); + /** + * Exit a parse tree produced by the {@code predNegate} + * labeled alternative in {@link RefinementsLanguageParser#pred}. + * @param ctx the parse tree + */ + void exitPredNegate(RefinementsLanguageParser.PredNegateContext ctx); + /** + * Enter a parse tree produced by the {@code predExp} + * labeled alternative in {@link RefinementsLanguageParser#pred}. + * @param ctx the parse tree + */ + void enterPredExp(RefinementsLanguageParser.PredExpContext ctx); + /** + * Exit a parse tree produced by the {@code predExp} + * labeled alternative in {@link RefinementsLanguageParser#pred}. + * @param ctx the parse tree + */ + void exitPredExp(RefinementsLanguageParser.PredExpContext ctx); + /** + * Enter a parse tree produced by the {@code predLogic} + * labeled alternative in {@link RefinementsLanguageParser#pred}. + * @param ctx the parse tree + */ + void enterPredLogic(RefinementsLanguageParser.PredLogicContext ctx); + /** + * Exit a parse tree produced by the {@code predLogic} + * labeled alternative in {@link RefinementsLanguageParser#pred}. + * @param ctx the parse tree + */ + void exitPredLogic(RefinementsLanguageParser.PredLogicContext ctx); + /** + * Enter a parse tree produced by the {@code expBool} + * labeled alternative in {@link RefinementsLanguageParser#exp}. + * @param ctx the parse tree + */ + void enterExpBool(RefinementsLanguageParser.ExpBoolContext ctx); + /** + * Exit a parse tree produced by the {@code expBool} + * labeled alternative in {@link RefinementsLanguageParser#exp}. + * @param ctx the parse tree + */ + void exitExpBool(RefinementsLanguageParser.ExpBoolContext ctx); + /** + * Enter a parse tree produced by the {@code expOperand} + * labeled alternative in {@link RefinementsLanguageParser#exp}. + * @param ctx the parse tree + */ + void enterExpOperand(RefinementsLanguageParser.ExpOperandContext ctx); + /** + * Exit a parse tree produced by the {@code expOperand} + * labeled alternative in {@link RefinementsLanguageParser#exp}. + * @param ctx the parse tree + */ + void exitExpOperand(RefinementsLanguageParser.ExpOperandContext ctx); + /** + * Enter a parse tree produced by the {@code expGroup} + * labeled alternative in {@link RefinementsLanguageParser#exp}. + * @param ctx the parse tree + */ + void enterExpGroup(RefinementsLanguageParser.ExpGroupContext ctx); + /** + * Exit a parse tree produced by the {@code expGroup} + * labeled alternative in {@link RefinementsLanguageParser#exp}. + * @param ctx the parse tree + */ + void exitExpGroup(RefinementsLanguageParser.ExpGroupContext ctx); + /** + * Enter a parse tree produced by the {@code opArith} + * labeled alternative in {@link RefinementsLanguageParser#operand}. + * @param ctx the parse tree + */ + void enterOpArith(RefinementsLanguageParser.OpArithContext ctx); + /** + * Exit a parse tree produced by the {@code opArith} + * labeled alternative in {@link RefinementsLanguageParser#operand}. + * @param ctx the parse tree + */ + void exitOpArith(RefinementsLanguageParser.OpArithContext ctx); + /** + * Enter a parse tree produced by the {@code opNot} + * labeled alternative in {@link RefinementsLanguageParser#operand}. + * @param ctx the parse tree + */ + void enterOpNot(RefinementsLanguageParser.OpNotContext ctx); + /** + * Exit a parse tree produced by the {@code opNot} + * labeled alternative in {@link RefinementsLanguageParser#operand}. + * @param ctx the parse tree + */ + void exitOpNot(RefinementsLanguageParser.OpNotContext ctx); + /** + * Enter a parse tree produced by the {@code opLiteral} + * labeled alternative in {@link RefinementsLanguageParser#operand}. + * @param ctx the parse tree + */ + void enterOpLiteral(RefinementsLanguageParser.OpLiteralContext ctx); + /** + * Exit a parse tree produced by the {@code opLiteral} + * labeled alternative in {@link RefinementsLanguageParser#operand}. + * @param ctx the parse tree + */ + void exitOpLiteral(RefinementsLanguageParser.OpLiteralContext ctx); + /** + * Enter a parse tree produced by the {@code opGroup} + * labeled alternative in {@link RefinementsLanguageParser#operand}. + * @param ctx the parse tree + */ + void enterOpGroup(RefinementsLanguageParser.OpGroupContext ctx); + /** + * Exit a parse tree produced by the {@code opGroup} + * labeled alternative in {@link RefinementsLanguageParser#operand}. + * @param ctx the parse tree + */ + void exitOpGroup(RefinementsLanguageParser.OpGroupContext ctx); + /** + * Enter a parse tree produced by the {@code opMinus} + * labeled alternative in {@link RefinementsLanguageParser#operand}. + * @param ctx the parse tree + */ + void enterOpMinus(RefinementsLanguageParser.OpMinusContext ctx); + /** + * Exit a parse tree produced by the {@code opMinus} + * labeled alternative in {@link RefinementsLanguageParser#operand}. + * @param ctx the parse tree + */ + void exitOpMinus(RefinementsLanguageParser.OpMinusContext ctx); + /** + * Enter a parse tree produced by the {@code opSub} + * labeled alternative in {@link RefinementsLanguageParser#operand}. + * @param ctx the parse tree + */ + void enterOpSub(RefinementsLanguageParser.OpSubContext ctx); + /** + * Exit a parse tree produced by the {@code opSub} + * labeled alternative in {@link RefinementsLanguageParser#operand}. + * @param ctx the parse tree + */ + void exitOpSub(RefinementsLanguageParser.OpSubContext ctx); + /** + * Enter a parse tree produced by the {@code litGroup} + * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * @param ctx the parse tree + */ + void enterLitGroup(RefinementsLanguageParser.LitGroupContext ctx); + /** + * Exit a parse tree produced by the {@code litGroup} + * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * @param ctx the parse tree + */ + void exitLitGroup(RefinementsLanguageParser.LitGroupContext ctx); + /** + * Enter a parse tree produced by the {@code lit} + * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * @param ctx the parse tree + */ + void enterLit(RefinementsLanguageParser.LitContext ctx); + /** + * Exit a parse tree produced by the {@code lit} + * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * @param ctx the parse tree + */ + void exitLit(RefinementsLanguageParser.LitContext ctx); + /** + * Enter a parse tree produced by the {@code var} + * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * @param ctx the parse tree + */ + void enterVar(RefinementsLanguageParser.VarContext ctx); + /** + * Exit a parse tree produced by the {@code var} + * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * @param ctx the parse tree + */ + void exitVar(RefinementsLanguageParser.VarContext ctx); + /** + * Enter a parse tree produced by the {@code targetInvocation} + * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * @param ctx the parse tree + */ + void enterTargetInvocation(RefinementsLanguageParser.TargetInvocationContext ctx); + /** + * Exit a parse tree produced by the {@code targetInvocation} + * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * @param ctx the parse tree + */ + void exitTargetInvocation(RefinementsLanguageParser.TargetInvocationContext ctx); + /** + * Enter a parse tree produced by {@link RefinementsLanguageParser#literal}. + * @param ctx the parse tree + */ + void enterLiteral(RefinementsLanguageParser.LiteralContext ctx); + /** + * Exit a parse tree produced by {@link RefinementsLanguageParser#literal}. + * @param ctx the parse tree + */ + void exitLiteral(RefinementsLanguageParser.LiteralContext ctx); +} \ No newline at end of file diff --git a/latte/src/main/java/refinements/RefinementsLanguageParser.java b/latte/src/main/java/refinements/RefinementsLanguageParser.java new file mode 100644 index 0000000..ac1246c --- /dev/null +++ b/latte/src/main/java/refinements/RefinementsLanguageParser.java @@ -0,0 +1,1122 @@ +// Generated from RefinementsLanguage.g4 by ANTLR 4.13.1 +package refinements; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.v4.runtime.tree.*; +import java.util.List; +import java.util.Iterator; +import java.util.ArrayList; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) +public class RefinementsLanguageParser extends Parser { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, LOGOP=6, BOOLOP=7, ARITHOP=8, + BOOL=9, ID_UPPER=10, ID=11, INT=12, WS=13; + public static final int + RULE_prog = 0, RULE_start = 1, RULE_pred = 2, RULE_exp = 3, RULE_operand = 4, + RULE_literalExpression = 5, RULE_literal = 6; + private static String[] makeRuleNames() { + return new String[] { + "prog", "start", "pred", "exp", "operand", "literalExpression", "literal" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "'('", "')'", "'!'", "'-'", "'.'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, null, null, null, null, null, "LOGOP", "BOOLOP", "ARITHOP", "BOOL", + "ID_UPPER", "ID", "INT", "WS" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + @Override + public String getGrammarFileName() { return "RefinementsLanguage.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public ATN getATN() { return _ATN; } + + public RefinementsLanguageParser(TokenStream input) { + super(input); + _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @SuppressWarnings("CheckReturnValue") + public static class ProgContext extends ParserRuleContext { + public StartContext start() { + return getRuleContext(StartContext.class,0); + } + public ProgContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_prog; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterProg(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitProg(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitProg(this); + else return visitor.visitChildren(this); + } + } + + public final ProgContext prog() throws RecognitionException { + ProgContext _localctx = new ProgContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_prog); + try { + setState(16); + _errHandler.sync(this); + switch (_input.LA(1)) { + case T__0: + case T__2: + case T__3: + case BOOL: + case ID: + case INT: + enterOuterAlt(_localctx, 1); + { + setState(14); + start(); + } + break; + case EOF: + enterOuterAlt(_localctx, 2); + { + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class StartContext extends ParserRuleContext { + public StartContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_start; } + + public StartContext() { } + public void copyFrom(StartContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class StartPredContext extends StartContext { + public PredContext pred() { + return getRuleContext(PredContext.class,0); + } + public StartPredContext(StartContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterStartPred(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitStartPred(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitStartPred(this); + else return visitor.visitChildren(this); + } + } + + public final StartContext start() throws RecognitionException { + StartContext _localctx = new StartContext(_ctx, getState()); + enterRule(_localctx, 2, RULE_start); + try { + _localctx = new StartPredContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(18); + pred(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class PredContext extends ParserRuleContext { + public PredContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_pred; } + + public PredContext() { } + public void copyFrom(PredContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class PredGroupContext extends PredContext { + public PredContext pred() { + return getRuleContext(PredContext.class,0); + } + public PredGroupContext(PredContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterPredGroup(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitPredGroup(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitPredGroup(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class PredNegateContext extends PredContext { + public PredContext pred() { + return getRuleContext(PredContext.class,0); + } + public PredNegateContext(PredContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterPredNegate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitPredNegate(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitPredNegate(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class PredExpContext extends PredContext { + public ExpContext exp() { + return getRuleContext(ExpContext.class,0); + } + public PredExpContext(PredContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterPredExp(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitPredExp(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitPredExp(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class PredLogicContext extends PredContext { + public List pred() { + return getRuleContexts(PredContext.class); + } + public PredContext pred(int i) { + return getRuleContext(PredContext.class,i); + } + public TerminalNode LOGOP() { return getToken(RefinementsLanguageParser.LOGOP, 0); } + public PredLogicContext(PredContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterPredLogic(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitPredLogic(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitPredLogic(this); + else return visitor.visitChildren(this); + } + } + + public final PredContext pred() throws RecognitionException { + return pred(0); + } + + private PredContext pred(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + PredContext _localctx = new PredContext(_ctx, _parentState); + PredContext _prevctx = _localctx; + int _startState = 4; + enterRecursionRule(_localctx, 4, RULE_pred, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(28); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,1,_ctx) ) { + case 1: + { + _localctx = new PredGroupContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(21); + match(T__0); + setState(22); + pred(0); + setState(23); + match(T__1); + } + break; + case 2: + { + _localctx = new PredNegateContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(25); + match(T__2); + setState(26); + pred(3); + } + break; + case 3: + { + _localctx = new PredExpContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(27); + exp(0); + } + break; + } + _ctx.stop = _input.LT(-1); + setState(35); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,2,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new PredLogicContext(new PredContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_pred); + setState(30); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(31); + match(LOGOP); + setState(32); + pred(3); + } + } + } + setState(37); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,2,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class ExpContext extends ParserRuleContext { + public ExpContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_exp; } + + public ExpContext() { } + public void copyFrom(ExpContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ExpBoolContext extends ExpContext { + public List exp() { + return getRuleContexts(ExpContext.class); + } + public ExpContext exp(int i) { + return getRuleContext(ExpContext.class,i); + } + public TerminalNode BOOLOP() { return getToken(RefinementsLanguageParser.BOOLOP, 0); } + public ExpBoolContext(ExpContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterExpBool(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitExpBool(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitExpBool(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ExpOperandContext extends ExpContext { + public OperandContext operand() { + return getRuleContext(OperandContext.class,0); + } + public ExpOperandContext(ExpContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterExpOperand(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitExpOperand(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitExpOperand(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ExpGroupContext extends ExpContext { + public ExpContext exp() { + return getRuleContext(ExpContext.class,0); + } + public ExpGroupContext(ExpContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterExpGroup(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitExpGroup(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitExpGroup(this); + else return visitor.visitChildren(this); + } + } + + public final ExpContext exp() throws RecognitionException { + return exp(0); + } + + private ExpContext exp(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + ExpContext _localctx = new ExpContext(_ctx, _parentState); + ExpContext _prevctx = _localctx; + int _startState = 6; + enterRecursionRule(_localctx, 6, RULE_exp, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(44); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,3,_ctx) ) { + case 1: + { + _localctx = new ExpGroupContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(39); + match(T__0); + setState(40); + exp(0); + setState(41); + match(T__1); + } + break; + case 2: + { + _localctx = new ExpOperandContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(43); + operand(0); + } + break; + } + _ctx.stop = _input.LT(-1); + setState(51); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,4,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new ExpBoolContext(new ExpContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_exp); + setState(46); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(47); + match(BOOLOP); + setState(48); + exp(3); + } + } + } + setState(53); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,4,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class OperandContext extends ParserRuleContext { + public OperandContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_operand; } + + public OperandContext() { } + public void copyFrom(OperandContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class OpArithContext extends OperandContext { + public List operand() { + return getRuleContexts(OperandContext.class); + } + public OperandContext operand(int i) { + return getRuleContext(OperandContext.class,i); + } + public TerminalNode ARITHOP() { return getToken(RefinementsLanguageParser.ARITHOP, 0); } + public OpArithContext(OperandContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterOpArith(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitOpArith(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitOpArith(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class OpNotContext extends OperandContext { + public OperandContext operand() { + return getRuleContext(OperandContext.class,0); + } + public OpNotContext(OperandContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterOpNot(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitOpNot(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitOpNot(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class OpLiteralContext extends OperandContext { + public LiteralExpressionContext literalExpression() { + return getRuleContext(LiteralExpressionContext.class,0); + } + public OpLiteralContext(OperandContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterOpLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitOpLiteral(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitOpLiteral(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class OpGroupContext extends OperandContext { + public OperandContext operand() { + return getRuleContext(OperandContext.class,0); + } + public OpGroupContext(OperandContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterOpGroup(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitOpGroup(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitOpGroup(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class OpMinusContext extends OperandContext { + public OperandContext operand() { + return getRuleContext(OperandContext.class,0); + } + public OpMinusContext(OperandContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterOpMinus(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitOpMinus(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitOpMinus(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class OpSubContext extends OperandContext { + public List operand() { + return getRuleContexts(OperandContext.class); + } + public OperandContext operand(int i) { + return getRuleContext(OperandContext.class,i); + } + public OpSubContext(OperandContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterOpSub(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitOpSub(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitOpSub(this); + else return visitor.visitChildren(this); + } + } + + public final OperandContext operand() throws RecognitionException { + return operand(0); + } + + private OperandContext operand(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + OperandContext _localctx = new OperandContext(_ctx, _parentState); + OperandContext _prevctx = _localctx; + int _startState = 8; + enterRecursionRule(_localctx, 8, RULE_operand, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(64); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,5,_ctx) ) { + case 1: + { + _localctx = new OpLiteralContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + + setState(55); + literalExpression(); + } + break; + case 2: + { + _localctx = new OpMinusContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(56); + match(T__3); + setState(57); + operand(3); + } + break; + case 3: + { + _localctx = new OpNotContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(58); + match(T__2); + setState(59); + operand(2); + } + break; + case 4: + { + _localctx = new OpGroupContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(60); + match(T__0); + setState(61); + operand(0); + setState(62); + match(T__1); + } + break; + } + _ctx.stop = _input.LT(-1); + setState(74); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,7,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + setState(72); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) { + case 1: + { + _localctx = new OpArithContext(new OperandContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_operand); + setState(66); + if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)"); + setState(67); + match(ARITHOP); + setState(68); + operand(6); + } + break; + case 2: + { + _localctx = new OpSubContext(new OperandContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_operand); + setState(69); + if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)"); + setState(70); + match(T__3); + setState(71); + operand(5); + } + break; + } + } + } + setState(76); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,7,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LiteralExpressionContext extends ParserRuleContext { + public LiteralExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_literalExpression; } + + public LiteralExpressionContext() { } + public void copyFrom(LiteralExpressionContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class TargetInvocationContext extends LiteralExpressionContext { + public List ID() { return getTokens(RefinementsLanguageParser.ID); } + public TerminalNode ID(int i) { + return getToken(RefinementsLanguageParser.ID, i); + } + public TargetInvocationContext(LiteralExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterTargetInvocation(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitTargetInvocation(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitTargetInvocation(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class LitGroupContext extends LiteralExpressionContext { + public LiteralExpressionContext literalExpression() { + return getRuleContext(LiteralExpressionContext.class,0); + } + public LitGroupContext(LiteralExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterLitGroup(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitLitGroup(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitLitGroup(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class LitContext extends LiteralExpressionContext { + public LiteralContext literal() { + return getRuleContext(LiteralContext.class,0); + } + public LitContext(LiteralExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterLit(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitLit(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitLit(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class VarContext extends LiteralExpressionContext { + public TerminalNode ID() { return getToken(RefinementsLanguageParser.ID, 0); } + public VarContext(LiteralExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterVar(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitVar(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitVar(this); + else return visitor.visitChildren(this); + } + } + + public final LiteralExpressionContext literalExpression() throws RecognitionException { + LiteralExpressionContext _localctx = new LiteralExpressionContext(_ctx, getState()); + enterRule(_localctx, 10, RULE_literalExpression); + try { + setState(86); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,8,_ctx) ) { + case 1: + _localctx = new LitGroupContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(77); + match(T__0); + setState(78); + literalExpression(); + setState(79); + match(T__1); + } + break; + case 2: + _localctx = new LitContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(81); + literal(); + } + break; + case 3: + _localctx = new VarContext(_localctx); + enterOuterAlt(_localctx, 3); + { + setState(82); + match(ID); + } + break; + case 4: + _localctx = new TargetInvocationContext(_localctx); + enterOuterAlt(_localctx, 4); + { + setState(83); + match(ID); + setState(84); + match(T__4); + setState(85); + match(ID); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + @SuppressWarnings("CheckReturnValue") + public static class LiteralContext extends ParserRuleContext { + public TerminalNode BOOL() { return getToken(RefinementsLanguageParser.BOOL, 0); } + public TerminalNode INT() { return getToken(RefinementsLanguageParser.INT, 0); } + public LiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_literal; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitLiteral(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitLiteral(this); + else return visitor.visitChildren(this); + } + } + + public final LiteralContext literal() throws RecognitionException { + LiteralContext _localctx = new LiteralContext(_ctx, getState()); + enterRule(_localctx, 12, RULE_literal); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(88); + _la = _input.LA(1); + if ( !(_la==BOOL || _la==INT) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + switch (ruleIndex) { + case 2: + return pred_sempred((PredContext)_localctx, predIndex); + case 3: + return exp_sempred((ExpContext)_localctx, predIndex); + case 4: + return operand_sempred((OperandContext)_localctx, predIndex); + } + return true; + } + private boolean pred_sempred(PredContext _localctx, int predIndex) { + switch (predIndex) { + case 0: + return precpred(_ctx, 2); + } + return true; + } + private boolean exp_sempred(ExpContext _localctx, int predIndex) { + switch (predIndex) { + case 1: + return precpred(_ctx, 2); + } + return true; + } + private boolean operand_sempred(OperandContext _localctx, int predIndex) { + switch (predIndex) { + case 2: + return precpred(_ctx, 5); + case 3: + return precpred(_ctx, 4); + } + return true; + } + + public static final String _serializedATN = + "\u0004\u0001\r[\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ + "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0001\u0000\u0001\u0000\u0003"+ + "\u0000\u0011\b\u0000\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001"+ + "\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0003"+ + "\u0002\u001d\b\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0005\u0002\""+ + "\b\u0002\n\u0002\f\u0002%\t\u0002\u0001\u0003\u0001\u0003\u0001\u0003"+ + "\u0001\u0003\u0001\u0003\u0001\u0003\u0003\u0003-\b\u0003\u0001\u0003"+ + "\u0001\u0003\u0001\u0003\u0005\u00032\b\u0003\n\u0003\f\u00035\t\u0003"+ + "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004"+ + "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0003\u0004A\b\u0004"+ + "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004"+ + "\u0005\u0004I\b\u0004\n\u0004\f\u0004L\t\u0004\u0001\u0005\u0001\u0005"+ + "\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005"+ + "\u0001\u0005\u0003\u0005W\b\u0005\u0001\u0006\u0001\u0006\u0001\u0006"+ + "\u0000\u0003\u0004\u0006\b\u0007\u0000\u0002\u0004\u0006\b\n\f\u0000\u0001"+ + "\u0002\u0000\t\t\f\fa\u0000\u0010\u0001\u0000\u0000\u0000\u0002\u0012"+ + "\u0001\u0000\u0000\u0000\u0004\u001c\u0001\u0000\u0000\u0000\u0006,\u0001"+ + "\u0000\u0000\u0000\b@\u0001\u0000\u0000\u0000\nV\u0001\u0000\u0000\u0000"+ + "\fX\u0001\u0000\u0000\u0000\u000e\u0011\u0003\u0002\u0001\u0000\u000f"+ + "\u0011\u0001\u0000\u0000\u0000\u0010\u000e\u0001\u0000\u0000\u0000\u0010"+ + "\u000f\u0001\u0000\u0000\u0000\u0011\u0001\u0001\u0000\u0000\u0000\u0012"+ + "\u0013\u0003\u0004\u0002\u0000\u0013\u0003\u0001\u0000\u0000\u0000\u0014"+ + "\u0015\u0006\u0002\uffff\uffff\u0000\u0015\u0016\u0005\u0001\u0000\u0000"+ + "\u0016\u0017\u0003\u0004\u0002\u0000\u0017\u0018\u0005\u0002\u0000\u0000"+ + "\u0018\u001d\u0001\u0000\u0000\u0000\u0019\u001a\u0005\u0003\u0000\u0000"+ + "\u001a\u001d\u0003\u0004\u0002\u0003\u001b\u001d\u0003\u0006\u0003\u0000"+ + "\u001c\u0014\u0001\u0000\u0000\u0000\u001c\u0019\u0001\u0000\u0000\u0000"+ + "\u001c\u001b\u0001\u0000\u0000\u0000\u001d#\u0001\u0000\u0000\u0000\u001e"+ + "\u001f\n\u0002\u0000\u0000\u001f \u0005\u0006\u0000\u0000 \"\u0003\u0004"+ + "\u0002\u0003!\u001e\u0001\u0000\u0000\u0000\"%\u0001\u0000\u0000\u0000"+ + "#!\u0001\u0000\u0000\u0000#$\u0001\u0000\u0000\u0000$\u0005\u0001\u0000"+ + "\u0000\u0000%#\u0001\u0000\u0000\u0000&\'\u0006\u0003\uffff\uffff\u0000"+ + "\'(\u0005\u0001\u0000\u0000()\u0003\u0006\u0003\u0000)*\u0005\u0002\u0000"+ + "\u0000*-\u0001\u0000\u0000\u0000+-\u0003\b\u0004\u0000,&\u0001\u0000\u0000"+ + "\u0000,+\u0001\u0000\u0000\u0000-3\u0001\u0000\u0000\u0000./\n\u0002\u0000"+ + "\u0000/0\u0005\u0007\u0000\u000002\u0003\u0006\u0003\u00031.\u0001\u0000"+ + "\u0000\u000025\u0001\u0000\u0000\u000031\u0001\u0000\u0000\u000034\u0001"+ + "\u0000\u0000\u00004\u0007\u0001\u0000\u0000\u000053\u0001\u0000\u0000"+ + "\u000067\u0006\u0004\uffff\uffff\u00007A\u0003\n\u0005\u000089\u0005\u0004"+ + "\u0000\u00009A\u0003\b\u0004\u0003:;\u0005\u0003\u0000\u0000;A\u0003\b"+ + "\u0004\u0002<=\u0005\u0001\u0000\u0000=>\u0003\b\u0004\u0000>?\u0005\u0002"+ + "\u0000\u0000?A\u0001\u0000\u0000\u0000@6\u0001\u0000\u0000\u0000@8\u0001"+ + "\u0000\u0000\u0000@:\u0001\u0000\u0000\u0000@<\u0001\u0000\u0000\u0000"+ + "AJ\u0001\u0000\u0000\u0000BC\n\u0005\u0000\u0000CD\u0005\b\u0000\u0000"+ + "DI\u0003\b\u0004\u0006EF\n\u0004\u0000\u0000FG\u0005\u0004\u0000\u0000"+ + "GI\u0003\b\u0004\u0005HB\u0001\u0000\u0000\u0000HE\u0001\u0000\u0000\u0000"+ + "IL\u0001\u0000\u0000\u0000JH\u0001\u0000\u0000\u0000JK\u0001\u0000\u0000"+ + "\u0000K\t\u0001\u0000\u0000\u0000LJ\u0001\u0000\u0000\u0000MN\u0005\u0001"+ + "\u0000\u0000NO\u0003\n\u0005\u0000OP\u0005\u0002\u0000\u0000PW\u0001\u0000"+ + "\u0000\u0000QW\u0003\f\u0006\u0000RW\u0005\u000b\u0000\u0000ST\u0005\u000b"+ + "\u0000\u0000TU\u0005\u0005\u0000\u0000UW\u0005\u000b\u0000\u0000VM\u0001"+ + "\u0000\u0000\u0000VQ\u0001\u0000\u0000\u0000VR\u0001\u0000\u0000\u0000"+ + "VS\u0001\u0000\u0000\u0000W\u000b\u0001\u0000\u0000\u0000XY\u0007\u0000"+ + "\u0000\u0000Y\r\u0001\u0000\u0000\u0000\t\u0010\u001c#,3@HJV"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/latte/src/main/java/refinements/RefinementsLanguageVisitor.java b/latte/src/main/java/refinements/RefinementsLanguageVisitor.java new file mode 100644 index 0000000..a657b0a --- /dev/null +++ b/latte/src/main/java/refinements/RefinementsLanguageVisitor.java @@ -0,0 +1,151 @@ +// Generated from RefinementsLanguage.g4 by ANTLR 4.13.1 +package refinements; +import org.antlr.v4.runtime.tree.ParseTreeVisitor; + +/** + * This interface defines a complete generic visitor for a parse tree produced + * by {@link RefinementsLanguageParser}. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +public interface RefinementsLanguageVisitor extends ParseTreeVisitor { + /** + * Visit a parse tree produced by {@link RefinementsLanguageParser#prog}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitProg(RefinementsLanguageParser.ProgContext ctx); + /** + * Visit a parse tree produced by the {@code startPred} + * labeled alternative in {@link RefinementsLanguageParser#start}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStartPred(RefinementsLanguageParser.StartPredContext ctx); + /** + * Visit a parse tree produced by the {@code predGroup} + * labeled alternative in {@link RefinementsLanguageParser#pred}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPredGroup(RefinementsLanguageParser.PredGroupContext ctx); + /** + * Visit a parse tree produced by the {@code predNegate} + * labeled alternative in {@link RefinementsLanguageParser#pred}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPredNegate(RefinementsLanguageParser.PredNegateContext ctx); + /** + * Visit a parse tree produced by the {@code predExp} + * labeled alternative in {@link RefinementsLanguageParser#pred}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPredExp(RefinementsLanguageParser.PredExpContext ctx); + /** + * Visit a parse tree produced by the {@code predLogic} + * labeled alternative in {@link RefinementsLanguageParser#pred}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPredLogic(RefinementsLanguageParser.PredLogicContext ctx); + /** + * Visit a parse tree produced by the {@code expBool} + * labeled alternative in {@link RefinementsLanguageParser#exp}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpBool(RefinementsLanguageParser.ExpBoolContext ctx); + /** + * Visit a parse tree produced by the {@code expOperand} + * labeled alternative in {@link RefinementsLanguageParser#exp}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpOperand(RefinementsLanguageParser.ExpOperandContext ctx); + /** + * Visit a parse tree produced by the {@code expGroup} + * labeled alternative in {@link RefinementsLanguageParser#exp}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitExpGroup(RefinementsLanguageParser.ExpGroupContext ctx); + /** + * Visit a parse tree produced by the {@code opArith} + * labeled alternative in {@link RefinementsLanguageParser#operand}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOpArith(RefinementsLanguageParser.OpArithContext ctx); + /** + * Visit a parse tree produced by the {@code opNot} + * labeled alternative in {@link RefinementsLanguageParser#operand}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOpNot(RefinementsLanguageParser.OpNotContext ctx); + /** + * Visit a parse tree produced by the {@code opLiteral} + * labeled alternative in {@link RefinementsLanguageParser#operand}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOpLiteral(RefinementsLanguageParser.OpLiteralContext ctx); + /** + * Visit a parse tree produced by the {@code opGroup} + * labeled alternative in {@link RefinementsLanguageParser#operand}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOpGroup(RefinementsLanguageParser.OpGroupContext ctx); + /** + * Visit a parse tree produced by the {@code opMinus} + * labeled alternative in {@link RefinementsLanguageParser#operand}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOpMinus(RefinementsLanguageParser.OpMinusContext ctx); + /** + * Visit a parse tree produced by the {@code opSub} + * labeled alternative in {@link RefinementsLanguageParser#operand}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOpSub(RefinementsLanguageParser.OpSubContext ctx); + /** + * Visit a parse tree produced by the {@code litGroup} + * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLitGroup(RefinementsLanguageParser.LitGroupContext ctx); + /** + * Visit a parse tree produced by the {@code lit} + * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLit(RefinementsLanguageParser.LitContext ctx); + /** + * Visit a parse tree produced by the {@code var} + * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitVar(RefinementsLanguageParser.VarContext ctx); + /** + * Visit a parse tree produced by the {@code targetInvocation} + * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTargetInvocation(RefinementsLanguageParser.TargetInvocationContext ctx); + /** + * Visit a parse tree produced by {@link RefinementsLanguageParser#literal}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLiteral(RefinementsLanguageParser.LiteralContext ctx); +} \ No newline at end of file diff --git a/latte/src/main/java/refinements/Test.java b/latte/src/main/java/refinements/Test.java index 559e4af..e042773 100644 --- a/latte/src/main/java/refinements/Test.java +++ b/latte/src/main/java/refinements/Test.java @@ -1,6 +1,7 @@ package refinements; import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.CharStreams; // import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.tree.ParseTree; @@ -10,29 +11,29 @@ public class Test { - // public static void main(String[] args) { - // String input = "a + b < 10"; + public static void main(String[] args) { + String input = "a + b < 10 + c.y"; - // // // Create input stream (modern way) - // CharStream inputStream = CharStreams.fromString(input); + // // Create input stream (modern way) + CharStream inputStream = CharStreams.fromString(input); - // // Create lexer - // RefinementsLanguageLexer lexer = new RefinementsLanguageLexer(inputStream); + // Create lexer + RefinementsLanguageLexer lexer = new RefinementsLanguageLexer(inputStream); - // // Create token stream - // CommonTokenStream tokens = new CommonTokenStream(lexer); + // Create token stream + CommonTokenStream tokens = new CommonTokenStream(lexer); - // // Create parser - // RefinementsLanguageParser parser = new RefinementsLanguageParser(tokens); + // Create parser + RefinementsLanguageParser parser = new RefinementsLanguageParser(tokens); - // // Parse starting from your grammar's start rule - // // Replace 'program' with your actual start rule name - // ParseTree tree = parser.program(); // Change 'program' to your start rule + // Parse starting from your grammar's start rule + // Replace 'program' with your actual start rule name + ParseTree tree = parser.prog(); // Change 'program' to your start rule - // // Print the parse tree - // System.out.println("Parse Tree:"); - // System.out.println(tree.toStringTree(parser)); + // Print the parse tree + System.out.println("Parse Tree:"); + System.out.println(tree.toStringTree(parser)); - // } + } } From 4989dfd44f1f1303ee1214cb56a5891d94411b6a Mon Sep 17 00:00:00 2001 From: Catarina Gamboa Date: Tue, 24 Jun 2025 14:57:58 +0100 Subject: [PATCH 03/14] remake refinements language parser --- latte/pom.xml | 6 + .../.antlr/RefinementsLanguage.interp | 5 +- .../.antlr/RefinementsLanguageLexer.interp | 2 +- .../.antlr/RefinementsLanguageLexer.java | 132 +++--- .../.antlr/RefinementsLanguageParser.java | 357 +++++++--------- .../java/refinements/RefinementsLanguage.g4 | 25 +- .../refinements/RefinementsLanguage.interp | 5 +- .../RefinementsLanguageBaseListener.java | 24 -- .../RefinementsLanguageBaseVisitor.java | 14 - .../RefinementsLanguageLexer.interp | 2 +- .../refinements/RefinementsLanguageLexer.java | 132 +++--- .../RefinementsLanguageListener.java | 40 +- .../RefinementsLanguageParser.java | 383 +++++++----------- .../RefinementsLanguageVisitor.java | 22 +- ...Test.java => TestRefinementsLanguage.java} | 4 +- latte/src/main/java/smt/JavaSMTTest.java | 137 +++++++ latte/src/main/java/smt/TranslatorToZ3.java | 5 + 17 files changed, 602 insertions(+), 693 deletions(-) rename latte/src/main/java/refinements/{Test.java => TestRefinementsLanguage.java} (94%) create mode 100644 latte/src/main/java/smt/JavaSMTTest.java create mode 100644 latte/src/main/java/smt/TranslatorToZ3.java diff --git a/latte/pom.xml b/latte/pom.xml index 46a511c..450a706 100644 --- a/latte/pom.xml +++ b/latte/pom.xml @@ -21,6 +21,12 @@ + + org.sosy-lab + java-smt + 5.0.1-523-g9001c0ea4 + + org.antlr antlr4-runtime diff --git a/latte/src/main/java/refinements/.antlr/RefinementsLanguage.interp b/latte/src/main/java/refinements/.antlr/RefinementsLanguage.interp index 965ad9b..8a70f49 100644 --- a/latte/src/main/java/refinements/.antlr/RefinementsLanguage.interp +++ b/latte/src/main/java/refinements/.antlr/RefinementsLanguage.interp @@ -32,13 +32,12 @@ WS rule names: prog -start pred exp operand -literalExpression +leafs literal atn: -[4, 1, 13, 91, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 1, 0, 1, 0, 3, 0, 17, 8, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 29, 8, 2, 1, 2, 1, 2, 1, 2, 5, 2, 34, 8, 2, 10, 2, 12, 2, 37, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 45, 8, 3, 1, 3, 1, 3, 1, 3, 5, 3, 50, 8, 3, 10, 3, 12, 3, 53, 9, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 65, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 73, 8, 4, 10, 4, 12, 4, 76, 9, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 87, 8, 5, 1, 6, 1, 6, 1, 6, 0, 3, 4, 6, 8, 7, 0, 2, 4, 6, 8, 10, 12, 0, 1, 2, 0, 9, 9, 12, 12, 97, 0, 16, 1, 0, 0, 0, 2, 18, 1, 0, 0, 0, 4, 28, 1, 0, 0, 0, 6, 44, 1, 0, 0, 0, 8, 64, 1, 0, 0, 0, 10, 86, 1, 0, 0, 0, 12, 88, 1, 0, 0, 0, 14, 17, 3, 2, 1, 0, 15, 17, 1, 0, 0, 0, 16, 14, 1, 0, 0, 0, 16, 15, 1, 0, 0, 0, 17, 1, 1, 0, 0, 0, 18, 19, 3, 4, 2, 0, 19, 3, 1, 0, 0, 0, 20, 21, 6, 2, -1, 0, 21, 22, 5, 1, 0, 0, 22, 23, 3, 4, 2, 0, 23, 24, 5, 2, 0, 0, 24, 29, 1, 0, 0, 0, 25, 26, 5, 3, 0, 0, 26, 29, 3, 4, 2, 3, 27, 29, 3, 6, 3, 0, 28, 20, 1, 0, 0, 0, 28, 25, 1, 0, 0, 0, 28, 27, 1, 0, 0, 0, 29, 35, 1, 0, 0, 0, 30, 31, 10, 2, 0, 0, 31, 32, 5, 6, 0, 0, 32, 34, 3, 4, 2, 3, 33, 30, 1, 0, 0, 0, 34, 37, 1, 0, 0, 0, 35, 33, 1, 0, 0, 0, 35, 36, 1, 0, 0, 0, 36, 5, 1, 0, 0, 0, 37, 35, 1, 0, 0, 0, 38, 39, 6, 3, -1, 0, 39, 40, 5, 1, 0, 0, 40, 41, 3, 6, 3, 0, 41, 42, 5, 2, 0, 0, 42, 45, 1, 0, 0, 0, 43, 45, 3, 8, 4, 0, 44, 38, 1, 0, 0, 0, 44, 43, 1, 0, 0, 0, 45, 51, 1, 0, 0, 0, 46, 47, 10, 2, 0, 0, 47, 48, 5, 7, 0, 0, 48, 50, 3, 6, 3, 3, 49, 46, 1, 0, 0, 0, 50, 53, 1, 0, 0, 0, 51, 49, 1, 0, 0, 0, 51, 52, 1, 0, 0, 0, 52, 7, 1, 0, 0, 0, 53, 51, 1, 0, 0, 0, 54, 55, 6, 4, -1, 0, 55, 65, 3, 10, 5, 0, 56, 57, 5, 4, 0, 0, 57, 65, 3, 8, 4, 3, 58, 59, 5, 3, 0, 0, 59, 65, 3, 8, 4, 2, 60, 61, 5, 1, 0, 0, 61, 62, 3, 8, 4, 0, 62, 63, 5, 2, 0, 0, 63, 65, 1, 0, 0, 0, 64, 54, 1, 0, 0, 0, 64, 56, 1, 0, 0, 0, 64, 58, 1, 0, 0, 0, 64, 60, 1, 0, 0, 0, 65, 74, 1, 0, 0, 0, 66, 67, 10, 5, 0, 0, 67, 68, 5, 8, 0, 0, 68, 73, 3, 8, 4, 6, 69, 70, 10, 4, 0, 0, 70, 71, 5, 4, 0, 0, 71, 73, 3, 8, 4, 5, 72, 66, 1, 0, 0, 0, 72, 69, 1, 0, 0, 0, 73, 76, 1, 0, 0, 0, 74, 72, 1, 0, 0, 0, 74, 75, 1, 0, 0, 0, 75, 9, 1, 0, 0, 0, 76, 74, 1, 0, 0, 0, 77, 78, 5, 1, 0, 0, 78, 79, 3, 10, 5, 0, 79, 80, 5, 2, 0, 0, 80, 87, 1, 0, 0, 0, 81, 87, 3, 12, 6, 0, 82, 87, 5, 11, 0, 0, 83, 84, 5, 11, 0, 0, 84, 85, 5, 5, 0, 0, 85, 87, 5, 11, 0, 0, 86, 77, 1, 0, 0, 0, 86, 81, 1, 0, 0, 0, 86, 82, 1, 0, 0, 0, 86, 83, 1, 0, 0, 0, 87, 11, 1, 0, 0, 0, 88, 89, 7, 0, 0, 0, 89, 13, 1, 0, 0, 0, 9, 16, 28, 35, 44, 51, 64, 72, 74, 86] \ No newline at end of file +[4, 1, 13, 85, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 1, 0, 1, 0, 3, 0, 15, 8, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 25, 8, 1, 1, 1, 1, 1, 1, 1, 5, 1, 30, 8, 1, 10, 1, 12, 1, 33, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 41, 8, 2, 1, 2, 1, 2, 1, 2, 5, 2, 46, 8, 2, 10, 2, 12, 2, 49, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 59, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 67, 8, 3, 10, 3, 12, 3, 70, 9, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 81, 8, 4, 1, 5, 1, 5, 1, 5, 0, 3, 2, 4, 6, 6, 0, 2, 4, 6, 8, 10, 0, 1, 2, 0, 9, 9, 12, 12, 91, 0, 14, 1, 0, 0, 0, 2, 24, 1, 0, 0, 0, 4, 40, 1, 0, 0, 0, 6, 58, 1, 0, 0, 0, 8, 80, 1, 0, 0, 0, 10, 82, 1, 0, 0, 0, 12, 15, 3, 2, 1, 0, 13, 15, 1, 0, 0, 0, 14, 12, 1, 0, 0, 0, 14, 13, 1, 0, 0, 0, 15, 1, 1, 0, 0, 0, 16, 17, 6, 1, -1, 0, 17, 18, 5, 1, 0, 0, 18, 19, 3, 2, 1, 0, 19, 20, 5, 2, 0, 0, 20, 25, 1, 0, 0, 0, 21, 22, 5, 3, 0, 0, 22, 25, 3, 2, 1, 3, 23, 25, 3, 4, 2, 0, 24, 16, 1, 0, 0, 0, 24, 21, 1, 0, 0, 0, 24, 23, 1, 0, 0, 0, 25, 31, 1, 0, 0, 0, 26, 27, 10, 2, 0, 0, 27, 28, 5, 6, 0, 0, 28, 30, 3, 2, 1, 3, 29, 26, 1, 0, 0, 0, 30, 33, 1, 0, 0, 0, 31, 29, 1, 0, 0, 0, 31, 32, 1, 0, 0, 0, 32, 3, 1, 0, 0, 0, 33, 31, 1, 0, 0, 0, 34, 35, 6, 2, -1, 0, 35, 36, 5, 1, 0, 0, 36, 37, 3, 4, 2, 0, 37, 38, 5, 2, 0, 0, 38, 41, 1, 0, 0, 0, 39, 41, 3, 6, 3, 0, 40, 34, 1, 0, 0, 0, 40, 39, 1, 0, 0, 0, 41, 47, 1, 0, 0, 0, 42, 43, 10, 2, 0, 0, 43, 44, 5, 7, 0, 0, 44, 46, 3, 4, 2, 3, 45, 42, 1, 0, 0, 0, 46, 49, 1, 0, 0, 0, 47, 45, 1, 0, 0, 0, 47, 48, 1, 0, 0, 0, 48, 5, 1, 0, 0, 0, 49, 47, 1, 0, 0, 0, 50, 51, 6, 3, -1, 0, 51, 59, 3, 8, 4, 0, 52, 53, 5, 3, 0, 0, 53, 59, 3, 6, 3, 2, 54, 55, 5, 1, 0, 0, 55, 56, 3, 6, 3, 0, 56, 57, 5, 2, 0, 0, 57, 59, 1, 0, 0, 0, 58, 50, 1, 0, 0, 0, 58, 52, 1, 0, 0, 0, 58, 54, 1, 0, 0, 0, 59, 68, 1, 0, 0, 0, 60, 61, 10, 4, 0, 0, 61, 62, 5, 8, 0, 0, 62, 67, 3, 6, 3, 5, 63, 64, 10, 3, 0, 0, 64, 65, 5, 4, 0, 0, 65, 67, 3, 6, 3, 4, 66, 60, 1, 0, 0, 0, 66, 63, 1, 0, 0, 0, 67, 70, 1, 0, 0, 0, 68, 66, 1, 0, 0, 0, 68, 69, 1, 0, 0, 0, 69, 7, 1, 0, 0, 0, 70, 68, 1, 0, 0, 0, 71, 72, 5, 1, 0, 0, 72, 73, 3, 8, 4, 0, 73, 74, 5, 2, 0, 0, 74, 81, 1, 0, 0, 0, 75, 81, 3, 10, 5, 0, 76, 81, 5, 11, 0, 0, 77, 78, 5, 11, 0, 0, 78, 79, 5, 5, 0, 0, 79, 81, 5, 11, 0, 0, 80, 71, 1, 0, 0, 0, 80, 75, 1, 0, 0, 0, 80, 76, 1, 0, 0, 0, 80, 77, 1, 0, 0, 0, 81, 9, 1, 0, 0, 0, 82, 83, 7, 0, 0, 0, 83, 11, 1, 0, 0, 0, 9, 14, 24, 31, 40, 47, 58, 66, 68, 80] \ No newline at end of file diff --git a/latte/src/main/java/refinements/.antlr/RefinementsLanguageLexer.interp b/latte/src/main/java/refinements/.antlr/RefinementsLanguageLexer.interp index 026a442..d6867f3 100644 --- a/latte/src/main/java/refinements/.antlr/RefinementsLanguageLexer.interp +++ b/latte/src/main/java/refinements/.antlr/RefinementsLanguageLexer.interp @@ -53,4 +53,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 13, 121, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 45, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 57, 8, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 70, 8, 8, 1, 9, 1, 9, 5, 9, 74, 8, 9, 10, 9, 12, 9, 77, 9, 9, 1, 10, 5, 10, 80, 8, 10, 10, 10, 12, 10, 83, 9, 10, 1, 10, 1, 10, 5, 10, 87, 8, 10, 10, 10, 12, 10, 90, 9, 10, 1, 11, 4, 11, 93, 8, 11, 11, 11, 12, 11, 94, 1, 11, 4, 11, 98, 8, 11, 11, 11, 12, 11, 99, 1, 11, 1, 11, 4, 11, 104, 8, 11, 11, 11, 12, 11, 105, 5, 11, 108, 8, 11, 10, 11, 12, 11, 111, 9, 11, 3, 11, 113, 8, 11, 1, 12, 4, 12, 116, 8, 12, 11, 12, 12, 12, 117, 1, 12, 1, 12, 0, 0, 13, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 1, 0, 7, 3, 0, 37, 37, 42, 43, 47, 47, 1, 0, 65, 90, 3, 0, 48, 57, 65, 90, 97, 122, 3, 0, 65, 90, 95, 95, 97, 122, 5, 0, 35, 35, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 3, 0, 9, 10, 13, 13, 32, 32, 137, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 1, 27, 1, 0, 0, 0, 3, 29, 1, 0, 0, 0, 5, 31, 1, 0, 0, 0, 7, 33, 1, 0, 0, 0, 9, 35, 1, 0, 0, 0, 11, 44, 1, 0, 0, 0, 13, 56, 1, 0, 0, 0, 15, 58, 1, 0, 0, 0, 17, 69, 1, 0, 0, 0, 19, 71, 1, 0, 0, 0, 21, 81, 1, 0, 0, 0, 23, 112, 1, 0, 0, 0, 25, 115, 1, 0, 0, 0, 27, 28, 5, 40, 0, 0, 28, 2, 1, 0, 0, 0, 29, 30, 5, 41, 0, 0, 30, 4, 1, 0, 0, 0, 31, 32, 5, 33, 0, 0, 32, 6, 1, 0, 0, 0, 33, 34, 5, 45, 0, 0, 34, 8, 1, 0, 0, 0, 35, 36, 5, 46, 0, 0, 36, 10, 1, 0, 0, 0, 37, 38, 5, 38, 0, 0, 38, 45, 5, 38, 0, 0, 39, 40, 5, 124, 0, 0, 40, 45, 5, 124, 0, 0, 41, 42, 5, 45, 0, 0, 42, 43, 5, 45, 0, 0, 43, 45, 5, 62, 0, 0, 44, 37, 1, 0, 0, 0, 44, 39, 1, 0, 0, 0, 44, 41, 1, 0, 0, 0, 45, 12, 1, 0, 0, 0, 46, 47, 5, 61, 0, 0, 47, 57, 5, 61, 0, 0, 48, 49, 5, 33, 0, 0, 49, 57, 5, 61, 0, 0, 50, 51, 5, 62, 0, 0, 51, 57, 5, 61, 0, 0, 52, 57, 5, 62, 0, 0, 53, 54, 5, 60, 0, 0, 54, 57, 5, 61, 0, 0, 55, 57, 5, 60, 0, 0, 56, 46, 1, 0, 0, 0, 56, 48, 1, 0, 0, 0, 56, 50, 1, 0, 0, 0, 56, 52, 1, 0, 0, 0, 56, 53, 1, 0, 0, 0, 56, 55, 1, 0, 0, 0, 57, 14, 1, 0, 0, 0, 58, 59, 7, 0, 0, 0, 59, 16, 1, 0, 0, 0, 60, 61, 5, 116, 0, 0, 61, 62, 5, 114, 0, 0, 62, 63, 5, 117, 0, 0, 63, 70, 5, 101, 0, 0, 64, 65, 5, 102, 0, 0, 65, 66, 5, 97, 0, 0, 66, 67, 5, 108, 0, 0, 67, 68, 5, 115, 0, 0, 68, 70, 5, 101, 0, 0, 69, 60, 1, 0, 0, 0, 69, 64, 1, 0, 0, 0, 70, 18, 1, 0, 0, 0, 71, 75, 7, 1, 0, 0, 72, 74, 7, 2, 0, 0, 73, 72, 1, 0, 0, 0, 74, 77, 1, 0, 0, 0, 75, 73, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 20, 1, 0, 0, 0, 77, 75, 1, 0, 0, 0, 78, 80, 5, 35, 0, 0, 79, 78, 1, 0, 0, 0, 80, 83, 1, 0, 0, 0, 81, 79, 1, 0, 0, 0, 81, 82, 1, 0, 0, 0, 82, 84, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 84, 88, 7, 3, 0, 0, 85, 87, 7, 4, 0, 0, 86, 85, 1, 0, 0, 0, 87, 90, 1, 0, 0, 0, 88, 86, 1, 0, 0, 0, 88, 89, 1, 0, 0, 0, 89, 22, 1, 0, 0, 0, 90, 88, 1, 0, 0, 0, 91, 93, 7, 5, 0, 0, 92, 91, 1, 0, 0, 0, 93, 94, 1, 0, 0, 0, 94, 92, 1, 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 113, 1, 0, 0, 0, 96, 98, 7, 5, 0, 0, 97, 96, 1, 0, 0, 0, 98, 99, 1, 0, 0, 0, 99, 97, 1, 0, 0, 0, 99, 100, 1, 0, 0, 0, 100, 109, 1, 0, 0, 0, 101, 103, 5, 95, 0, 0, 102, 104, 7, 5, 0, 0, 103, 102, 1, 0, 0, 0, 104, 105, 1, 0, 0, 0, 105, 103, 1, 0, 0, 0, 105, 106, 1, 0, 0, 0, 106, 108, 1, 0, 0, 0, 107, 101, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 113, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 92, 1, 0, 0, 0, 112, 97, 1, 0, 0, 0, 113, 24, 1, 0, 0, 0, 114, 116, 7, 6, 0, 0, 115, 114, 1, 0, 0, 0, 116, 117, 1, 0, 0, 0, 117, 115, 1, 0, 0, 0, 117, 118, 1, 0, 0, 0, 118, 119, 1, 0, 0, 0, 119, 120, 6, 12, 0, 0, 120, 26, 1, 0, 0, 0, 13, 0, 44, 56, 69, 75, 81, 88, 94, 99, 105, 109, 112, 117, 1, 0, 1, 0] \ No newline at end of file +[4, 0, 13, 113, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 42, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 49, 8, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 62, 8, 8, 1, 9, 1, 9, 5, 9, 66, 8, 9, 10, 9, 12, 9, 69, 9, 9, 1, 10, 5, 10, 72, 8, 10, 10, 10, 12, 10, 75, 9, 10, 1, 10, 1, 10, 5, 10, 79, 8, 10, 10, 10, 12, 10, 82, 9, 10, 1, 11, 4, 11, 85, 8, 11, 11, 11, 12, 11, 86, 1, 11, 4, 11, 90, 8, 11, 11, 11, 12, 11, 91, 1, 11, 1, 11, 4, 11, 96, 8, 11, 11, 11, 12, 11, 97, 5, 11, 100, 8, 11, 10, 11, 12, 11, 103, 9, 11, 3, 11, 105, 8, 11, 1, 12, 4, 12, 108, 8, 12, 11, 12, 12, 12, 109, 1, 12, 1, 12, 0, 0, 13, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 1, 0, 7, 2, 0, 42, 43, 47, 47, 1, 0, 65, 90, 3, 0, 48, 57, 65, 90, 97, 122, 3, 0, 65, 90, 95, 95, 97, 122, 5, 0, 35, 35, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 3, 0, 9, 10, 13, 13, 32, 32, 125, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 1, 27, 1, 0, 0, 0, 3, 29, 1, 0, 0, 0, 5, 31, 1, 0, 0, 0, 7, 33, 1, 0, 0, 0, 9, 35, 1, 0, 0, 0, 11, 41, 1, 0, 0, 0, 13, 48, 1, 0, 0, 0, 15, 50, 1, 0, 0, 0, 17, 61, 1, 0, 0, 0, 19, 63, 1, 0, 0, 0, 21, 73, 1, 0, 0, 0, 23, 104, 1, 0, 0, 0, 25, 107, 1, 0, 0, 0, 27, 28, 5, 40, 0, 0, 28, 2, 1, 0, 0, 0, 29, 30, 5, 41, 0, 0, 30, 4, 1, 0, 0, 0, 31, 32, 5, 33, 0, 0, 32, 6, 1, 0, 0, 0, 33, 34, 5, 45, 0, 0, 34, 8, 1, 0, 0, 0, 35, 36, 5, 46, 0, 0, 36, 10, 1, 0, 0, 0, 37, 38, 5, 38, 0, 0, 38, 42, 5, 38, 0, 0, 39, 40, 5, 124, 0, 0, 40, 42, 5, 124, 0, 0, 41, 37, 1, 0, 0, 0, 41, 39, 1, 0, 0, 0, 42, 12, 1, 0, 0, 0, 43, 44, 5, 61, 0, 0, 44, 49, 5, 61, 0, 0, 45, 46, 5, 60, 0, 0, 46, 49, 5, 61, 0, 0, 47, 49, 5, 60, 0, 0, 48, 43, 1, 0, 0, 0, 48, 45, 1, 0, 0, 0, 48, 47, 1, 0, 0, 0, 49, 14, 1, 0, 0, 0, 50, 51, 7, 0, 0, 0, 51, 16, 1, 0, 0, 0, 52, 53, 5, 116, 0, 0, 53, 54, 5, 114, 0, 0, 54, 55, 5, 117, 0, 0, 55, 62, 5, 101, 0, 0, 56, 57, 5, 102, 0, 0, 57, 58, 5, 97, 0, 0, 58, 59, 5, 108, 0, 0, 59, 60, 5, 115, 0, 0, 60, 62, 5, 101, 0, 0, 61, 52, 1, 0, 0, 0, 61, 56, 1, 0, 0, 0, 62, 18, 1, 0, 0, 0, 63, 67, 7, 1, 0, 0, 64, 66, 7, 2, 0, 0, 65, 64, 1, 0, 0, 0, 66, 69, 1, 0, 0, 0, 67, 65, 1, 0, 0, 0, 67, 68, 1, 0, 0, 0, 68, 20, 1, 0, 0, 0, 69, 67, 1, 0, 0, 0, 70, 72, 5, 35, 0, 0, 71, 70, 1, 0, 0, 0, 72, 75, 1, 0, 0, 0, 73, 71, 1, 0, 0, 0, 73, 74, 1, 0, 0, 0, 74, 76, 1, 0, 0, 0, 75, 73, 1, 0, 0, 0, 76, 80, 7, 3, 0, 0, 77, 79, 7, 4, 0, 0, 78, 77, 1, 0, 0, 0, 79, 82, 1, 0, 0, 0, 80, 78, 1, 0, 0, 0, 80, 81, 1, 0, 0, 0, 81, 22, 1, 0, 0, 0, 82, 80, 1, 0, 0, 0, 83, 85, 7, 5, 0, 0, 84, 83, 1, 0, 0, 0, 85, 86, 1, 0, 0, 0, 86, 84, 1, 0, 0, 0, 86, 87, 1, 0, 0, 0, 87, 105, 1, 0, 0, 0, 88, 90, 7, 5, 0, 0, 89, 88, 1, 0, 0, 0, 90, 91, 1, 0, 0, 0, 91, 89, 1, 0, 0, 0, 91, 92, 1, 0, 0, 0, 92, 101, 1, 0, 0, 0, 93, 95, 5, 95, 0, 0, 94, 96, 7, 5, 0, 0, 95, 94, 1, 0, 0, 0, 96, 97, 1, 0, 0, 0, 97, 95, 1, 0, 0, 0, 97, 98, 1, 0, 0, 0, 98, 100, 1, 0, 0, 0, 99, 93, 1, 0, 0, 0, 100, 103, 1, 0, 0, 0, 101, 99, 1, 0, 0, 0, 101, 102, 1, 0, 0, 0, 102, 105, 1, 0, 0, 0, 103, 101, 1, 0, 0, 0, 104, 84, 1, 0, 0, 0, 104, 89, 1, 0, 0, 0, 105, 24, 1, 0, 0, 0, 106, 108, 7, 6, 0, 0, 107, 106, 1, 0, 0, 0, 108, 109, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 111, 1, 0, 0, 0, 111, 112, 6, 12, 0, 0, 112, 26, 1, 0, 0, 0, 13, 0, 41, 48, 61, 67, 73, 80, 86, 91, 97, 101, 104, 109, 1, 0, 1, 0] \ No newline at end of file diff --git a/latte/src/main/java/refinements/.antlr/RefinementsLanguageLexer.java b/latte/src/main/java/refinements/.antlr/RefinementsLanguageLexer.java index cef7c64..db2999c 100644 --- a/latte/src/main/java/refinements/.antlr/RefinementsLanguageLexer.java +++ b/latte/src/main/java/refinements/.antlr/RefinementsLanguageLexer.java @@ -105,80 +105,74 @@ public RefinementsLanguageLexer(CharStream input) { public ATN getATN() { return _ATN; } public static final String _serializedATN = - "\u0004\u0000\ry\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ + "\u0004\u0000\rq\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ "\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+ "\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+ "\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+ "\u0007\u000b\u0002\f\u0007\f\u0001\u0000\u0001\u0000\u0001\u0001\u0001"+ "\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001"+ - "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001"+ - "\u0005\u0001\u0005\u0003\u0005-\b\u0005\u0001\u0006\u0001\u0006\u0001"+ - "\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001"+ - "\u0006\u0001\u0006\u0003\u00069\b\u0006\u0001\u0007\u0001\u0007\u0001"+ - "\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0003"+ - "\bF\b\b\u0001\t\u0001\t\u0005\tJ\b\t\n\t\f\tM\t\t\u0001\n\u0005\nP\b\n"+ - "\n\n\f\nS\t\n\u0001\n\u0001\n\u0005\nW\b\n\n\n\f\nZ\t\n\u0001\u000b\u0004"+ - "\u000b]\b\u000b\u000b\u000b\f\u000b^\u0001\u000b\u0004\u000bb\b\u000b"+ - "\u000b\u000b\f\u000bc\u0001\u000b\u0001\u000b\u0004\u000bh\b\u000b\u000b"+ - "\u000b\f\u000bi\u0005\u000bl\b\u000b\n\u000b\f\u000bo\t\u000b\u0003\u000b"+ - "q\b\u000b\u0001\f\u0004\ft\b\f\u000b\f\f\fu\u0001\f\u0001\f\u0000\u0000"+ - "\r\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006"+ - "\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u0001\u0000"+ - "\u0007\u0003\u0000%%*+//\u0001\u0000AZ\u0003\u000009AZaz\u0003\u0000A"+ - "Z__az\u0005\u0000##09AZ__az\u0001\u000009\u0003\u0000\t\n\r\r \u0089"+ - "\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0000"+ - "\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000\u0000"+ - "\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000\u0000"+ - "\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000\u0011"+ - "\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000\u0015"+ - "\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000\u0019"+ - "\u0001\u0000\u0000\u0000\u0001\u001b\u0001\u0000\u0000\u0000\u0003\u001d"+ - "\u0001\u0000\u0000\u0000\u0005\u001f\u0001\u0000\u0000\u0000\u0007!\u0001"+ - "\u0000\u0000\u0000\t#\u0001\u0000\u0000\u0000\u000b,\u0001\u0000\u0000"+ - "\u0000\r8\u0001\u0000\u0000\u0000\u000f:\u0001\u0000\u0000\u0000\u0011"+ - "E\u0001\u0000\u0000\u0000\u0013G\u0001\u0000\u0000\u0000\u0015Q\u0001"+ - "\u0000\u0000\u0000\u0017p\u0001\u0000\u0000\u0000\u0019s\u0001\u0000\u0000"+ - "\u0000\u001b\u001c\u0005(\u0000\u0000\u001c\u0002\u0001\u0000\u0000\u0000"+ - "\u001d\u001e\u0005)\u0000\u0000\u001e\u0004\u0001\u0000\u0000\u0000\u001f"+ - " \u0005!\u0000\u0000 \u0006\u0001\u0000\u0000\u0000!\"\u0005-\u0000\u0000"+ - "\"\b\u0001\u0000\u0000\u0000#$\u0005.\u0000\u0000$\n\u0001\u0000\u0000"+ - "\u0000%&\u0005&\u0000\u0000&-\u0005&\u0000\u0000\'(\u0005|\u0000\u0000"+ - "(-\u0005|\u0000\u0000)*\u0005-\u0000\u0000*+\u0005-\u0000\u0000+-\u0005"+ - ">\u0000\u0000,%\u0001\u0000\u0000\u0000,\'\u0001\u0000\u0000\u0000,)\u0001"+ - "\u0000\u0000\u0000-\f\u0001\u0000\u0000\u0000./\u0005=\u0000\u0000/9\u0005"+ - "=\u0000\u000001\u0005!\u0000\u000019\u0005=\u0000\u000023\u0005>\u0000"+ - "\u000039\u0005=\u0000\u000049\u0005>\u0000\u000056\u0005<\u0000\u0000"+ - "69\u0005=\u0000\u000079\u0005<\u0000\u00008.\u0001\u0000\u0000\u00008"+ - "0\u0001\u0000\u0000\u000082\u0001\u0000\u0000\u000084\u0001\u0000\u0000"+ - "\u000085\u0001\u0000\u0000\u000087\u0001\u0000\u0000\u00009\u000e\u0001"+ - "\u0000\u0000\u0000:;\u0007\u0000\u0000\u0000;\u0010\u0001\u0000\u0000"+ - "\u0000<=\u0005t\u0000\u0000=>\u0005r\u0000\u0000>?\u0005u\u0000\u0000"+ - "?F\u0005e\u0000\u0000@A\u0005f\u0000\u0000AB\u0005a\u0000\u0000BC\u0005"+ - "l\u0000\u0000CD\u0005s\u0000\u0000DF\u0005e\u0000\u0000E<\u0001\u0000"+ - "\u0000\u0000E@\u0001\u0000\u0000\u0000F\u0012\u0001\u0000\u0000\u0000"+ - "GK\u0007\u0001\u0000\u0000HJ\u0007\u0002\u0000\u0000IH\u0001\u0000\u0000"+ - "\u0000JM\u0001\u0000\u0000\u0000KI\u0001\u0000\u0000\u0000KL\u0001\u0000"+ - "\u0000\u0000L\u0014\u0001\u0000\u0000\u0000MK\u0001\u0000\u0000\u0000"+ - "NP\u0005#\u0000\u0000ON\u0001\u0000\u0000\u0000PS\u0001\u0000\u0000\u0000"+ - "QO\u0001\u0000\u0000\u0000QR\u0001\u0000\u0000\u0000RT\u0001\u0000\u0000"+ - "\u0000SQ\u0001\u0000\u0000\u0000TX\u0007\u0003\u0000\u0000UW\u0007\u0004"+ - "\u0000\u0000VU\u0001\u0000\u0000\u0000WZ\u0001\u0000\u0000\u0000XV\u0001"+ - "\u0000\u0000\u0000XY\u0001\u0000\u0000\u0000Y\u0016\u0001\u0000\u0000"+ - "\u0000ZX\u0001\u0000\u0000\u0000[]\u0007\u0005\u0000\u0000\\[\u0001\u0000"+ - "\u0000\u0000]^\u0001\u0000\u0000\u0000^\\\u0001\u0000\u0000\u0000^_\u0001"+ - "\u0000\u0000\u0000_q\u0001\u0000\u0000\u0000`b\u0007\u0005\u0000\u0000"+ - "a`\u0001\u0000\u0000\u0000bc\u0001\u0000\u0000\u0000ca\u0001\u0000\u0000"+ - "\u0000cd\u0001\u0000\u0000\u0000dm\u0001\u0000\u0000\u0000eg\u0005_\u0000"+ - "\u0000fh\u0007\u0005\u0000\u0000gf\u0001\u0000\u0000\u0000hi\u0001\u0000"+ - "\u0000\u0000ig\u0001\u0000\u0000\u0000ij\u0001\u0000\u0000\u0000jl\u0001"+ - "\u0000\u0000\u0000ke\u0001\u0000\u0000\u0000lo\u0001\u0000\u0000\u0000"+ - "mk\u0001\u0000\u0000\u0000mn\u0001\u0000\u0000\u0000nq\u0001\u0000\u0000"+ - "\u0000om\u0001\u0000\u0000\u0000p\\\u0001\u0000\u0000\u0000pa\u0001\u0000"+ - "\u0000\u0000q\u0018\u0001\u0000\u0000\u0000rt\u0007\u0006\u0000\u0000"+ - "sr\u0001\u0000\u0000\u0000tu\u0001\u0000\u0000\u0000us\u0001\u0000\u0000"+ - "\u0000uv\u0001\u0000\u0000\u0000vw\u0001\u0000\u0000\u0000wx\u0006\f\u0000"+ - "\u0000x\u001a\u0001\u0000\u0000\u0000\r\u0000,8EKQX^cimpu\u0001\u0000"+ - "\u0001\u0000"; + "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0003\u0005*\b"+ + "\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0003"+ + "\u00061\b\u0006\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001"+ + "\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0003\b>\b\b\u0001\t\u0001"+ + "\t\u0005\tB\b\t\n\t\f\tE\t\t\u0001\n\u0005\nH\b\n\n\n\f\nK\t\n\u0001\n"+ + "\u0001\n\u0005\nO\b\n\n\n\f\nR\t\n\u0001\u000b\u0004\u000bU\b\u000b\u000b"+ + "\u000b\f\u000bV\u0001\u000b\u0004\u000bZ\b\u000b\u000b\u000b\f\u000b["+ + "\u0001\u000b\u0001\u000b\u0004\u000b`\b\u000b\u000b\u000b\f\u000ba\u0005"+ + "\u000bd\b\u000b\n\u000b\f\u000bg\t\u000b\u0003\u000bi\b\u000b\u0001\f"+ + "\u0004\fl\b\f\u000b\f\f\fm\u0001\f\u0001\f\u0000\u0000\r\u0001\u0001\u0003"+ + "\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006\r\u0007\u000f\b\u0011"+ + "\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u0001\u0000\u0007\u0002\u0000*"+ + "+//\u0001\u0000AZ\u0003\u000009AZaz\u0003\u0000AZ__az\u0005\u0000##09"+ + "AZ__az\u0001\u000009\u0003\u0000\t\n\r\r }\u0000\u0001\u0001\u0000\u0000"+ + "\u0000\u0000\u0003\u0001\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000"+ + "\u0000\u0000\u0007\u0001\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000"+ + "\u0000\u000b\u0001\u0000\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000"+ + "\u000f\u0001\u0000\u0000\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000"+ + "\u0013\u0001\u0000\u0000\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000"+ + "\u0017\u0001\u0000\u0000\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0001"+ + "\u001b\u0001\u0000\u0000\u0000\u0003\u001d\u0001\u0000\u0000\u0000\u0005"+ + "\u001f\u0001\u0000\u0000\u0000\u0007!\u0001\u0000\u0000\u0000\t#\u0001"+ + "\u0000\u0000\u0000\u000b)\u0001\u0000\u0000\u0000\r0\u0001\u0000\u0000"+ + "\u0000\u000f2\u0001\u0000\u0000\u0000\u0011=\u0001\u0000\u0000\u0000\u0013"+ + "?\u0001\u0000\u0000\u0000\u0015I\u0001\u0000\u0000\u0000\u0017h\u0001"+ + "\u0000\u0000\u0000\u0019k\u0001\u0000\u0000\u0000\u001b\u001c\u0005(\u0000"+ + "\u0000\u001c\u0002\u0001\u0000\u0000\u0000\u001d\u001e\u0005)\u0000\u0000"+ + "\u001e\u0004\u0001\u0000\u0000\u0000\u001f \u0005!\u0000\u0000 \u0006"+ + "\u0001\u0000\u0000\u0000!\"\u0005-\u0000\u0000\"\b\u0001\u0000\u0000\u0000"+ + "#$\u0005.\u0000\u0000$\n\u0001\u0000\u0000\u0000%&\u0005&\u0000\u0000"+ + "&*\u0005&\u0000\u0000\'(\u0005|\u0000\u0000(*\u0005|\u0000\u0000)%\u0001"+ + "\u0000\u0000\u0000)\'\u0001\u0000\u0000\u0000*\f\u0001\u0000\u0000\u0000"+ + "+,\u0005=\u0000\u0000,1\u0005=\u0000\u0000-.\u0005<\u0000\u0000.1\u0005"+ + "=\u0000\u0000/1\u0005<\u0000\u00000+\u0001\u0000\u0000\u00000-\u0001\u0000"+ + "\u0000\u00000/\u0001\u0000\u0000\u00001\u000e\u0001\u0000\u0000\u0000"+ + "23\u0007\u0000\u0000\u00003\u0010\u0001\u0000\u0000\u000045\u0005t\u0000"+ + "\u000056\u0005r\u0000\u000067\u0005u\u0000\u00007>\u0005e\u0000\u0000"+ + "89\u0005f\u0000\u00009:\u0005a\u0000\u0000:;\u0005l\u0000\u0000;<\u0005"+ + "s\u0000\u0000<>\u0005e\u0000\u0000=4\u0001\u0000\u0000\u0000=8\u0001\u0000"+ + "\u0000\u0000>\u0012\u0001\u0000\u0000\u0000?C\u0007\u0001\u0000\u0000"+ + "@B\u0007\u0002\u0000\u0000A@\u0001\u0000\u0000\u0000BE\u0001\u0000\u0000"+ + "\u0000CA\u0001\u0000\u0000\u0000CD\u0001\u0000\u0000\u0000D\u0014\u0001"+ + "\u0000\u0000\u0000EC\u0001\u0000\u0000\u0000FH\u0005#\u0000\u0000GF\u0001"+ + "\u0000\u0000\u0000HK\u0001\u0000\u0000\u0000IG\u0001\u0000\u0000\u0000"+ + "IJ\u0001\u0000\u0000\u0000JL\u0001\u0000\u0000\u0000KI\u0001\u0000\u0000"+ + "\u0000LP\u0007\u0003\u0000\u0000MO\u0007\u0004\u0000\u0000NM\u0001\u0000"+ + "\u0000\u0000OR\u0001\u0000\u0000\u0000PN\u0001\u0000\u0000\u0000PQ\u0001"+ + "\u0000\u0000\u0000Q\u0016\u0001\u0000\u0000\u0000RP\u0001\u0000\u0000"+ + "\u0000SU\u0007\u0005\u0000\u0000TS\u0001\u0000\u0000\u0000UV\u0001\u0000"+ + "\u0000\u0000VT\u0001\u0000\u0000\u0000VW\u0001\u0000\u0000\u0000Wi\u0001"+ + "\u0000\u0000\u0000XZ\u0007\u0005\u0000\u0000YX\u0001\u0000\u0000\u0000"+ + "Z[\u0001\u0000\u0000\u0000[Y\u0001\u0000\u0000\u0000[\\\u0001\u0000\u0000"+ + "\u0000\\e\u0001\u0000\u0000\u0000]_\u0005_\u0000\u0000^`\u0007\u0005\u0000"+ + "\u0000_^\u0001\u0000\u0000\u0000`a\u0001\u0000\u0000\u0000a_\u0001\u0000"+ + "\u0000\u0000ab\u0001\u0000\u0000\u0000bd\u0001\u0000\u0000\u0000c]\u0001"+ + "\u0000\u0000\u0000dg\u0001\u0000\u0000\u0000ec\u0001\u0000\u0000\u0000"+ + "ef\u0001\u0000\u0000\u0000fi\u0001\u0000\u0000\u0000ge\u0001\u0000\u0000"+ + "\u0000hT\u0001\u0000\u0000\u0000hY\u0001\u0000\u0000\u0000i\u0018\u0001"+ + "\u0000\u0000\u0000jl\u0007\u0006\u0000\u0000kj\u0001\u0000\u0000\u0000"+ + "lm\u0001\u0000\u0000\u0000mk\u0001\u0000\u0000\u0000mn\u0001\u0000\u0000"+ + "\u0000no\u0001\u0000\u0000\u0000op\u0006\f\u0000\u0000p\u001a\u0001\u0000"+ + "\u0000\u0000\r\u0000)0=CIPV[aehm\u0001\u0000\u0001\u0000"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/latte/src/main/java/refinements/.antlr/RefinementsLanguageParser.java b/latte/src/main/java/refinements/.antlr/RefinementsLanguageParser.java index bdb6149..e798ff4 100644 --- a/latte/src/main/java/refinements/.antlr/RefinementsLanguageParser.java +++ b/latte/src/main/java/refinements/.antlr/RefinementsLanguageParser.java @@ -19,11 +19,11 @@ public class RefinementsLanguageParser extends Parser { T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, LOGOP=6, BOOLOP=7, ARITHOP=8, BOOL=9, ID_UPPER=10, ID=11, INT=12, WS=13; public static final int - RULE_prog = 0, RULE_start = 1, RULE_pred = 2, RULE_exp = 3, RULE_operand = 4, - RULE_literalExpression = 5, RULE_literal = 6; + RULE_prog = 0, RULE_pred = 1, RULE_exp = 2, RULE_operand = 3, RULE_leafs = 4, + RULE_literal = 5; private static String[] makeRuleNames() { return new String[] { - "prog", "start", "pred", "exp", "operand", "literalExpression", "literal" + "prog", "pred", "exp", "operand", "leafs", "literal" }; } public static final String[] ruleNames = makeRuleNames(); @@ -93,8 +93,8 @@ public RefinementsLanguageParser(TokenStream input) { @SuppressWarnings("CheckReturnValue") public static class ProgContext extends ParserRuleContext { - public StartContext start() { - return getRuleContext(StartContext.class,0); + public PredContext pred() { + return getRuleContext(PredContext.class,0); } public ProgContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); @@ -106,19 +106,18 @@ public final ProgContext prog() throws RecognitionException { ProgContext _localctx = new ProgContext(_ctx, getState()); enterRule(_localctx, 0, RULE_prog); try { - setState(16); + setState(14); _errHandler.sync(this); switch (_input.LA(1)) { case T__0: case T__2: - case T__3: case BOOL: case ID: case INT: enterOuterAlt(_localctx, 1); { - setState(14); - start(); + setState(12); + pred(0); } break; case EOF: @@ -141,48 +140,6 @@ public final ProgContext prog() throws RecognitionException { return _localctx; } - @SuppressWarnings("CheckReturnValue") - public static class StartContext extends ParserRuleContext { - public StartContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_start; } - - public StartContext() { } - public void copyFrom(StartContext ctx) { - super.copyFrom(ctx); - } - } - @SuppressWarnings("CheckReturnValue") - public static class StartPredContext extends StartContext { - public PredContext pred() { - return getRuleContext(PredContext.class,0); - } - public StartPredContext(StartContext ctx) { copyFrom(ctx); } - } - - public final StartContext start() throws RecognitionException { - StartContext _localctx = new StartContext(_ctx, getState()); - enterRule(_localctx, 2, RULE_start); - try { - _localctx = new StartPredContext(_localctx); - enterOuterAlt(_localctx, 1); - { - setState(18); - pred(0); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - @SuppressWarnings("CheckReturnValue") public static class PredContext extends ParserRuleContext { public PredContext(ParserRuleContext parent, int invokingState) { @@ -237,13 +194,13 @@ private PredContext pred(int _p) throws RecognitionException { int _parentState = getState(); PredContext _localctx = new PredContext(_ctx, _parentState); PredContext _prevctx = _localctx; - int _startState = 4; - enterRecursionRule(_localctx, 4, RULE_pred, _p); + int _startState = 2; + enterRecursionRule(_localctx, 2, RULE_pred, _p); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(28); + setState(24); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,1,_ctx) ) { case 1: @@ -252,11 +209,11 @@ private PredContext pred(int _p) throws RecognitionException { _ctx = _localctx; _prevctx = _localctx; - setState(21); + setState(17); match(T__0); - setState(22); + setState(18); pred(0); - setState(23); + setState(19); match(T__1); } break; @@ -265,9 +222,9 @@ private PredContext pred(int _p) throws RecognitionException { _localctx = new PredNegateContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(25); + setState(21); match(T__2); - setState(26); + setState(22); pred(3); } break; @@ -276,13 +233,13 @@ private PredContext pred(int _p) throws RecognitionException { _localctx = new PredExpContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(27); + setState(23); exp(0); } break; } _ctx.stop = _input.LT(-1); - setState(35); + setState(31); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,2,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -293,16 +250,16 @@ private PredContext pred(int _p) throws RecognitionException { { _localctx = new PredLogicContext(new PredContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_pred); - setState(30); + setState(26); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(31); + setState(27); match(LOGOP); - setState(32); + setState(28); pred(3); } } } - setState(37); + setState(33); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,2,_ctx); } @@ -366,13 +323,13 @@ private ExpContext exp(int _p) throws RecognitionException { int _parentState = getState(); ExpContext _localctx = new ExpContext(_ctx, _parentState); ExpContext _prevctx = _localctx; - int _startState = 6; - enterRecursionRule(_localctx, 6, RULE_exp, _p); + int _startState = 4; + enterRecursionRule(_localctx, 4, RULE_exp, _p); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(44); + setState(40); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,3,_ctx) ) { case 1: @@ -381,11 +338,11 @@ private ExpContext exp(int _p) throws RecognitionException { _ctx = _localctx; _prevctx = _localctx; - setState(39); + setState(35); match(T__0); - setState(40); + setState(36); exp(0); - setState(41); + setState(37); match(T__1); } break; @@ -394,13 +351,13 @@ private ExpContext exp(int _p) throws RecognitionException { _localctx = new ExpOperandContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(43); + setState(39); operand(0); } break; } _ctx.stop = _input.LT(-1); - setState(51); + setState(47); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,4,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -411,16 +368,16 @@ private ExpContext exp(int _p) throws RecognitionException { { _localctx = new ExpBoolContext(new ExpContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_exp); - setState(46); + setState(42); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(47); + setState(43); match(BOOLOP); - setState(48); + setState(44); exp(3); } } } - setState(53); + setState(49); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,4,_ctx); } @@ -469,8 +426,8 @@ public OperandContext operand() { } @SuppressWarnings("CheckReturnValue") public static class OpLiteralContext extends OperandContext { - public LiteralExpressionContext literalExpression() { - return getRuleContext(LiteralExpressionContext.class,0); + public LeafsContext leafs() { + return getRuleContext(LeafsContext.class,0); } public OpLiteralContext(OperandContext ctx) { copyFrom(ctx); } } @@ -482,13 +439,6 @@ public OperandContext operand() { public OpGroupContext(OperandContext ctx) { copyFrom(ctx); } } @SuppressWarnings("CheckReturnValue") - public static class OpMinusContext extends OperandContext { - public OperandContext operand() { - return getRuleContext(OperandContext.class,0); - } - public OpMinusContext(OperandContext ctx) { copyFrom(ctx); } - } - @SuppressWarnings("CheckReturnValue") public static class OpSubContext extends OperandContext { public List operand() { return getRuleContexts(OperandContext.class); @@ -508,13 +458,13 @@ private OperandContext operand(int _p) throws RecognitionException { int _parentState = getState(); OperandContext _localctx = new OperandContext(_ctx, _parentState); OperandContext _prevctx = _localctx; - int _startState = 8; - enterRecursionRule(_localctx, 8, RULE_operand, _p); + int _startState = 6; + enterRecursionRule(_localctx, 6, RULE_operand, _p); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(64); + setState(58); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,5,_ctx) ) { case 1: @@ -523,48 +473,37 @@ private OperandContext operand(int _p) throws RecognitionException { _ctx = _localctx; _prevctx = _localctx; - setState(55); - literalExpression(); + setState(51); + leafs(); } break; case 2: - { - _localctx = new OpMinusContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - setState(56); - match(T__3); - setState(57); - operand(3); - } - break; - case 3: { _localctx = new OpNotContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(58); + setState(52); match(T__2); - setState(59); + setState(53); operand(2); } break; - case 4: + case 3: { _localctx = new OpGroupContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(60); + setState(54); match(T__0); - setState(61); + setState(55); operand(0); - setState(62); + setState(56); match(T__1); } break; } _ctx.stop = _input.LT(-1); - setState(74); + setState(68); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,7,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -572,37 +511,37 @@ private OperandContext operand(int _p) throws RecognitionException { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(72); + setState(66); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) { case 1: { _localctx = new OpArithContext(new OperandContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_operand); - setState(66); - if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)"); - setState(67); + setState(60); + if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)"); + setState(61); match(ARITHOP); - setState(68); - operand(6); + setState(62); + operand(5); } break; case 2: { _localctx = new OpSubContext(new OperandContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_operand); - setState(69); - if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)"); - setState(70); + setState(63); + if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)"); + setState(64); match(T__3); - setState(71); - operand(5); + setState(65); + operand(4); } break; } } } - setState(76); + setState(70); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,7,_ctx); } @@ -620,61 +559,61 @@ private OperandContext operand(int _p) throws RecognitionException { } @SuppressWarnings("CheckReturnValue") - public static class LiteralExpressionContext extends ParserRuleContext { - public LiteralExpressionContext(ParserRuleContext parent, int invokingState) { + public static class LeafsContext extends ParserRuleContext { + public LeafsContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } - @Override public int getRuleIndex() { return RULE_literalExpression; } + @Override public int getRuleIndex() { return RULE_leafs; } - public LiteralExpressionContext() { } - public void copyFrom(LiteralExpressionContext ctx) { + public LeafsContext() { } + public void copyFrom(LeafsContext ctx) { super.copyFrom(ctx); } } @SuppressWarnings("CheckReturnValue") - public static class TargetInvocationContext extends LiteralExpressionContext { + public static class TargetInvocationContext extends LeafsContext { public List ID() { return getTokens(RefinementsLanguageParser.ID); } public TerminalNode ID(int i) { return getToken(RefinementsLanguageParser.ID, i); } - public TargetInvocationContext(LiteralExpressionContext ctx) { copyFrom(ctx); } + public TargetInvocationContext(LeafsContext ctx) { copyFrom(ctx); } } @SuppressWarnings("CheckReturnValue") - public static class LitGroupContext extends LiteralExpressionContext { - public LiteralExpressionContext literalExpression() { - return getRuleContext(LiteralExpressionContext.class,0); + public static class LitGroupContext extends LeafsContext { + public LeafsContext leafs() { + return getRuleContext(LeafsContext.class,0); } - public LitGroupContext(LiteralExpressionContext ctx) { copyFrom(ctx); } + public LitGroupContext(LeafsContext ctx) { copyFrom(ctx); } } @SuppressWarnings("CheckReturnValue") - public static class LitContext extends LiteralExpressionContext { + public static class LitContext extends LeafsContext { public LiteralContext literal() { return getRuleContext(LiteralContext.class,0); } - public LitContext(LiteralExpressionContext ctx) { copyFrom(ctx); } + public LitContext(LeafsContext ctx) { copyFrom(ctx); } } @SuppressWarnings("CheckReturnValue") - public static class VarContext extends LiteralExpressionContext { + public static class VarContext extends LeafsContext { public TerminalNode ID() { return getToken(RefinementsLanguageParser.ID, 0); } - public VarContext(LiteralExpressionContext ctx) { copyFrom(ctx); } + public VarContext(LeafsContext ctx) { copyFrom(ctx); } } - public final LiteralExpressionContext literalExpression() throws RecognitionException { - LiteralExpressionContext _localctx = new LiteralExpressionContext(_ctx, getState()); - enterRule(_localctx, 10, RULE_literalExpression); + public final LeafsContext leafs() throws RecognitionException { + LeafsContext _localctx = new LeafsContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_leafs); try { - setState(86); + setState(80); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,8,_ctx) ) { case 1: _localctx = new LitGroupContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(77); + setState(71); match(T__0); - setState(78); - literalExpression(); - setState(79); + setState(72); + leafs(); + setState(73); match(T__1); } break; @@ -682,7 +621,7 @@ public final LiteralExpressionContext literalExpression() throws RecognitionExce _localctx = new LitContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(81); + setState(75); literal(); } break; @@ -690,7 +629,7 @@ public final LiteralExpressionContext literalExpression() throws RecognitionExce _localctx = new VarContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(82); + setState(76); match(ID); } break; @@ -698,11 +637,11 @@ public final LiteralExpressionContext literalExpression() throws RecognitionExce _localctx = new TargetInvocationContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(83); + setState(77); match(ID); - setState(84); + setState(78); match(T__4); - setState(85); + setState(79); match(ID); } break; @@ -731,12 +670,12 @@ public LiteralContext(ParserRuleContext parent, int invokingState) { public final LiteralContext literal() throws RecognitionException { LiteralContext _localctx = new LiteralContext(_ctx, getState()); - enterRule(_localctx, 12, RULE_literal); + enterRule(_localctx, 10, RULE_literal); int _la; try { enterOuterAlt(_localctx, 1); { - setState(88); + setState(82); _la = _input.LA(1); if ( !(_la==BOOL || _la==INT) ) { _errHandler.recoverInline(this); @@ -761,11 +700,11 @@ public final LiteralContext literal() throws RecognitionException { public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { switch (ruleIndex) { - case 2: + case 1: return pred_sempred((PredContext)_localctx, predIndex); - case 3: + case 2: return exp_sempred((ExpContext)_localctx, predIndex); - case 4: + case 3: return operand_sempred((OperandContext)_localctx, predIndex); } return true; @@ -787,69 +726,67 @@ private boolean exp_sempred(ExpContext _localctx, int predIndex) { private boolean operand_sempred(OperandContext _localctx, int predIndex) { switch (predIndex) { case 2: - return precpred(_ctx, 5); - case 3: return precpred(_ctx, 4); + case 3: + return precpred(_ctx, 3); } return true; } public static final String _serializedATN = - "\u0004\u0001\r[\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0004\u0001\rU\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ - "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0001\u0000\u0001\u0000\u0003"+ - "\u0000\u0011\b\u0000\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001"+ - "\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0003"+ - "\u0002\u001d\b\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0005\u0002\""+ - "\b\u0002\n\u0002\f\u0002%\t\u0002\u0001\u0003\u0001\u0003\u0001\u0003"+ - "\u0001\u0003\u0001\u0003\u0001\u0003\u0003\u0003-\b\u0003\u0001\u0003"+ - "\u0001\u0003\u0001\u0003\u0005\u00032\b\u0003\n\u0003\f\u00035\t\u0003"+ - "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004"+ - "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0003\u0004A\b\u0004"+ - "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004"+ - "\u0005\u0004I\b\u0004\n\u0004\f\u0004L\t\u0004\u0001\u0005\u0001\u0005"+ - "\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005"+ - "\u0001\u0005\u0003\u0005W\b\u0005\u0001\u0006\u0001\u0006\u0001\u0006"+ - "\u0000\u0003\u0004\u0006\b\u0007\u0000\u0002\u0004\u0006\b\n\f\u0000\u0001"+ - "\u0002\u0000\t\t\f\fa\u0000\u0010\u0001\u0000\u0000\u0000\u0002\u0012"+ - "\u0001\u0000\u0000\u0000\u0004\u001c\u0001\u0000\u0000\u0000\u0006,\u0001"+ - "\u0000\u0000\u0000\b@\u0001\u0000\u0000\u0000\nV\u0001\u0000\u0000\u0000"+ - "\fX\u0001\u0000\u0000\u0000\u000e\u0011\u0003\u0002\u0001\u0000\u000f"+ - "\u0011\u0001\u0000\u0000\u0000\u0010\u000e\u0001\u0000\u0000\u0000\u0010"+ - "\u000f\u0001\u0000\u0000\u0000\u0011\u0001\u0001\u0000\u0000\u0000\u0012"+ - "\u0013\u0003\u0004\u0002\u0000\u0013\u0003\u0001\u0000\u0000\u0000\u0014"+ - "\u0015\u0006\u0002\uffff\uffff\u0000\u0015\u0016\u0005\u0001\u0000\u0000"+ - "\u0016\u0017\u0003\u0004\u0002\u0000\u0017\u0018\u0005\u0002\u0000\u0000"+ - "\u0018\u001d\u0001\u0000\u0000\u0000\u0019\u001a\u0005\u0003\u0000\u0000"+ - "\u001a\u001d\u0003\u0004\u0002\u0003\u001b\u001d\u0003\u0006\u0003\u0000"+ - "\u001c\u0014\u0001\u0000\u0000\u0000\u001c\u0019\u0001\u0000\u0000\u0000"+ - "\u001c\u001b\u0001\u0000\u0000\u0000\u001d#\u0001\u0000\u0000\u0000\u001e"+ - "\u001f\n\u0002\u0000\u0000\u001f \u0005\u0006\u0000\u0000 \"\u0003\u0004"+ - "\u0002\u0003!\u001e\u0001\u0000\u0000\u0000\"%\u0001\u0000\u0000\u0000"+ - "#!\u0001\u0000\u0000\u0000#$\u0001\u0000\u0000\u0000$\u0005\u0001\u0000"+ - "\u0000\u0000%#\u0001\u0000\u0000\u0000&\'\u0006\u0003\uffff\uffff\u0000"+ - "\'(\u0005\u0001\u0000\u0000()\u0003\u0006\u0003\u0000)*\u0005\u0002\u0000"+ - "\u0000*-\u0001\u0000\u0000\u0000+-\u0003\b\u0004\u0000,&\u0001\u0000\u0000"+ - "\u0000,+\u0001\u0000\u0000\u0000-3\u0001\u0000\u0000\u0000./\n\u0002\u0000"+ - "\u0000/0\u0005\u0007\u0000\u000002\u0003\u0006\u0003\u00031.\u0001\u0000"+ - "\u0000\u000025\u0001\u0000\u0000\u000031\u0001\u0000\u0000\u000034\u0001"+ - "\u0000\u0000\u00004\u0007\u0001\u0000\u0000\u000053\u0001\u0000\u0000"+ - "\u000067\u0006\u0004\uffff\uffff\u00007A\u0003\n\u0005\u000089\u0005\u0004"+ - "\u0000\u00009A\u0003\b\u0004\u0003:;\u0005\u0003\u0000\u0000;A\u0003\b"+ - "\u0004\u0002<=\u0005\u0001\u0000\u0000=>\u0003\b\u0004\u0000>?\u0005\u0002"+ - "\u0000\u0000?A\u0001\u0000\u0000\u0000@6\u0001\u0000\u0000\u0000@8\u0001"+ - "\u0000\u0000\u0000@:\u0001\u0000\u0000\u0000@<\u0001\u0000\u0000\u0000"+ - "AJ\u0001\u0000\u0000\u0000BC\n\u0005\u0000\u0000CD\u0005\b\u0000\u0000"+ - "DI\u0003\b\u0004\u0006EF\n\u0004\u0000\u0000FG\u0005\u0004\u0000\u0000"+ - "GI\u0003\b\u0004\u0005HB\u0001\u0000\u0000\u0000HE\u0001\u0000\u0000\u0000"+ - "IL\u0001\u0000\u0000\u0000JH\u0001\u0000\u0000\u0000JK\u0001\u0000\u0000"+ - "\u0000K\t\u0001\u0000\u0000\u0000LJ\u0001\u0000\u0000\u0000MN\u0005\u0001"+ - "\u0000\u0000NO\u0003\n\u0005\u0000OP\u0005\u0002\u0000\u0000PW\u0001\u0000"+ - "\u0000\u0000QW\u0003\f\u0006\u0000RW\u0005\u000b\u0000\u0000ST\u0005\u000b"+ - "\u0000\u0000TU\u0005\u0005\u0000\u0000UW\u0005\u000b\u0000\u0000VM\u0001"+ - "\u0000\u0000\u0000VQ\u0001\u0000\u0000\u0000VR\u0001\u0000\u0000\u0000"+ - "VS\u0001\u0000\u0000\u0000W\u000b\u0001\u0000\u0000\u0000XY\u0007\u0000"+ - "\u0000\u0000Y\r\u0001\u0000\u0000\u0000\t\u0010\u001c#,3@HJV"; + "\u0005\u0007\u0005\u0001\u0000\u0001\u0000\u0003\u0000\u000f\b\u0000\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0003\u0001\u0019\b\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0005\u0001\u001e\b\u0001\n\u0001\f\u0001!\t\u0001\u0001\u0002"+ + "\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0003\u0002"+ + ")\b\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0005\u0002.\b\u0002\n\u0002"+ + "\f\u00021\t\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001"+ + "\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0003\u0003;\b\u0003\u0001"+ + "\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0005"+ + "\u0003C\b\u0003\n\u0003\f\u0003F\t\u0003\u0001\u0004\u0001\u0004\u0001"+ + "\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+ + "\u0004\u0003\u0004Q\b\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0000"+ + "\u0003\u0002\u0004\u0006\u0006\u0000\u0002\u0004\u0006\b\n\u0000\u0001"+ + "\u0002\u0000\t\t\f\f[\u0000\u000e\u0001\u0000\u0000\u0000\u0002\u0018"+ + "\u0001\u0000\u0000\u0000\u0004(\u0001\u0000\u0000\u0000\u0006:\u0001\u0000"+ + "\u0000\u0000\bP\u0001\u0000\u0000\u0000\nR\u0001\u0000\u0000\u0000\f\u000f"+ + "\u0003\u0002\u0001\u0000\r\u000f\u0001\u0000\u0000\u0000\u000e\f\u0001"+ + "\u0000\u0000\u0000\u000e\r\u0001\u0000\u0000\u0000\u000f\u0001\u0001\u0000"+ + "\u0000\u0000\u0010\u0011\u0006\u0001\uffff\uffff\u0000\u0011\u0012\u0005"+ + "\u0001\u0000\u0000\u0012\u0013\u0003\u0002\u0001\u0000\u0013\u0014\u0005"+ + "\u0002\u0000\u0000\u0014\u0019\u0001\u0000\u0000\u0000\u0015\u0016\u0005"+ + "\u0003\u0000\u0000\u0016\u0019\u0003\u0002\u0001\u0003\u0017\u0019\u0003"+ + "\u0004\u0002\u0000\u0018\u0010\u0001\u0000\u0000\u0000\u0018\u0015\u0001"+ + "\u0000\u0000\u0000\u0018\u0017\u0001\u0000\u0000\u0000\u0019\u001f\u0001"+ + "\u0000\u0000\u0000\u001a\u001b\n\u0002\u0000\u0000\u001b\u001c\u0005\u0006"+ + "\u0000\u0000\u001c\u001e\u0003\u0002\u0001\u0003\u001d\u001a\u0001\u0000"+ + "\u0000\u0000\u001e!\u0001\u0000\u0000\u0000\u001f\u001d\u0001\u0000\u0000"+ + "\u0000\u001f \u0001\u0000\u0000\u0000 \u0003\u0001\u0000\u0000\u0000!"+ + "\u001f\u0001\u0000\u0000\u0000\"#\u0006\u0002\uffff\uffff\u0000#$\u0005"+ + "\u0001\u0000\u0000$%\u0003\u0004\u0002\u0000%&\u0005\u0002\u0000\u0000"+ + "&)\u0001\u0000\u0000\u0000\')\u0003\u0006\u0003\u0000(\"\u0001\u0000\u0000"+ + "\u0000(\'\u0001\u0000\u0000\u0000)/\u0001\u0000\u0000\u0000*+\n\u0002"+ + "\u0000\u0000+,\u0005\u0007\u0000\u0000,.\u0003\u0004\u0002\u0003-*\u0001"+ + "\u0000\u0000\u0000.1\u0001\u0000\u0000\u0000/-\u0001\u0000\u0000\u0000"+ + "/0\u0001\u0000\u0000\u00000\u0005\u0001\u0000\u0000\u00001/\u0001\u0000"+ + "\u0000\u000023\u0006\u0003\uffff\uffff\u00003;\u0003\b\u0004\u000045\u0005"+ + "\u0003\u0000\u00005;\u0003\u0006\u0003\u000267\u0005\u0001\u0000\u0000"+ + "78\u0003\u0006\u0003\u000089\u0005\u0002\u0000\u00009;\u0001\u0000\u0000"+ + "\u0000:2\u0001\u0000\u0000\u0000:4\u0001\u0000\u0000\u0000:6\u0001\u0000"+ + "\u0000\u0000;D\u0001\u0000\u0000\u0000<=\n\u0004\u0000\u0000=>\u0005\b"+ + "\u0000\u0000>C\u0003\u0006\u0003\u0005?@\n\u0003\u0000\u0000@A\u0005\u0004"+ + "\u0000\u0000AC\u0003\u0006\u0003\u0004B<\u0001\u0000\u0000\u0000B?\u0001"+ + "\u0000\u0000\u0000CF\u0001\u0000\u0000\u0000DB\u0001\u0000\u0000\u0000"+ + "DE\u0001\u0000\u0000\u0000E\u0007\u0001\u0000\u0000\u0000FD\u0001\u0000"+ + "\u0000\u0000GH\u0005\u0001\u0000\u0000HI\u0003\b\u0004\u0000IJ\u0005\u0002"+ + "\u0000\u0000JQ\u0001\u0000\u0000\u0000KQ\u0003\n\u0005\u0000LQ\u0005\u000b"+ + "\u0000\u0000MN\u0005\u000b\u0000\u0000NO\u0005\u0005\u0000\u0000OQ\u0005"+ + "\u000b\u0000\u0000PG\u0001\u0000\u0000\u0000PK\u0001\u0000\u0000\u0000"+ + "PL\u0001\u0000\u0000\u0000PM\u0001\u0000\u0000\u0000Q\t\u0001\u0000\u0000"+ + "\u0000RS\u0007\u0000\u0000\u0000S\u000b\u0001\u0000\u0000\u0000\t\u000e"+ + "\u0018\u001f(/:BDP"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/latte/src/main/java/refinements/RefinementsLanguage.g4 b/latte/src/main/java/refinements/RefinementsLanguage.g4 index 7a7ce79..c3c95eb 100644 --- a/latte/src/main/java/refinements/RefinementsLanguage.g4 +++ b/latte/src/main/java/refinements/RefinementsLanguage.g4 @@ -1,10 +1,10 @@ grammar RefinementsLanguage; -prog: start | ; -start: - pred #startPred - ; +prog: pred | ; +// start: +// pred #startPred +// ; pred: @@ -21,17 +21,16 @@ exp: ; operand: - literalExpression #opLiteral + leafs #opLiteral | operand ARITHOP operand #opArith | operand '-' operand #opSub - | '-' operand #opMinus | '!' operand #opNot | '(' operand ')' #opGroup ; -literalExpression: - '(' literalExpression ')' #litGroup +leafs: + '(' leafs ')' #litGroup | literal #lit | ID #var | ID '.' ID #targetInvocation @@ -44,9 +43,13 @@ literal: -LOGOP : '&&'|'||'| '-->'; -BOOLOP : '=='|'!='|'>='|'>'|'<='|'<'; -ARITHOP : '+'|'*'|'/'|'%';//|'-'; +LOGOP : '&&'|'||'; +BOOLOP : '=='|'<='|'<'; +ARITHOP : '+'|'*'|'/';//|'-'; + +// 𝑐 | 𝑥 | 𝑥 .𝑓 | 𝑒 + 𝑒 | ! 𝑒 +// | 𝑒 * 𝑒 | 𝑒 / 𝑒 | 𝑒 == 𝑒 | 𝑒 < 𝑒 | 𝑒 || 𝑒 | 𝑒 && 𝑒 +// | 𝑥 (𝑥) BOOL : 'true' | 'false'; ID_UPPER: ([A-Z][a-zA-Z0-9]*); diff --git a/latte/src/main/java/refinements/RefinementsLanguage.interp b/latte/src/main/java/refinements/RefinementsLanguage.interp index 965ad9b..8a70f49 100644 --- a/latte/src/main/java/refinements/RefinementsLanguage.interp +++ b/latte/src/main/java/refinements/RefinementsLanguage.interp @@ -32,13 +32,12 @@ WS rule names: prog -start pred exp operand -literalExpression +leafs literal atn: -[4, 1, 13, 91, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 1, 0, 1, 0, 3, 0, 17, 8, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 29, 8, 2, 1, 2, 1, 2, 1, 2, 5, 2, 34, 8, 2, 10, 2, 12, 2, 37, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 45, 8, 3, 1, 3, 1, 3, 1, 3, 5, 3, 50, 8, 3, 10, 3, 12, 3, 53, 9, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 65, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 73, 8, 4, 10, 4, 12, 4, 76, 9, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 87, 8, 5, 1, 6, 1, 6, 1, 6, 0, 3, 4, 6, 8, 7, 0, 2, 4, 6, 8, 10, 12, 0, 1, 2, 0, 9, 9, 12, 12, 97, 0, 16, 1, 0, 0, 0, 2, 18, 1, 0, 0, 0, 4, 28, 1, 0, 0, 0, 6, 44, 1, 0, 0, 0, 8, 64, 1, 0, 0, 0, 10, 86, 1, 0, 0, 0, 12, 88, 1, 0, 0, 0, 14, 17, 3, 2, 1, 0, 15, 17, 1, 0, 0, 0, 16, 14, 1, 0, 0, 0, 16, 15, 1, 0, 0, 0, 17, 1, 1, 0, 0, 0, 18, 19, 3, 4, 2, 0, 19, 3, 1, 0, 0, 0, 20, 21, 6, 2, -1, 0, 21, 22, 5, 1, 0, 0, 22, 23, 3, 4, 2, 0, 23, 24, 5, 2, 0, 0, 24, 29, 1, 0, 0, 0, 25, 26, 5, 3, 0, 0, 26, 29, 3, 4, 2, 3, 27, 29, 3, 6, 3, 0, 28, 20, 1, 0, 0, 0, 28, 25, 1, 0, 0, 0, 28, 27, 1, 0, 0, 0, 29, 35, 1, 0, 0, 0, 30, 31, 10, 2, 0, 0, 31, 32, 5, 6, 0, 0, 32, 34, 3, 4, 2, 3, 33, 30, 1, 0, 0, 0, 34, 37, 1, 0, 0, 0, 35, 33, 1, 0, 0, 0, 35, 36, 1, 0, 0, 0, 36, 5, 1, 0, 0, 0, 37, 35, 1, 0, 0, 0, 38, 39, 6, 3, -1, 0, 39, 40, 5, 1, 0, 0, 40, 41, 3, 6, 3, 0, 41, 42, 5, 2, 0, 0, 42, 45, 1, 0, 0, 0, 43, 45, 3, 8, 4, 0, 44, 38, 1, 0, 0, 0, 44, 43, 1, 0, 0, 0, 45, 51, 1, 0, 0, 0, 46, 47, 10, 2, 0, 0, 47, 48, 5, 7, 0, 0, 48, 50, 3, 6, 3, 3, 49, 46, 1, 0, 0, 0, 50, 53, 1, 0, 0, 0, 51, 49, 1, 0, 0, 0, 51, 52, 1, 0, 0, 0, 52, 7, 1, 0, 0, 0, 53, 51, 1, 0, 0, 0, 54, 55, 6, 4, -1, 0, 55, 65, 3, 10, 5, 0, 56, 57, 5, 4, 0, 0, 57, 65, 3, 8, 4, 3, 58, 59, 5, 3, 0, 0, 59, 65, 3, 8, 4, 2, 60, 61, 5, 1, 0, 0, 61, 62, 3, 8, 4, 0, 62, 63, 5, 2, 0, 0, 63, 65, 1, 0, 0, 0, 64, 54, 1, 0, 0, 0, 64, 56, 1, 0, 0, 0, 64, 58, 1, 0, 0, 0, 64, 60, 1, 0, 0, 0, 65, 74, 1, 0, 0, 0, 66, 67, 10, 5, 0, 0, 67, 68, 5, 8, 0, 0, 68, 73, 3, 8, 4, 6, 69, 70, 10, 4, 0, 0, 70, 71, 5, 4, 0, 0, 71, 73, 3, 8, 4, 5, 72, 66, 1, 0, 0, 0, 72, 69, 1, 0, 0, 0, 73, 76, 1, 0, 0, 0, 74, 72, 1, 0, 0, 0, 74, 75, 1, 0, 0, 0, 75, 9, 1, 0, 0, 0, 76, 74, 1, 0, 0, 0, 77, 78, 5, 1, 0, 0, 78, 79, 3, 10, 5, 0, 79, 80, 5, 2, 0, 0, 80, 87, 1, 0, 0, 0, 81, 87, 3, 12, 6, 0, 82, 87, 5, 11, 0, 0, 83, 84, 5, 11, 0, 0, 84, 85, 5, 5, 0, 0, 85, 87, 5, 11, 0, 0, 86, 77, 1, 0, 0, 0, 86, 81, 1, 0, 0, 0, 86, 82, 1, 0, 0, 0, 86, 83, 1, 0, 0, 0, 87, 11, 1, 0, 0, 0, 88, 89, 7, 0, 0, 0, 89, 13, 1, 0, 0, 0, 9, 16, 28, 35, 44, 51, 64, 72, 74, 86] \ No newline at end of file +[4, 1, 13, 85, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 1, 0, 1, 0, 3, 0, 15, 8, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 25, 8, 1, 1, 1, 1, 1, 1, 1, 5, 1, 30, 8, 1, 10, 1, 12, 1, 33, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 41, 8, 2, 1, 2, 1, 2, 1, 2, 5, 2, 46, 8, 2, 10, 2, 12, 2, 49, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 59, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 67, 8, 3, 10, 3, 12, 3, 70, 9, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 81, 8, 4, 1, 5, 1, 5, 1, 5, 0, 3, 2, 4, 6, 6, 0, 2, 4, 6, 8, 10, 0, 1, 2, 0, 9, 9, 12, 12, 91, 0, 14, 1, 0, 0, 0, 2, 24, 1, 0, 0, 0, 4, 40, 1, 0, 0, 0, 6, 58, 1, 0, 0, 0, 8, 80, 1, 0, 0, 0, 10, 82, 1, 0, 0, 0, 12, 15, 3, 2, 1, 0, 13, 15, 1, 0, 0, 0, 14, 12, 1, 0, 0, 0, 14, 13, 1, 0, 0, 0, 15, 1, 1, 0, 0, 0, 16, 17, 6, 1, -1, 0, 17, 18, 5, 1, 0, 0, 18, 19, 3, 2, 1, 0, 19, 20, 5, 2, 0, 0, 20, 25, 1, 0, 0, 0, 21, 22, 5, 3, 0, 0, 22, 25, 3, 2, 1, 3, 23, 25, 3, 4, 2, 0, 24, 16, 1, 0, 0, 0, 24, 21, 1, 0, 0, 0, 24, 23, 1, 0, 0, 0, 25, 31, 1, 0, 0, 0, 26, 27, 10, 2, 0, 0, 27, 28, 5, 6, 0, 0, 28, 30, 3, 2, 1, 3, 29, 26, 1, 0, 0, 0, 30, 33, 1, 0, 0, 0, 31, 29, 1, 0, 0, 0, 31, 32, 1, 0, 0, 0, 32, 3, 1, 0, 0, 0, 33, 31, 1, 0, 0, 0, 34, 35, 6, 2, -1, 0, 35, 36, 5, 1, 0, 0, 36, 37, 3, 4, 2, 0, 37, 38, 5, 2, 0, 0, 38, 41, 1, 0, 0, 0, 39, 41, 3, 6, 3, 0, 40, 34, 1, 0, 0, 0, 40, 39, 1, 0, 0, 0, 41, 47, 1, 0, 0, 0, 42, 43, 10, 2, 0, 0, 43, 44, 5, 7, 0, 0, 44, 46, 3, 4, 2, 3, 45, 42, 1, 0, 0, 0, 46, 49, 1, 0, 0, 0, 47, 45, 1, 0, 0, 0, 47, 48, 1, 0, 0, 0, 48, 5, 1, 0, 0, 0, 49, 47, 1, 0, 0, 0, 50, 51, 6, 3, -1, 0, 51, 59, 3, 8, 4, 0, 52, 53, 5, 3, 0, 0, 53, 59, 3, 6, 3, 2, 54, 55, 5, 1, 0, 0, 55, 56, 3, 6, 3, 0, 56, 57, 5, 2, 0, 0, 57, 59, 1, 0, 0, 0, 58, 50, 1, 0, 0, 0, 58, 52, 1, 0, 0, 0, 58, 54, 1, 0, 0, 0, 59, 68, 1, 0, 0, 0, 60, 61, 10, 4, 0, 0, 61, 62, 5, 8, 0, 0, 62, 67, 3, 6, 3, 5, 63, 64, 10, 3, 0, 0, 64, 65, 5, 4, 0, 0, 65, 67, 3, 6, 3, 4, 66, 60, 1, 0, 0, 0, 66, 63, 1, 0, 0, 0, 67, 70, 1, 0, 0, 0, 68, 66, 1, 0, 0, 0, 68, 69, 1, 0, 0, 0, 69, 7, 1, 0, 0, 0, 70, 68, 1, 0, 0, 0, 71, 72, 5, 1, 0, 0, 72, 73, 3, 8, 4, 0, 73, 74, 5, 2, 0, 0, 74, 81, 1, 0, 0, 0, 75, 81, 3, 10, 5, 0, 76, 81, 5, 11, 0, 0, 77, 78, 5, 11, 0, 0, 78, 79, 5, 5, 0, 0, 79, 81, 5, 11, 0, 0, 80, 71, 1, 0, 0, 0, 80, 75, 1, 0, 0, 0, 80, 76, 1, 0, 0, 0, 80, 77, 1, 0, 0, 0, 81, 9, 1, 0, 0, 0, 82, 83, 7, 0, 0, 0, 83, 11, 1, 0, 0, 0, 9, 14, 24, 31, 40, 47, 58, 66, 68, 80] \ No newline at end of file diff --git a/latte/src/main/java/refinements/RefinementsLanguageBaseListener.java b/latte/src/main/java/refinements/RefinementsLanguageBaseListener.java index 0972f3f..5697b22 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageBaseListener.java +++ b/latte/src/main/java/refinements/RefinementsLanguageBaseListener.java @@ -24,18 +24,6 @@ public class RefinementsLanguageBaseListener implements RefinementsLanguageListe *

The default implementation does nothing.

*/ @Override public void exitProg(RefinementsLanguageParser.ProgContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterStartPred(RefinementsLanguageParser.StartPredContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitStartPred(RefinementsLanguageParser.StartPredContext ctx) { } /** * {@inheritDoc} * @@ -168,18 +156,6 @@ public class RefinementsLanguageBaseListener implements RefinementsLanguageListe *

The default implementation does nothing.

*/ @Override public void exitOpGroup(RefinementsLanguageParser.OpGroupContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterOpMinus(RefinementsLanguageParser.OpMinusContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitOpMinus(RefinementsLanguageParser.OpMinusContext ctx) { } /** * {@inheritDoc} * diff --git a/latte/src/main/java/refinements/RefinementsLanguageBaseVisitor.java b/latte/src/main/java/refinements/RefinementsLanguageBaseVisitor.java index 2829556..e10d477 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageBaseVisitor.java +++ b/latte/src/main/java/refinements/RefinementsLanguageBaseVisitor.java @@ -19,13 +19,6 @@ public class RefinementsLanguageBaseVisitor extends AbstractParseTreeVisitor< * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitProg(RefinementsLanguageParser.ProgContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitStartPred(RefinementsLanguageParser.StartPredContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * @@ -103,13 +96,6 @@ public class RefinementsLanguageBaseVisitor extends AbstractParseTreeVisitor< * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitOpGroup(RefinementsLanguageParser.OpGroupContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

The default implementation returns the result of calling - * {@link #visitChildren} on {@code ctx}.

- */ - @Override public T visitOpMinus(RefinementsLanguageParser.OpMinusContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * diff --git a/latte/src/main/java/refinements/RefinementsLanguageLexer.interp b/latte/src/main/java/refinements/RefinementsLanguageLexer.interp index 026a442..d6867f3 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageLexer.interp +++ b/latte/src/main/java/refinements/RefinementsLanguageLexer.interp @@ -53,4 +53,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 13, 121, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 45, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 57, 8, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 70, 8, 8, 1, 9, 1, 9, 5, 9, 74, 8, 9, 10, 9, 12, 9, 77, 9, 9, 1, 10, 5, 10, 80, 8, 10, 10, 10, 12, 10, 83, 9, 10, 1, 10, 1, 10, 5, 10, 87, 8, 10, 10, 10, 12, 10, 90, 9, 10, 1, 11, 4, 11, 93, 8, 11, 11, 11, 12, 11, 94, 1, 11, 4, 11, 98, 8, 11, 11, 11, 12, 11, 99, 1, 11, 1, 11, 4, 11, 104, 8, 11, 11, 11, 12, 11, 105, 5, 11, 108, 8, 11, 10, 11, 12, 11, 111, 9, 11, 3, 11, 113, 8, 11, 1, 12, 4, 12, 116, 8, 12, 11, 12, 12, 12, 117, 1, 12, 1, 12, 0, 0, 13, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 1, 0, 7, 3, 0, 37, 37, 42, 43, 47, 47, 1, 0, 65, 90, 3, 0, 48, 57, 65, 90, 97, 122, 3, 0, 65, 90, 95, 95, 97, 122, 5, 0, 35, 35, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 3, 0, 9, 10, 13, 13, 32, 32, 137, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 1, 27, 1, 0, 0, 0, 3, 29, 1, 0, 0, 0, 5, 31, 1, 0, 0, 0, 7, 33, 1, 0, 0, 0, 9, 35, 1, 0, 0, 0, 11, 44, 1, 0, 0, 0, 13, 56, 1, 0, 0, 0, 15, 58, 1, 0, 0, 0, 17, 69, 1, 0, 0, 0, 19, 71, 1, 0, 0, 0, 21, 81, 1, 0, 0, 0, 23, 112, 1, 0, 0, 0, 25, 115, 1, 0, 0, 0, 27, 28, 5, 40, 0, 0, 28, 2, 1, 0, 0, 0, 29, 30, 5, 41, 0, 0, 30, 4, 1, 0, 0, 0, 31, 32, 5, 33, 0, 0, 32, 6, 1, 0, 0, 0, 33, 34, 5, 45, 0, 0, 34, 8, 1, 0, 0, 0, 35, 36, 5, 46, 0, 0, 36, 10, 1, 0, 0, 0, 37, 38, 5, 38, 0, 0, 38, 45, 5, 38, 0, 0, 39, 40, 5, 124, 0, 0, 40, 45, 5, 124, 0, 0, 41, 42, 5, 45, 0, 0, 42, 43, 5, 45, 0, 0, 43, 45, 5, 62, 0, 0, 44, 37, 1, 0, 0, 0, 44, 39, 1, 0, 0, 0, 44, 41, 1, 0, 0, 0, 45, 12, 1, 0, 0, 0, 46, 47, 5, 61, 0, 0, 47, 57, 5, 61, 0, 0, 48, 49, 5, 33, 0, 0, 49, 57, 5, 61, 0, 0, 50, 51, 5, 62, 0, 0, 51, 57, 5, 61, 0, 0, 52, 57, 5, 62, 0, 0, 53, 54, 5, 60, 0, 0, 54, 57, 5, 61, 0, 0, 55, 57, 5, 60, 0, 0, 56, 46, 1, 0, 0, 0, 56, 48, 1, 0, 0, 0, 56, 50, 1, 0, 0, 0, 56, 52, 1, 0, 0, 0, 56, 53, 1, 0, 0, 0, 56, 55, 1, 0, 0, 0, 57, 14, 1, 0, 0, 0, 58, 59, 7, 0, 0, 0, 59, 16, 1, 0, 0, 0, 60, 61, 5, 116, 0, 0, 61, 62, 5, 114, 0, 0, 62, 63, 5, 117, 0, 0, 63, 70, 5, 101, 0, 0, 64, 65, 5, 102, 0, 0, 65, 66, 5, 97, 0, 0, 66, 67, 5, 108, 0, 0, 67, 68, 5, 115, 0, 0, 68, 70, 5, 101, 0, 0, 69, 60, 1, 0, 0, 0, 69, 64, 1, 0, 0, 0, 70, 18, 1, 0, 0, 0, 71, 75, 7, 1, 0, 0, 72, 74, 7, 2, 0, 0, 73, 72, 1, 0, 0, 0, 74, 77, 1, 0, 0, 0, 75, 73, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 20, 1, 0, 0, 0, 77, 75, 1, 0, 0, 0, 78, 80, 5, 35, 0, 0, 79, 78, 1, 0, 0, 0, 80, 83, 1, 0, 0, 0, 81, 79, 1, 0, 0, 0, 81, 82, 1, 0, 0, 0, 82, 84, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 84, 88, 7, 3, 0, 0, 85, 87, 7, 4, 0, 0, 86, 85, 1, 0, 0, 0, 87, 90, 1, 0, 0, 0, 88, 86, 1, 0, 0, 0, 88, 89, 1, 0, 0, 0, 89, 22, 1, 0, 0, 0, 90, 88, 1, 0, 0, 0, 91, 93, 7, 5, 0, 0, 92, 91, 1, 0, 0, 0, 93, 94, 1, 0, 0, 0, 94, 92, 1, 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 113, 1, 0, 0, 0, 96, 98, 7, 5, 0, 0, 97, 96, 1, 0, 0, 0, 98, 99, 1, 0, 0, 0, 99, 97, 1, 0, 0, 0, 99, 100, 1, 0, 0, 0, 100, 109, 1, 0, 0, 0, 101, 103, 5, 95, 0, 0, 102, 104, 7, 5, 0, 0, 103, 102, 1, 0, 0, 0, 104, 105, 1, 0, 0, 0, 105, 103, 1, 0, 0, 0, 105, 106, 1, 0, 0, 0, 106, 108, 1, 0, 0, 0, 107, 101, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 113, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 92, 1, 0, 0, 0, 112, 97, 1, 0, 0, 0, 113, 24, 1, 0, 0, 0, 114, 116, 7, 6, 0, 0, 115, 114, 1, 0, 0, 0, 116, 117, 1, 0, 0, 0, 117, 115, 1, 0, 0, 0, 117, 118, 1, 0, 0, 0, 118, 119, 1, 0, 0, 0, 119, 120, 6, 12, 0, 0, 120, 26, 1, 0, 0, 0, 13, 0, 44, 56, 69, 75, 81, 88, 94, 99, 105, 109, 112, 117, 1, 0, 1, 0] \ No newline at end of file +[4, 0, 13, 113, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 42, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 49, 8, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 62, 8, 8, 1, 9, 1, 9, 5, 9, 66, 8, 9, 10, 9, 12, 9, 69, 9, 9, 1, 10, 5, 10, 72, 8, 10, 10, 10, 12, 10, 75, 9, 10, 1, 10, 1, 10, 5, 10, 79, 8, 10, 10, 10, 12, 10, 82, 9, 10, 1, 11, 4, 11, 85, 8, 11, 11, 11, 12, 11, 86, 1, 11, 4, 11, 90, 8, 11, 11, 11, 12, 11, 91, 1, 11, 1, 11, 4, 11, 96, 8, 11, 11, 11, 12, 11, 97, 5, 11, 100, 8, 11, 10, 11, 12, 11, 103, 9, 11, 3, 11, 105, 8, 11, 1, 12, 4, 12, 108, 8, 12, 11, 12, 12, 12, 109, 1, 12, 1, 12, 0, 0, 13, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 1, 0, 7, 2, 0, 42, 43, 47, 47, 1, 0, 65, 90, 3, 0, 48, 57, 65, 90, 97, 122, 3, 0, 65, 90, 95, 95, 97, 122, 5, 0, 35, 35, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 3, 0, 9, 10, 13, 13, 32, 32, 125, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 1, 27, 1, 0, 0, 0, 3, 29, 1, 0, 0, 0, 5, 31, 1, 0, 0, 0, 7, 33, 1, 0, 0, 0, 9, 35, 1, 0, 0, 0, 11, 41, 1, 0, 0, 0, 13, 48, 1, 0, 0, 0, 15, 50, 1, 0, 0, 0, 17, 61, 1, 0, 0, 0, 19, 63, 1, 0, 0, 0, 21, 73, 1, 0, 0, 0, 23, 104, 1, 0, 0, 0, 25, 107, 1, 0, 0, 0, 27, 28, 5, 40, 0, 0, 28, 2, 1, 0, 0, 0, 29, 30, 5, 41, 0, 0, 30, 4, 1, 0, 0, 0, 31, 32, 5, 33, 0, 0, 32, 6, 1, 0, 0, 0, 33, 34, 5, 45, 0, 0, 34, 8, 1, 0, 0, 0, 35, 36, 5, 46, 0, 0, 36, 10, 1, 0, 0, 0, 37, 38, 5, 38, 0, 0, 38, 42, 5, 38, 0, 0, 39, 40, 5, 124, 0, 0, 40, 42, 5, 124, 0, 0, 41, 37, 1, 0, 0, 0, 41, 39, 1, 0, 0, 0, 42, 12, 1, 0, 0, 0, 43, 44, 5, 61, 0, 0, 44, 49, 5, 61, 0, 0, 45, 46, 5, 60, 0, 0, 46, 49, 5, 61, 0, 0, 47, 49, 5, 60, 0, 0, 48, 43, 1, 0, 0, 0, 48, 45, 1, 0, 0, 0, 48, 47, 1, 0, 0, 0, 49, 14, 1, 0, 0, 0, 50, 51, 7, 0, 0, 0, 51, 16, 1, 0, 0, 0, 52, 53, 5, 116, 0, 0, 53, 54, 5, 114, 0, 0, 54, 55, 5, 117, 0, 0, 55, 62, 5, 101, 0, 0, 56, 57, 5, 102, 0, 0, 57, 58, 5, 97, 0, 0, 58, 59, 5, 108, 0, 0, 59, 60, 5, 115, 0, 0, 60, 62, 5, 101, 0, 0, 61, 52, 1, 0, 0, 0, 61, 56, 1, 0, 0, 0, 62, 18, 1, 0, 0, 0, 63, 67, 7, 1, 0, 0, 64, 66, 7, 2, 0, 0, 65, 64, 1, 0, 0, 0, 66, 69, 1, 0, 0, 0, 67, 65, 1, 0, 0, 0, 67, 68, 1, 0, 0, 0, 68, 20, 1, 0, 0, 0, 69, 67, 1, 0, 0, 0, 70, 72, 5, 35, 0, 0, 71, 70, 1, 0, 0, 0, 72, 75, 1, 0, 0, 0, 73, 71, 1, 0, 0, 0, 73, 74, 1, 0, 0, 0, 74, 76, 1, 0, 0, 0, 75, 73, 1, 0, 0, 0, 76, 80, 7, 3, 0, 0, 77, 79, 7, 4, 0, 0, 78, 77, 1, 0, 0, 0, 79, 82, 1, 0, 0, 0, 80, 78, 1, 0, 0, 0, 80, 81, 1, 0, 0, 0, 81, 22, 1, 0, 0, 0, 82, 80, 1, 0, 0, 0, 83, 85, 7, 5, 0, 0, 84, 83, 1, 0, 0, 0, 85, 86, 1, 0, 0, 0, 86, 84, 1, 0, 0, 0, 86, 87, 1, 0, 0, 0, 87, 105, 1, 0, 0, 0, 88, 90, 7, 5, 0, 0, 89, 88, 1, 0, 0, 0, 90, 91, 1, 0, 0, 0, 91, 89, 1, 0, 0, 0, 91, 92, 1, 0, 0, 0, 92, 101, 1, 0, 0, 0, 93, 95, 5, 95, 0, 0, 94, 96, 7, 5, 0, 0, 95, 94, 1, 0, 0, 0, 96, 97, 1, 0, 0, 0, 97, 95, 1, 0, 0, 0, 97, 98, 1, 0, 0, 0, 98, 100, 1, 0, 0, 0, 99, 93, 1, 0, 0, 0, 100, 103, 1, 0, 0, 0, 101, 99, 1, 0, 0, 0, 101, 102, 1, 0, 0, 0, 102, 105, 1, 0, 0, 0, 103, 101, 1, 0, 0, 0, 104, 84, 1, 0, 0, 0, 104, 89, 1, 0, 0, 0, 105, 24, 1, 0, 0, 0, 106, 108, 7, 6, 0, 0, 107, 106, 1, 0, 0, 0, 108, 109, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 111, 1, 0, 0, 0, 111, 112, 6, 12, 0, 0, 112, 26, 1, 0, 0, 0, 13, 0, 41, 48, 61, 67, 73, 80, 86, 91, 97, 101, 104, 109, 1, 0, 1, 0] \ No newline at end of file diff --git a/latte/src/main/java/refinements/RefinementsLanguageLexer.java b/latte/src/main/java/refinements/RefinementsLanguageLexer.java index 6a543b3..46e3e5d 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageLexer.java +++ b/latte/src/main/java/refinements/RefinementsLanguageLexer.java @@ -106,80 +106,74 @@ public RefinementsLanguageLexer(CharStream input) { public ATN getATN() { return _ATN; } public static final String _serializedATN = - "\u0004\u0000\ry\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ + "\u0004\u0000\rq\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ "\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+ "\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+ "\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+ "\u0007\u000b\u0002\f\u0007\f\u0001\u0000\u0001\u0000\u0001\u0001\u0001"+ "\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001"+ - "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001"+ - "\u0005\u0001\u0005\u0003\u0005-\b\u0005\u0001\u0006\u0001\u0006\u0001"+ - "\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001"+ - "\u0006\u0001\u0006\u0003\u00069\b\u0006\u0001\u0007\u0001\u0007\u0001"+ - "\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0003"+ - "\bF\b\b\u0001\t\u0001\t\u0005\tJ\b\t\n\t\f\tM\t\t\u0001\n\u0005\nP\b\n"+ - "\n\n\f\nS\t\n\u0001\n\u0001\n\u0005\nW\b\n\n\n\f\nZ\t\n\u0001\u000b\u0004"+ - "\u000b]\b\u000b\u000b\u000b\f\u000b^\u0001\u000b\u0004\u000bb\b\u000b"+ - "\u000b\u000b\f\u000bc\u0001\u000b\u0001\u000b\u0004\u000bh\b\u000b\u000b"+ - "\u000b\f\u000bi\u0005\u000bl\b\u000b\n\u000b\f\u000bo\t\u000b\u0003\u000b"+ - "q\b\u000b\u0001\f\u0004\ft\b\f\u000b\f\f\fu\u0001\f\u0001\f\u0000\u0000"+ - "\r\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006"+ - "\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u0001\u0000"+ - "\u0007\u0003\u0000%%*+//\u0001\u0000AZ\u0003\u000009AZaz\u0003\u0000A"+ - "Z__az\u0005\u0000##09AZ__az\u0001\u000009\u0003\u0000\t\n\r\r \u0089"+ - "\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0000"+ - "\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000\u0000"+ - "\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000\u0000"+ - "\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000\u0011"+ - "\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000\u0015"+ - "\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000\u0019"+ - "\u0001\u0000\u0000\u0000\u0001\u001b\u0001\u0000\u0000\u0000\u0003\u001d"+ - "\u0001\u0000\u0000\u0000\u0005\u001f\u0001\u0000\u0000\u0000\u0007!\u0001"+ - "\u0000\u0000\u0000\t#\u0001\u0000\u0000\u0000\u000b,\u0001\u0000\u0000"+ - "\u0000\r8\u0001\u0000\u0000\u0000\u000f:\u0001\u0000\u0000\u0000\u0011"+ - "E\u0001\u0000\u0000\u0000\u0013G\u0001\u0000\u0000\u0000\u0015Q\u0001"+ - "\u0000\u0000\u0000\u0017p\u0001\u0000\u0000\u0000\u0019s\u0001\u0000\u0000"+ - "\u0000\u001b\u001c\u0005(\u0000\u0000\u001c\u0002\u0001\u0000\u0000\u0000"+ - "\u001d\u001e\u0005)\u0000\u0000\u001e\u0004\u0001\u0000\u0000\u0000\u001f"+ - " \u0005!\u0000\u0000 \u0006\u0001\u0000\u0000\u0000!\"\u0005-\u0000\u0000"+ - "\"\b\u0001\u0000\u0000\u0000#$\u0005.\u0000\u0000$\n\u0001\u0000\u0000"+ - "\u0000%&\u0005&\u0000\u0000&-\u0005&\u0000\u0000\'(\u0005|\u0000\u0000"+ - "(-\u0005|\u0000\u0000)*\u0005-\u0000\u0000*+\u0005-\u0000\u0000+-\u0005"+ - ">\u0000\u0000,%\u0001\u0000\u0000\u0000,\'\u0001\u0000\u0000\u0000,)\u0001"+ - "\u0000\u0000\u0000-\f\u0001\u0000\u0000\u0000./\u0005=\u0000\u0000/9\u0005"+ - "=\u0000\u000001\u0005!\u0000\u000019\u0005=\u0000\u000023\u0005>\u0000"+ - "\u000039\u0005=\u0000\u000049\u0005>\u0000\u000056\u0005<\u0000\u0000"+ - "69\u0005=\u0000\u000079\u0005<\u0000\u00008.\u0001\u0000\u0000\u00008"+ - "0\u0001\u0000\u0000\u000082\u0001\u0000\u0000\u000084\u0001\u0000\u0000"+ - "\u000085\u0001\u0000\u0000\u000087\u0001\u0000\u0000\u00009\u000e\u0001"+ - "\u0000\u0000\u0000:;\u0007\u0000\u0000\u0000;\u0010\u0001\u0000\u0000"+ - "\u0000<=\u0005t\u0000\u0000=>\u0005r\u0000\u0000>?\u0005u\u0000\u0000"+ - "?F\u0005e\u0000\u0000@A\u0005f\u0000\u0000AB\u0005a\u0000\u0000BC\u0005"+ - "l\u0000\u0000CD\u0005s\u0000\u0000DF\u0005e\u0000\u0000E<\u0001\u0000"+ - "\u0000\u0000E@\u0001\u0000\u0000\u0000F\u0012\u0001\u0000\u0000\u0000"+ - "GK\u0007\u0001\u0000\u0000HJ\u0007\u0002\u0000\u0000IH\u0001\u0000\u0000"+ - "\u0000JM\u0001\u0000\u0000\u0000KI\u0001\u0000\u0000\u0000KL\u0001\u0000"+ - "\u0000\u0000L\u0014\u0001\u0000\u0000\u0000MK\u0001\u0000\u0000\u0000"+ - "NP\u0005#\u0000\u0000ON\u0001\u0000\u0000\u0000PS\u0001\u0000\u0000\u0000"+ - "QO\u0001\u0000\u0000\u0000QR\u0001\u0000\u0000\u0000RT\u0001\u0000\u0000"+ - "\u0000SQ\u0001\u0000\u0000\u0000TX\u0007\u0003\u0000\u0000UW\u0007\u0004"+ - "\u0000\u0000VU\u0001\u0000\u0000\u0000WZ\u0001\u0000\u0000\u0000XV\u0001"+ - "\u0000\u0000\u0000XY\u0001\u0000\u0000\u0000Y\u0016\u0001\u0000\u0000"+ - "\u0000ZX\u0001\u0000\u0000\u0000[]\u0007\u0005\u0000\u0000\\[\u0001\u0000"+ - "\u0000\u0000]^\u0001\u0000\u0000\u0000^\\\u0001\u0000\u0000\u0000^_\u0001"+ - "\u0000\u0000\u0000_q\u0001\u0000\u0000\u0000`b\u0007\u0005\u0000\u0000"+ - "a`\u0001\u0000\u0000\u0000bc\u0001\u0000\u0000\u0000ca\u0001\u0000\u0000"+ - "\u0000cd\u0001\u0000\u0000\u0000dm\u0001\u0000\u0000\u0000eg\u0005_\u0000"+ - "\u0000fh\u0007\u0005\u0000\u0000gf\u0001\u0000\u0000\u0000hi\u0001\u0000"+ - "\u0000\u0000ig\u0001\u0000\u0000\u0000ij\u0001\u0000\u0000\u0000jl\u0001"+ - "\u0000\u0000\u0000ke\u0001\u0000\u0000\u0000lo\u0001\u0000\u0000\u0000"+ - "mk\u0001\u0000\u0000\u0000mn\u0001\u0000\u0000\u0000nq\u0001\u0000\u0000"+ - "\u0000om\u0001\u0000\u0000\u0000p\\\u0001\u0000\u0000\u0000pa\u0001\u0000"+ - "\u0000\u0000q\u0018\u0001\u0000\u0000\u0000rt\u0007\u0006\u0000\u0000"+ - "sr\u0001\u0000\u0000\u0000tu\u0001\u0000\u0000\u0000us\u0001\u0000\u0000"+ - "\u0000uv\u0001\u0000\u0000\u0000vw\u0001\u0000\u0000\u0000wx\u0006\f\u0000"+ - "\u0000x\u001a\u0001\u0000\u0000\u0000\r\u0000,8EKQX^cimpu\u0001\u0000"+ - "\u0001\u0000"; + "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0003\u0005*\b"+ + "\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0003"+ + "\u00061\b\u0006\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001"+ + "\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0003\b>\b\b\u0001\t\u0001"+ + "\t\u0005\tB\b\t\n\t\f\tE\t\t\u0001\n\u0005\nH\b\n\n\n\f\nK\t\n\u0001\n"+ + "\u0001\n\u0005\nO\b\n\n\n\f\nR\t\n\u0001\u000b\u0004\u000bU\b\u000b\u000b"+ + "\u000b\f\u000bV\u0001\u000b\u0004\u000bZ\b\u000b\u000b\u000b\f\u000b["+ + "\u0001\u000b\u0001\u000b\u0004\u000b`\b\u000b\u000b\u000b\f\u000ba\u0005"+ + "\u000bd\b\u000b\n\u000b\f\u000bg\t\u000b\u0003\u000bi\b\u000b\u0001\f"+ + "\u0004\fl\b\f\u000b\f\f\fm\u0001\f\u0001\f\u0000\u0000\r\u0001\u0001\u0003"+ + "\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006\r\u0007\u000f\b\u0011"+ + "\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u0001\u0000\u0007\u0002\u0000*"+ + "+//\u0001\u0000AZ\u0003\u000009AZaz\u0003\u0000AZ__az\u0005\u0000##09"+ + "AZ__az\u0001\u000009\u0003\u0000\t\n\r\r }\u0000\u0001\u0001\u0000\u0000"+ + "\u0000\u0000\u0003\u0001\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000"+ + "\u0000\u0000\u0007\u0001\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000"+ + "\u0000\u000b\u0001\u0000\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000"+ + "\u000f\u0001\u0000\u0000\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000"+ + "\u0013\u0001\u0000\u0000\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000"+ + "\u0017\u0001\u0000\u0000\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0001"+ + "\u001b\u0001\u0000\u0000\u0000\u0003\u001d\u0001\u0000\u0000\u0000\u0005"+ + "\u001f\u0001\u0000\u0000\u0000\u0007!\u0001\u0000\u0000\u0000\t#\u0001"+ + "\u0000\u0000\u0000\u000b)\u0001\u0000\u0000\u0000\r0\u0001\u0000\u0000"+ + "\u0000\u000f2\u0001\u0000\u0000\u0000\u0011=\u0001\u0000\u0000\u0000\u0013"+ + "?\u0001\u0000\u0000\u0000\u0015I\u0001\u0000\u0000\u0000\u0017h\u0001"+ + "\u0000\u0000\u0000\u0019k\u0001\u0000\u0000\u0000\u001b\u001c\u0005(\u0000"+ + "\u0000\u001c\u0002\u0001\u0000\u0000\u0000\u001d\u001e\u0005)\u0000\u0000"+ + "\u001e\u0004\u0001\u0000\u0000\u0000\u001f \u0005!\u0000\u0000 \u0006"+ + "\u0001\u0000\u0000\u0000!\"\u0005-\u0000\u0000\"\b\u0001\u0000\u0000\u0000"+ + "#$\u0005.\u0000\u0000$\n\u0001\u0000\u0000\u0000%&\u0005&\u0000\u0000"+ + "&*\u0005&\u0000\u0000\'(\u0005|\u0000\u0000(*\u0005|\u0000\u0000)%\u0001"+ + "\u0000\u0000\u0000)\'\u0001\u0000\u0000\u0000*\f\u0001\u0000\u0000\u0000"+ + "+,\u0005=\u0000\u0000,1\u0005=\u0000\u0000-.\u0005<\u0000\u0000.1\u0005"+ + "=\u0000\u0000/1\u0005<\u0000\u00000+\u0001\u0000\u0000\u00000-\u0001\u0000"+ + "\u0000\u00000/\u0001\u0000\u0000\u00001\u000e\u0001\u0000\u0000\u0000"+ + "23\u0007\u0000\u0000\u00003\u0010\u0001\u0000\u0000\u000045\u0005t\u0000"+ + "\u000056\u0005r\u0000\u000067\u0005u\u0000\u00007>\u0005e\u0000\u0000"+ + "89\u0005f\u0000\u00009:\u0005a\u0000\u0000:;\u0005l\u0000\u0000;<\u0005"+ + "s\u0000\u0000<>\u0005e\u0000\u0000=4\u0001\u0000\u0000\u0000=8\u0001\u0000"+ + "\u0000\u0000>\u0012\u0001\u0000\u0000\u0000?C\u0007\u0001\u0000\u0000"+ + "@B\u0007\u0002\u0000\u0000A@\u0001\u0000\u0000\u0000BE\u0001\u0000\u0000"+ + "\u0000CA\u0001\u0000\u0000\u0000CD\u0001\u0000\u0000\u0000D\u0014\u0001"+ + "\u0000\u0000\u0000EC\u0001\u0000\u0000\u0000FH\u0005#\u0000\u0000GF\u0001"+ + "\u0000\u0000\u0000HK\u0001\u0000\u0000\u0000IG\u0001\u0000\u0000\u0000"+ + "IJ\u0001\u0000\u0000\u0000JL\u0001\u0000\u0000\u0000KI\u0001\u0000\u0000"+ + "\u0000LP\u0007\u0003\u0000\u0000MO\u0007\u0004\u0000\u0000NM\u0001\u0000"+ + "\u0000\u0000OR\u0001\u0000\u0000\u0000PN\u0001\u0000\u0000\u0000PQ\u0001"+ + "\u0000\u0000\u0000Q\u0016\u0001\u0000\u0000\u0000RP\u0001\u0000\u0000"+ + "\u0000SU\u0007\u0005\u0000\u0000TS\u0001\u0000\u0000\u0000UV\u0001\u0000"+ + "\u0000\u0000VT\u0001\u0000\u0000\u0000VW\u0001\u0000\u0000\u0000Wi\u0001"+ + "\u0000\u0000\u0000XZ\u0007\u0005\u0000\u0000YX\u0001\u0000\u0000\u0000"+ + "Z[\u0001\u0000\u0000\u0000[Y\u0001\u0000\u0000\u0000[\\\u0001\u0000\u0000"+ + "\u0000\\e\u0001\u0000\u0000\u0000]_\u0005_\u0000\u0000^`\u0007\u0005\u0000"+ + "\u0000_^\u0001\u0000\u0000\u0000`a\u0001\u0000\u0000\u0000a_\u0001\u0000"+ + "\u0000\u0000ab\u0001\u0000\u0000\u0000bd\u0001\u0000\u0000\u0000c]\u0001"+ + "\u0000\u0000\u0000dg\u0001\u0000\u0000\u0000ec\u0001\u0000\u0000\u0000"+ + "ef\u0001\u0000\u0000\u0000fi\u0001\u0000\u0000\u0000ge\u0001\u0000\u0000"+ + "\u0000hT\u0001\u0000\u0000\u0000hY\u0001\u0000\u0000\u0000i\u0018\u0001"+ + "\u0000\u0000\u0000jl\u0007\u0006\u0000\u0000kj\u0001\u0000\u0000\u0000"+ + "lm\u0001\u0000\u0000\u0000mk\u0001\u0000\u0000\u0000mn\u0001\u0000\u0000"+ + "\u0000no\u0001\u0000\u0000\u0000op\u0006\f\u0000\u0000p\u001a\u0001\u0000"+ + "\u0000\u0000\r\u0000)0=CIPV[aehm\u0001\u0000\u0001\u0000"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/latte/src/main/java/refinements/RefinementsLanguageListener.java b/latte/src/main/java/refinements/RefinementsLanguageListener.java index 96ea7bb..d781947 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageListener.java +++ b/latte/src/main/java/refinements/RefinementsLanguageListener.java @@ -17,18 +17,6 @@ public interface RefinementsLanguageListener extends ParseTreeListener { * @param ctx the parse tree */ void exitProg(RefinementsLanguageParser.ProgContext ctx); - /** - * Enter a parse tree produced by the {@code startPred} - * labeled alternative in {@link RefinementsLanguageParser#start}. - * @param ctx the parse tree - */ - void enterStartPred(RefinementsLanguageParser.StartPredContext ctx); - /** - * Exit a parse tree produced by the {@code startPred} - * labeled alternative in {@link RefinementsLanguageParser#start}. - * @param ctx the parse tree - */ - void exitStartPred(RefinementsLanguageParser.StartPredContext ctx); /** * Enter a parse tree produced by the {@code predGroup} * labeled alternative in {@link RefinementsLanguageParser#pred}. @@ -161,18 +149,6 @@ public interface RefinementsLanguageListener extends ParseTreeListener { * @param ctx the parse tree */ void exitOpGroup(RefinementsLanguageParser.OpGroupContext ctx); - /** - * Enter a parse tree produced by the {@code opMinus} - * labeled alternative in {@link RefinementsLanguageParser#operand}. - * @param ctx the parse tree - */ - void enterOpMinus(RefinementsLanguageParser.OpMinusContext ctx); - /** - * Exit a parse tree produced by the {@code opMinus} - * labeled alternative in {@link RefinementsLanguageParser#operand}. - * @param ctx the parse tree - */ - void exitOpMinus(RefinementsLanguageParser.OpMinusContext ctx); /** * Enter a parse tree produced by the {@code opSub} * labeled alternative in {@link RefinementsLanguageParser#operand}. @@ -187,49 +163,49 @@ public interface RefinementsLanguageListener extends ParseTreeListener { void exitOpSub(RefinementsLanguageParser.OpSubContext ctx); /** * Enter a parse tree produced by the {@code litGroup} - * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * labeled alternative in {@link RefinementsLanguageParser#leafs}. * @param ctx the parse tree */ void enterLitGroup(RefinementsLanguageParser.LitGroupContext ctx); /** * Exit a parse tree produced by the {@code litGroup} - * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * labeled alternative in {@link RefinementsLanguageParser#leafs}. * @param ctx the parse tree */ void exitLitGroup(RefinementsLanguageParser.LitGroupContext ctx); /** * Enter a parse tree produced by the {@code lit} - * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * labeled alternative in {@link RefinementsLanguageParser#leafs}. * @param ctx the parse tree */ void enterLit(RefinementsLanguageParser.LitContext ctx); /** * Exit a parse tree produced by the {@code lit} - * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * labeled alternative in {@link RefinementsLanguageParser#leafs}. * @param ctx the parse tree */ void exitLit(RefinementsLanguageParser.LitContext ctx); /** * Enter a parse tree produced by the {@code var} - * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * labeled alternative in {@link RefinementsLanguageParser#leafs}. * @param ctx the parse tree */ void enterVar(RefinementsLanguageParser.VarContext ctx); /** * Exit a parse tree produced by the {@code var} - * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * labeled alternative in {@link RefinementsLanguageParser#leafs}. * @param ctx the parse tree */ void exitVar(RefinementsLanguageParser.VarContext ctx); /** * Enter a parse tree produced by the {@code targetInvocation} - * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * labeled alternative in {@link RefinementsLanguageParser#leafs}. * @param ctx the parse tree */ void enterTargetInvocation(RefinementsLanguageParser.TargetInvocationContext ctx); /** * Exit a parse tree produced by the {@code targetInvocation} - * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * labeled alternative in {@link RefinementsLanguageParser#leafs}. * @param ctx the parse tree */ void exitTargetInvocation(RefinementsLanguageParser.TargetInvocationContext ctx); diff --git a/latte/src/main/java/refinements/RefinementsLanguageParser.java b/latte/src/main/java/refinements/RefinementsLanguageParser.java index ac1246c..bcd9db4 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageParser.java +++ b/latte/src/main/java/refinements/RefinementsLanguageParser.java @@ -20,11 +20,11 @@ public class RefinementsLanguageParser extends Parser { T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, LOGOP=6, BOOLOP=7, ARITHOP=8, BOOL=9, ID_UPPER=10, ID=11, INT=12, WS=13; public static final int - RULE_prog = 0, RULE_start = 1, RULE_pred = 2, RULE_exp = 3, RULE_operand = 4, - RULE_literalExpression = 5, RULE_literal = 6; + RULE_prog = 0, RULE_pred = 1, RULE_exp = 2, RULE_operand = 3, RULE_leafs = 4, + RULE_literal = 5; private static String[] makeRuleNames() { return new String[] { - "prog", "start", "pred", "exp", "operand", "literalExpression", "literal" + "prog", "pred", "exp", "operand", "leafs", "literal" }; } public static final String[] ruleNames = makeRuleNames(); @@ -94,8 +94,8 @@ public RefinementsLanguageParser(TokenStream input) { @SuppressWarnings("CheckReturnValue") public static class ProgContext extends ParserRuleContext { - public StartContext start() { - return getRuleContext(StartContext.class,0); + public PredContext pred() { + return getRuleContext(PredContext.class,0); } public ProgContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); @@ -120,19 +120,18 @@ public final ProgContext prog() throws RecognitionException { ProgContext _localctx = new ProgContext(_ctx, getState()); enterRule(_localctx, 0, RULE_prog); try { - setState(16); + setState(14); _errHandler.sync(this); switch (_input.LA(1)) { case T__0: case T__2: - case T__3: case BOOL: case ID: case INT: enterOuterAlt(_localctx, 1); { - setState(14); - start(); + setState(12); + pred(0); } break; case EOF: @@ -155,61 +154,6 @@ public final ProgContext prog() throws RecognitionException { return _localctx; } - @SuppressWarnings("CheckReturnValue") - public static class StartContext extends ParserRuleContext { - public StartContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_start; } - - public StartContext() { } - public void copyFrom(StartContext ctx) { - super.copyFrom(ctx); - } - } - @SuppressWarnings("CheckReturnValue") - public static class StartPredContext extends StartContext { - public PredContext pred() { - return getRuleContext(PredContext.class,0); - } - public StartPredContext(StartContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterStartPred(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitStartPred(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitStartPred(this); - else return visitor.visitChildren(this); - } - } - - public final StartContext start() throws RecognitionException { - StartContext _localctx = new StartContext(_ctx, getState()); - enterRule(_localctx, 2, RULE_start); - try { - _localctx = new StartPredContext(_localctx); - enterOuterAlt(_localctx, 1); - { - setState(18); - pred(0); - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - @SuppressWarnings("CheckReturnValue") public static class PredContext extends ParserRuleContext { public PredContext(ParserRuleContext parent, int invokingState) { @@ -316,13 +260,13 @@ private PredContext pred(int _p) throws RecognitionException { int _parentState = getState(); PredContext _localctx = new PredContext(_ctx, _parentState); PredContext _prevctx = _localctx; - int _startState = 4; - enterRecursionRule(_localctx, 4, RULE_pred, _p); + int _startState = 2; + enterRecursionRule(_localctx, 2, RULE_pred, _p); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(28); + setState(24); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,1,_ctx) ) { case 1: @@ -331,11 +275,11 @@ private PredContext pred(int _p) throws RecognitionException { _ctx = _localctx; _prevctx = _localctx; - setState(21); + setState(17); match(T__0); - setState(22); + setState(18); pred(0); - setState(23); + setState(19); match(T__1); } break; @@ -344,9 +288,9 @@ private PredContext pred(int _p) throws RecognitionException { _localctx = new PredNegateContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(25); + setState(21); match(T__2); - setState(26); + setState(22); pred(3); } break; @@ -355,13 +299,13 @@ private PredContext pred(int _p) throws RecognitionException { _localctx = new PredExpContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(27); + setState(23); exp(0); } break; } _ctx.stop = _input.LT(-1); - setState(35); + setState(31); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,2,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -372,16 +316,16 @@ private PredContext pred(int _p) throws RecognitionException { { _localctx = new PredLogicContext(new PredContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_pred); - setState(30); + setState(26); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(31); + setState(27); match(LOGOP); - setState(32); + setState(28); pred(3); } } } - setState(37); + setState(33); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,2,_ctx); } @@ -484,13 +428,13 @@ private ExpContext exp(int _p) throws RecognitionException { int _parentState = getState(); ExpContext _localctx = new ExpContext(_ctx, _parentState); ExpContext _prevctx = _localctx; - int _startState = 6; - enterRecursionRule(_localctx, 6, RULE_exp, _p); + int _startState = 4; + enterRecursionRule(_localctx, 4, RULE_exp, _p); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(44); + setState(40); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,3,_ctx) ) { case 1: @@ -499,11 +443,11 @@ private ExpContext exp(int _p) throws RecognitionException { _ctx = _localctx; _prevctx = _localctx; - setState(39); + setState(35); match(T__0); - setState(40); + setState(36); exp(0); - setState(41); + setState(37); match(T__1); } break; @@ -512,13 +456,13 @@ private ExpContext exp(int _p) throws RecognitionException { _localctx = new ExpOperandContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(43); + setState(39); operand(0); } break; } _ctx.stop = _input.LT(-1); - setState(51); + setState(47); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,4,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -529,16 +473,16 @@ private ExpContext exp(int _p) throws RecognitionException { { _localctx = new ExpBoolContext(new ExpContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_exp); - setState(46); + setState(42); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(47); + setState(43); match(BOOLOP); - setState(48); + setState(44); exp(3); } } } - setState(53); + setState(49); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,4,_ctx); } @@ -613,8 +557,8 @@ public T accept(ParseTreeVisitor visitor) { } @SuppressWarnings("CheckReturnValue") public static class OpLiteralContext extends OperandContext { - public LiteralExpressionContext literalExpression() { - return getRuleContext(LiteralExpressionContext.class,0); + public LeafsContext leafs() { + return getRuleContext(LeafsContext.class,0); } public OpLiteralContext(OperandContext ctx) { copyFrom(ctx); } @Override @@ -652,26 +596,6 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") - public static class OpMinusContext extends OperandContext { - public OperandContext operand() { - return getRuleContext(OperandContext.class,0); - } - public OpMinusContext(OperandContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterOpMinus(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitOpMinus(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitOpMinus(this); - else return visitor.visitChildren(this); - } - } - @SuppressWarnings("CheckReturnValue") public static class OpSubContext extends OperandContext { public List operand() { return getRuleContexts(OperandContext.class); @@ -704,13 +628,13 @@ private OperandContext operand(int _p) throws RecognitionException { int _parentState = getState(); OperandContext _localctx = new OperandContext(_ctx, _parentState); OperandContext _prevctx = _localctx; - int _startState = 8; - enterRecursionRule(_localctx, 8, RULE_operand, _p); + int _startState = 6; + enterRecursionRule(_localctx, 6, RULE_operand, _p); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(64); + setState(58); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,5,_ctx) ) { case 1: @@ -719,48 +643,37 @@ private OperandContext operand(int _p) throws RecognitionException { _ctx = _localctx; _prevctx = _localctx; - setState(55); - literalExpression(); + setState(51); + leafs(); } break; case 2: - { - _localctx = new OpMinusContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - setState(56); - match(T__3); - setState(57); - operand(3); - } - break; - case 3: { _localctx = new OpNotContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(58); + setState(52); match(T__2); - setState(59); + setState(53); operand(2); } break; - case 4: + case 3: { _localctx = new OpGroupContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(60); + setState(54); match(T__0); - setState(61); + setState(55); operand(0); - setState(62); + setState(56); match(T__1); } break; } _ctx.stop = _input.LT(-1); - setState(74); + setState(68); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,7,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -768,37 +681,37 @@ private OperandContext operand(int _p) throws RecognitionException { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(72); + setState(66); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) { case 1: { _localctx = new OpArithContext(new OperandContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_operand); - setState(66); - if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)"); - setState(67); + setState(60); + if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)"); + setState(61); match(ARITHOP); - setState(68); - operand(6); + setState(62); + operand(5); } break; case 2: { _localctx = new OpSubContext(new OperandContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_operand); - setState(69); - if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)"); - setState(70); + setState(63); + if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)"); + setState(64); match(T__3); - setState(71); - operand(5); + setState(65); + operand(4); } break; } } } - setState(76); + setState(70); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,7,_ctx); } @@ -816,24 +729,24 @@ private OperandContext operand(int _p) throws RecognitionException { } @SuppressWarnings("CheckReturnValue") - public static class LiteralExpressionContext extends ParserRuleContext { - public LiteralExpressionContext(ParserRuleContext parent, int invokingState) { + public static class LeafsContext extends ParserRuleContext { + public LeafsContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } - @Override public int getRuleIndex() { return RULE_literalExpression; } + @Override public int getRuleIndex() { return RULE_leafs; } - public LiteralExpressionContext() { } - public void copyFrom(LiteralExpressionContext ctx) { + public LeafsContext() { } + public void copyFrom(LeafsContext ctx) { super.copyFrom(ctx); } } @SuppressWarnings("CheckReturnValue") - public static class TargetInvocationContext extends LiteralExpressionContext { + public static class TargetInvocationContext extends LeafsContext { public List ID() { return getTokens(RefinementsLanguageParser.ID); } public TerminalNode ID(int i) { return getToken(RefinementsLanguageParser.ID, i); } - public TargetInvocationContext(LiteralExpressionContext ctx) { copyFrom(ctx); } + public TargetInvocationContext(LeafsContext ctx) { copyFrom(ctx); } @Override public void enterRule(ParseTreeListener listener) { if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterTargetInvocation(this); @@ -849,11 +762,11 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") - public static class LitGroupContext extends LiteralExpressionContext { - public LiteralExpressionContext literalExpression() { - return getRuleContext(LiteralExpressionContext.class,0); + public static class LitGroupContext extends LeafsContext { + public LeafsContext leafs() { + return getRuleContext(LeafsContext.class,0); } - public LitGroupContext(LiteralExpressionContext ctx) { copyFrom(ctx); } + public LitGroupContext(LeafsContext ctx) { copyFrom(ctx); } @Override public void enterRule(ParseTreeListener listener) { if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterLitGroup(this); @@ -869,11 +782,11 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") - public static class LitContext extends LiteralExpressionContext { + public static class LitContext extends LeafsContext { public LiteralContext literal() { return getRuleContext(LiteralContext.class,0); } - public LitContext(LiteralExpressionContext ctx) { copyFrom(ctx); } + public LitContext(LeafsContext ctx) { copyFrom(ctx); } @Override public void enterRule(ParseTreeListener listener) { if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterLit(this); @@ -889,9 +802,9 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") - public static class VarContext extends LiteralExpressionContext { + public static class VarContext extends LeafsContext { public TerminalNode ID() { return getToken(RefinementsLanguageParser.ID, 0); } - public VarContext(LiteralExpressionContext ctx) { copyFrom(ctx); } + public VarContext(LeafsContext ctx) { copyFrom(ctx); } @Override public void enterRule(ParseTreeListener listener) { if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterVar(this); @@ -907,22 +820,22 @@ public T accept(ParseTreeVisitor visitor) { } } - public final LiteralExpressionContext literalExpression() throws RecognitionException { - LiteralExpressionContext _localctx = new LiteralExpressionContext(_ctx, getState()); - enterRule(_localctx, 10, RULE_literalExpression); + public final LeafsContext leafs() throws RecognitionException { + LeafsContext _localctx = new LeafsContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_leafs); try { - setState(86); + setState(80); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,8,_ctx) ) { case 1: _localctx = new LitGroupContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(77); + setState(71); match(T__0); - setState(78); - literalExpression(); - setState(79); + setState(72); + leafs(); + setState(73); match(T__1); } break; @@ -930,7 +843,7 @@ public final LiteralExpressionContext literalExpression() throws RecognitionExce _localctx = new LitContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(81); + setState(75); literal(); } break; @@ -938,7 +851,7 @@ public final LiteralExpressionContext literalExpression() throws RecognitionExce _localctx = new VarContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(82); + setState(76); match(ID); } break; @@ -946,11 +859,11 @@ public final LiteralExpressionContext literalExpression() throws RecognitionExce _localctx = new TargetInvocationContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(83); + setState(77); match(ID); - setState(84); + setState(78); match(T__4); - setState(85); + setState(79); match(ID); } break; @@ -992,12 +905,12 @@ public T accept(ParseTreeVisitor visitor) { public final LiteralContext literal() throws RecognitionException { LiteralContext _localctx = new LiteralContext(_ctx, getState()); - enterRule(_localctx, 12, RULE_literal); + enterRule(_localctx, 10, RULE_literal); int _la; try { enterOuterAlt(_localctx, 1); { - setState(88); + setState(82); _la = _input.LA(1); if ( !(_la==BOOL || _la==INT) ) { _errHandler.recoverInline(this); @@ -1022,11 +935,11 @@ public final LiteralContext literal() throws RecognitionException { public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { switch (ruleIndex) { - case 2: + case 1: return pred_sempred((PredContext)_localctx, predIndex); - case 3: + case 2: return exp_sempred((ExpContext)_localctx, predIndex); - case 4: + case 3: return operand_sempred((OperandContext)_localctx, predIndex); } return true; @@ -1048,69 +961,67 @@ private boolean exp_sempred(ExpContext _localctx, int predIndex) { private boolean operand_sempred(OperandContext _localctx, int predIndex) { switch (predIndex) { case 2: - return precpred(_ctx, 5); - case 3: return precpred(_ctx, 4); + case 3: + return precpred(_ctx, 3); } return true; } public static final String _serializedATN = - "\u0004\u0001\r[\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0004\u0001\rU\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ - "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0001\u0000\u0001\u0000\u0003"+ - "\u0000\u0011\b\u0000\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001"+ - "\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0003"+ - "\u0002\u001d\b\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0005\u0002\""+ - "\b\u0002\n\u0002\f\u0002%\t\u0002\u0001\u0003\u0001\u0003\u0001\u0003"+ - "\u0001\u0003\u0001\u0003\u0001\u0003\u0003\u0003-\b\u0003\u0001\u0003"+ - "\u0001\u0003\u0001\u0003\u0005\u00032\b\u0003\n\u0003\f\u00035\t\u0003"+ - "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004"+ - "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0003\u0004A\b\u0004"+ - "\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004"+ - "\u0005\u0004I\b\u0004\n\u0004\f\u0004L\t\u0004\u0001\u0005\u0001\u0005"+ - "\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005"+ - "\u0001\u0005\u0003\u0005W\b\u0005\u0001\u0006\u0001\u0006\u0001\u0006"+ - "\u0000\u0003\u0004\u0006\b\u0007\u0000\u0002\u0004\u0006\b\n\f\u0000\u0001"+ - "\u0002\u0000\t\t\f\fa\u0000\u0010\u0001\u0000\u0000\u0000\u0002\u0012"+ - "\u0001\u0000\u0000\u0000\u0004\u001c\u0001\u0000\u0000\u0000\u0006,\u0001"+ - "\u0000\u0000\u0000\b@\u0001\u0000\u0000\u0000\nV\u0001\u0000\u0000\u0000"+ - "\fX\u0001\u0000\u0000\u0000\u000e\u0011\u0003\u0002\u0001\u0000\u000f"+ - "\u0011\u0001\u0000\u0000\u0000\u0010\u000e\u0001\u0000\u0000\u0000\u0010"+ - "\u000f\u0001\u0000\u0000\u0000\u0011\u0001\u0001\u0000\u0000\u0000\u0012"+ - "\u0013\u0003\u0004\u0002\u0000\u0013\u0003\u0001\u0000\u0000\u0000\u0014"+ - "\u0015\u0006\u0002\uffff\uffff\u0000\u0015\u0016\u0005\u0001\u0000\u0000"+ - "\u0016\u0017\u0003\u0004\u0002\u0000\u0017\u0018\u0005\u0002\u0000\u0000"+ - "\u0018\u001d\u0001\u0000\u0000\u0000\u0019\u001a\u0005\u0003\u0000\u0000"+ - "\u001a\u001d\u0003\u0004\u0002\u0003\u001b\u001d\u0003\u0006\u0003\u0000"+ - "\u001c\u0014\u0001\u0000\u0000\u0000\u001c\u0019\u0001\u0000\u0000\u0000"+ - "\u001c\u001b\u0001\u0000\u0000\u0000\u001d#\u0001\u0000\u0000\u0000\u001e"+ - "\u001f\n\u0002\u0000\u0000\u001f \u0005\u0006\u0000\u0000 \"\u0003\u0004"+ - "\u0002\u0003!\u001e\u0001\u0000\u0000\u0000\"%\u0001\u0000\u0000\u0000"+ - "#!\u0001\u0000\u0000\u0000#$\u0001\u0000\u0000\u0000$\u0005\u0001\u0000"+ - "\u0000\u0000%#\u0001\u0000\u0000\u0000&\'\u0006\u0003\uffff\uffff\u0000"+ - "\'(\u0005\u0001\u0000\u0000()\u0003\u0006\u0003\u0000)*\u0005\u0002\u0000"+ - "\u0000*-\u0001\u0000\u0000\u0000+-\u0003\b\u0004\u0000,&\u0001\u0000\u0000"+ - "\u0000,+\u0001\u0000\u0000\u0000-3\u0001\u0000\u0000\u0000./\n\u0002\u0000"+ - "\u0000/0\u0005\u0007\u0000\u000002\u0003\u0006\u0003\u00031.\u0001\u0000"+ - "\u0000\u000025\u0001\u0000\u0000\u000031\u0001\u0000\u0000\u000034\u0001"+ - "\u0000\u0000\u00004\u0007\u0001\u0000\u0000\u000053\u0001\u0000\u0000"+ - "\u000067\u0006\u0004\uffff\uffff\u00007A\u0003\n\u0005\u000089\u0005\u0004"+ - "\u0000\u00009A\u0003\b\u0004\u0003:;\u0005\u0003\u0000\u0000;A\u0003\b"+ - "\u0004\u0002<=\u0005\u0001\u0000\u0000=>\u0003\b\u0004\u0000>?\u0005\u0002"+ - "\u0000\u0000?A\u0001\u0000\u0000\u0000@6\u0001\u0000\u0000\u0000@8\u0001"+ - "\u0000\u0000\u0000@:\u0001\u0000\u0000\u0000@<\u0001\u0000\u0000\u0000"+ - "AJ\u0001\u0000\u0000\u0000BC\n\u0005\u0000\u0000CD\u0005\b\u0000\u0000"+ - "DI\u0003\b\u0004\u0006EF\n\u0004\u0000\u0000FG\u0005\u0004\u0000\u0000"+ - "GI\u0003\b\u0004\u0005HB\u0001\u0000\u0000\u0000HE\u0001\u0000\u0000\u0000"+ - "IL\u0001\u0000\u0000\u0000JH\u0001\u0000\u0000\u0000JK\u0001\u0000\u0000"+ - "\u0000K\t\u0001\u0000\u0000\u0000LJ\u0001\u0000\u0000\u0000MN\u0005\u0001"+ - "\u0000\u0000NO\u0003\n\u0005\u0000OP\u0005\u0002\u0000\u0000PW\u0001\u0000"+ - "\u0000\u0000QW\u0003\f\u0006\u0000RW\u0005\u000b\u0000\u0000ST\u0005\u000b"+ - "\u0000\u0000TU\u0005\u0005\u0000\u0000UW\u0005\u000b\u0000\u0000VM\u0001"+ - "\u0000\u0000\u0000VQ\u0001\u0000\u0000\u0000VR\u0001\u0000\u0000\u0000"+ - "VS\u0001\u0000\u0000\u0000W\u000b\u0001\u0000\u0000\u0000XY\u0007\u0000"+ - "\u0000\u0000Y\r\u0001\u0000\u0000\u0000\t\u0010\u001c#,3@HJV"; + "\u0005\u0007\u0005\u0001\u0000\u0001\u0000\u0003\u0000\u000f\b\u0000\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0003\u0001\u0019\b\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0005\u0001\u001e\b\u0001\n\u0001\f\u0001!\t\u0001\u0001\u0002"+ + "\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0003\u0002"+ + ")\b\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0005\u0002.\b\u0002\n\u0002"+ + "\f\u00021\t\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001"+ + "\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0003\u0003;\b\u0003\u0001"+ + "\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0005"+ + "\u0003C\b\u0003\n\u0003\f\u0003F\t\u0003\u0001\u0004\u0001\u0004\u0001"+ + "\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+ + "\u0004\u0003\u0004Q\b\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0000"+ + "\u0003\u0002\u0004\u0006\u0006\u0000\u0002\u0004\u0006\b\n\u0000\u0001"+ + "\u0002\u0000\t\t\f\f[\u0000\u000e\u0001\u0000\u0000\u0000\u0002\u0018"+ + "\u0001\u0000\u0000\u0000\u0004(\u0001\u0000\u0000\u0000\u0006:\u0001\u0000"+ + "\u0000\u0000\bP\u0001\u0000\u0000\u0000\nR\u0001\u0000\u0000\u0000\f\u000f"+ + "\u0003\u0002\u0001\u0000\r\u000f\u0001\u0000\u0000\u0000\u000e\f\u0001"+ + "\u0000\u0000\u0000\u000e\r\u0001\u0000\u0000\u0000\u000f\u0001\u0001\u0000"+ + "\u0000\u0000\u0010\u0011\u0006\u0001\uffff\uffff\u0000\u0011\u0012\u0005"+ + "\u0001\u0000\u0000\u0012\u0013\u0003\u0002\u0001\u0000\u0013\u0014\u0005"+ + "\u0002\u0000\u0000\u0014\u0019\u0001\u0000\u0000\u0000\u0015\u0016\u0005"+ + "\u0003\u0000\u0000\u0016\u0019\u0003\u0002\u0001\u0003\u0017\u0019\u0003"+ + "\u0004\u0002\u0000\u0018\u0010\u0001\u0000\u0000\u0000\u0018\u0015\u0001"+ + "\u0000\u0000\u0000\u0018\u0017\u0001\u0000\u0000\u0000\u0019\u001f\u0001"+ + "\u0000\u0000\u0000\u001a\u001b\n\u0002\u0000\u0000\u001b\u001c\u0005\u0006"+ + "\u0000\u0000\u001c\u001e\u0003\u0002\u0001\u0003\u001d\u001a\u0001\u0000"+ + "\u0000\u0000\u001e!\u0001\u0000\u0000\u0000\u001f\u001d\u0001\u0000\u0000"+ + "\u0000\u001f \u0001\u0000\u0000\u0000 \u0003\u0001\u0000\u0000\u0000!"+ + "\u001f\u0001\u0000\u0000\u0000\"#\u0006\u0002\uffff\uffff\u0000#$\u0005"+ + "\u0001\u0000\u0000$%\u0003\u0004\u0002\u0000%&\u0005\u0002\u0000\u0000"+ + "&)\u0001\u0000\u0000\u0000\')\u0003\u0006\u0003\u0000(\"\u0001\u0000\u0000"+ + "\u0000(\'\u0001\u0000\u0000\u0000)/\u0001\u0000\u0000\u0000*+\n\u0002"+ + "\u0000\u0000+,\u0005\u0007\u0000\u0000,.\u0003\u0004\u0002\u0003-*\u0001"+ + "\u0000\u0000\u0000.1\u0001\u0000\u0000\u0000/-\u0001\u0000\u0000\u0000"+ + "/0\u0001\u0000\u0000\u00000\u0005\u0001\u0000\u0000\u00001/\u0001\u0000"+ + "\u0000\u000023\u0006\u0003\uffff\uffff\u00003;\u0003\b\u0004\u000045\u0005"+ + "\u0003\u0000\u00005;\u0003\u0006\u0003\u000267\u0005\u0001\u0000\u0000"+ + "78\u0003\u0006\u0003\u000089\u0005\u0002\u0000\u00009;\u0001\u0000\u0000"+ + "\u0000:2\u0001\u0000\u0000\u0000:4\u0001\u0000\u0000\u0000:6\u0001\u0000"+ + "\u0000\u0000;D\u0001\u0000\u0000\u0000<=\n\u0004\u0000\u0000=>\u0005\b"+ + "\u0000\u0000>C\u0003\u0006\u0003\u0005?@\n\u0003\u0000\u0000@A\u0005\u0004"+ + "\u0000\u0000AC\u0003\u0006\u0003\u0004B<\u0001\u0000\u0000\u0000B?\u0001"+ + "\u0000\u0000\u0000CF\u0001\u0000\u0000\u0000DB\u0001\u0000\u0000\u0000"+ + "DE\u0001\u0000\u0000\u0000E\u0007\u0001\u0000\u0000\u0000FD\u0001\u0000"+ + "\u0000\u0000GH\u0005\u0001\u0000\u0000HI\u0003\b\u0004\u0000IJ\u0005\u0002"+ + "\u0000\u0000JQ\u0001\u0000\u0000\u0000KQ\u0003\n\u0005\u0000LQ\u0005\u000b"+ + "\u0000\u0000MN\u0005\u000b\u0000\u0000NO\u0005\u0005\u0000\u0000OQ\u0005"+ + "\u000b\u0000\u0000PG\u0001\u0000\u0000\u0000PK\u0001\u0000\u0000\u0000"+ + "PL\u0001\u0000\u0000\u0000PM\u0001\u0000\u0000\u0000Q\t\u0001\u0000\u0000"+ + "\u0000RS\u0007\u0000\u0000\u0000S\u000b\u0001\u0000\u0000\u0000\t\u000e"+ + "\u0018\u001f(/:BDP"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/latte/src/main/java/refinements/RefinementsLanguageVisitor.java b/latte/src/main/java/refinements/RefinementsLanguageVisitor.java index a657b0a..806337e 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageVisitor.java +++ b/latte/src/main/java/refinements/RefinementsLanguageVisitor.java @@ -16,13 +16,6 @@ public interface RefinementsLanguageVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitProg(RefinementsLanguageParser.ProgContext ctx); - /** - * Visit a parse tree produced by the {@code startPred} - * labeled alternative in {@link RefinementsLanguageParser#start}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitStartPred(RefinementsLanguageParser.StartPredContext ctx); /** * Visit a parse tree produced by the {@code predGroup} * labeled alternative in {@link RefinementsLanguageParser#pred}. @@ -100,13 +93,6 @@ public interface RefinementsLanguageVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitOpGroup(RefinementsLanguageParser.OpGroupContext ctx); - /** - * Visit a parse tree produced by the {@code opMinus} - * labeled alternative in {@link RefinementsLanguageParser#operand}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitOpMinus(RefinementsLanguageParser.OpMinusContext ctx); /** * Visit a parse tree produced by the {@code opSub} * labeled alternative in {@link RefinementsLanguageParser#operand}. @@ -116,28 +102,28 @@ public interface RefinementsLanguageVisitor extends ParseTreeVisitor { T visitOpSub(RefinementsLanguageParser.OpSubContext ctx); /** * Visit a parse tree produced by the {@code litGroup} - * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * labeled alternative in {@link RefinementsLanguageParser#leafs}. * @param ctx the parse tree * @return the visitor result */ T visitLitGroup(RefinementsLanguageParser.LitGroupContext ctx); /** * Visit a parse tree produced by the {@code lit} - * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * labeled alternative in {@link RefinementsLanguageParser#leafs}. * @param ctx the parse tree * @return the visitor result */ T visitLit(RefinementsLanguageParser.LitContext ctx); /** * Visit a parse tree produced by the {@code var} - * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * labeled alternative in {@link RefinementsLanguageParser#leafs}. * @param ctx the parse tree * @return the visitor result */ T visitVar(RefinementsLanguageParser.VarContext ctx); /** * Visit a parse tree produced by the {@code targetInvocation} - * labeled alternative in {@link RefinementsLanguageParser#literalExpression}. + * labeled alternative in {@link RefinementsLanguageParser#leafs}. * @param ctx the parse tree * @return the visitor result */ diff --git a/latte/src/main/java/refinements/Test.java b/latte/src/main/java/refinements/TestRefinementsLanguage.java similarity index 94% rename from latte/src/main/java/refinements/Test.java rename to latte/src/main/java/refinements/TestRefinementsLanguage.java index e042773..2a227fd 100644 --- a/latte/src/main/java/refinements/Test.java +++ b/latte/src/main/java/refinements/TestRefinementsLanguage.java @@ -9,10 +9,10 @@ // import refinements.antlr.RefinementsLanguageLexer; // import refinements.antlr.RefinementsLanguageParser; -public class Test { +public class TestRefinementsLanguage { public static void main(String[] args) { - String input = "a + b < 10 + c.y"; + String input = "a < 10"; // // Create input stream (modern way) CharStream inputStream = CharStreams.fromString(input); diff --git a/latte/src/main/java/smt/JavaSMTTest.java b/latte/src/main/java/smt/JavaSMTTest.java new file mode 100644 index 0000000..4e568cf --- /dev/null +++ b/latte/src/main/java/smt/JavaSMTTest.java @@ -0,0 +1,137 @@ +package smt; + +import org.sosy_lab.java_smt.SolverContextFactory; +import org.sosy_lab.java_smt.SolverContextFactory.Solvers; +import org.sosy_lab.java_smt.api.*; +import org.sosy_lab.java_smt.api.NumeralFormula.IntegerFormula; + +public class JavaSMTTest { + public static void main(String[] args) { + System.out.println("Testing JavaSMT with bundled Z3..."); + + try { + // Test the specific query: x == 0 -> x > -1 + testImplication(); + + } catch (Exception e) { + System.err.println("Error: " + e.getMessage()); + e.printStackTrace(); + } + } + + public static void testImplication() throws Exception { + System.out.println("Checking: x == 0 -> x > -1"); + + // Create solver context with Z3 (bundled, no installation needed) + try (SolverContext context = SolverContextFactory.createSolverContext( + SolverContextFactory.Solvers.Z3)) { + + // Get formula manager + FormulaManager fmgr = context.getFormulaManager(); + IntegerFormulaManager ifmgr = fmgr.getIntegerFormulaManager(); + BooleanFormulaManager bfmgr = fmgr.getBooleanFormulaManager(); + + // Create integer variable x + IntegerFormula x = ifmgr.makeVariable("x"); + + // Create the expressions + BooleanFormula xEquals0 = ifmgr.equal(x, ifmgr.makeNumber(0)); // x == 0 + BooleanFormula xGreaterThanMinus1 = ifmgr.greaterThan(x, ifmgr.makeNumber(-1)); // x > -1 + + // Create the implication: x == 0 -> x > -1 + BooleanFormula implication = bfmgr.implication(xEquals0, xGreaterThanMinus1); + + // Create prover (for checking validity) + try (ProverEnvironment prover = context.newProverEnvironment()) { + + // Check if implication is valid by checking if its negation is unsat + prover.push(bfmgr.not(implication)); + + boolean isUnsat = prover.isUnsat(); + + if (isUnsat) { + System.out.println("✓ VALID: The implication x == 0 -> x > -1 is always true"); + } else { + System.out.println("✗ INVALID: The implication is not always true"); + + // Get counterexample + try (Model model = prover.getModel()) { + System.out.println("Counterexample: x = " + model.evaluate(x)); + } + } + + prover.pop(); + } + + // Also test satisfiability of the implication itself + System.out.println("\nTesting satisfiability of the implication..."); + try (ProverEnvironment prover = context.newProverEnvironment()) { + prover.push(implication); + + boolean isSat = !prover.isUnsat(); + System.out.println("Satisfiability: " + (isSat ? "SAT" : "UNSAT")); + + if (isSat) { + try (Model model = prover.getModel()) { + System.out.println("Example where implication holds: x = " + model.evaluate(x)); + } + } + } + } + } + + // Additional method to test multiple queries + public static void testMultipleQueries() throws Exception { + System.out.println("\n=== Testing Multiple Queries ==="); + + try (SolverContext context = SolverContextFactory.createSolverContext(Solvers.Z3)) { + FormulaManager fmgr = context.getFormulaManager(); + IntegerFormulaManager ifmgr = fmgr.getIntegerFormulaManager(); + BooleanFormulaManager bfmgr = fmgr.getBooleanFormulaManager(); + + IntegerFormula x = ifmgr.makeVariable("x"); + + // Test different implications + String[] descriptions = { + "x == 0 -> x > -1", + "x > 5 -> x > 0", + "x == 0 -> x < 0" + }; + + BooleanFormula[] implications = { + // x == 0 -> x > -1 + bfmgr.implication( + ifmgr.equal(x, ifmgr.makeNumber(0)), + ifmgr.greaterThan(x, ifmgr.makeNumber(-1)) + ), + // x > 5 -> x > 0 + bfmgr.implication( + ifmgr.greaterThan(x, ifmgr.makeNumber(5)), + ifmgr.greaterThan(x, ifmgr.makeNumber(0)) + ), + // x == 0 -> x < 0 + bfmgr.implication( + ifmgr.equal(x, ifmgr.makeNumber(0)), + ifmgr.lessThan(x, ifmgr.makeNumber(0)) + ) + }; + + for (int i = 0; i < descriptions.length; i++) { + System.out.println("\nTesting: " + descriptions[i]); + + try (ProverEnvironment prover = context.newProverEnvironment()) { + prover.push(bfmgr.not(implications[i])); + boolean isValid = prover.isUnsat(); + + System.out.println("Result: " + (isValid ? "VALID" : "INVALID")); + + if (!isValid) { + try (Model model = prover.getModel()) { + System.out.println("Counterexample: x = " + model.evaluate(x)); + } + } + } + } + } + } +} \ No newline at end of file diff --git a/latte/src/main/java/smt/TranslatorToZ3.java b/latte/src/main/java/smt/TranslatorToZ3.java new file mode 100644 index 0000000..897a268 --- /dev/null +++ b/latte/src/main/java/smt/TranslatorToZ3.java @@ -0,0 +1,5 @@ +package smt; + +public class TranslatorToZ3 { + +} From 5be826e209ca7392cf4c6c108d856219e1ba1beb Mon Sep 17 00:00:00 2001 From: Catarina Gamboa Date: Tue, 24 Jun 2025 15:25:24 +0100 Subject: [PATCH 04/14] make z3 work and test it --- latte/pom.xml | 8 +- .../refinements/TestRefinementsLanguage.java | 8 +- latte/src/main/java/smt/JavaSMTTest.java | 201 +++++++++--------- 3 files changed, 109 insertions(+), 108 deletions(-) diff --git a/latte/pom.xml b/latte/pom.xml index 450a706..e4c076d 100644 --- a/latte/pom.xml +++ b/latte/pom.xml @@ -20,11 +20,11 @@ - + - org.sosy-lab - java-smt - 5.0.1-523-g9001c0ea4 + tools.aqua + z3-turnkey + 4.12.2.1 diff --git a/latte/src/main/java/refinements/TestRefinementsLanguage.java b/latte/src/main/java/refinements/TestRefinementsLanguage.java index 2a227fd..65bc27d 100644 --- a/latte/src/main/java/refinements/TestRefinementsLanguage.java +++ b/latte/src/main/java/refinements/TestRefinementsLanguage.java @@ -2,13 +2,13 @@ import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.CharStreams; -// import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.tree.ParseTree; -// import refinements.antlr.RefinementsLanguageLexer; -// import refinements.antlr.RefinementsLanguageParser; - +/** + * Test class for the Refinements Language parser. + * This class demonstrates how to parse a simple expression using ANTLR. + */ public class TestRefinementsLanguage { public static void main(String[] args) { diff --git a/latte/src/main/java/smt/JavaSMTTest.java b/latte/src/main/java/smt/JavaSMTTest.java index 4e568cf..296dff5 100644 --- a/latte/src/main/java/smt/JavaSMTTest.java +++ b/latte/src/main/java/smt/JavaSMTTest.java @@ -1,13 +1,13 @@ package smt; -import org.sosy_lab.java_smt.SolverContextFactory; -import org.sosy_lab.java_smt.SolverContextFactory.Solvers; -import org.sosy_lab.java_smt.api.*; -import org.sosy_lab.java_smt.api.NumeralFormula.IntegerFormula; +import com.microsoft.z3.*; +/** + * Simple Java program to test Z3 SMT solver with a specific implication. + */ public class JavaSMTTest { public static void main(String[] args) { - System.out.println("Testing JavaSMT with bundled Z3..."); + System.out.println("Testing Z3 Turnkey (with bundled natives)..."); try { // Test the specific query: x == 0 -> x > -1 @@ -19,119 +19,120 @@ public static void main(String[] args) { } } - public static void testImplication() throws Exception { + public static void testImplication() { System.out.println("Checking: x == 0 -> x > -1"); + // Translation to z3 of the expression above is the following: - // Create solver context with Z3 (bundled, no installation needed) - try (SolverContext context = SolverContextFactory.createSolverContext( - SolverContextFactory.Solvers.Z3)) { - - // Get formula manager - FormulaManager fmgr = context.getFormulaManager(); - IntegerFormulaManager ifmgr = fmgr.getIntegerFormulaManager(); - BooleanFormulaManager bfmgr = fmgr.getBooleanFormulaManager(); + try (Context ctx = new Context()) { // Create integer variable x - IntegerFormula x = ifmgr.makeVariable("x"); + IntExpr x = ctx.mkIntConst("x"); // Create the expressions - BooleanFormula xEquals0 = ifmgr.equal(x, ifmgr.makeNumber(0)); // x == 0 - BooleanFormula xGreaterThanMinus1 = ifmgr.greaterThan(x, ifmgr.makeNumber(-1)); // x > -1 + BoolExpr xEquals0 = ctx.mkEq(x, ctx.mkInt(0)); // x == 0 + BoolExpr xGreaterThanMinus1 = ctx.mkGt(x, ctx.mkInt(-1)); // x > -1 // Create the implication: x == 0 -> x > -1 - BooleanFormula implication = bfmgr.implication(xEquals0, xGreaterThanMinus1); - - // Create prover (for checking validity) - try (ProverEnvironment prover = context.newProverEnvironment()) { - - // Check if implication is valid by checking if its negation is unsat - prover.push(bfmgr.not(implication)); - - boolean isUnsat = prover.isUnsat(); - - if (isUnsat) { - System.out.println("✓ VALID: The implication x == 0 -> x > -1 is always true"); - } else { - System.out.println("✗ INVALID: The implication is not always true"); - - // Get counterexample - try (Model model = prover.getModel()) { - System.out.println("Counterexample: x = " + model.evaluate(x)); - } - } - - prover.pop(); + BoolExpr implication = ctx.mkImplies(xEquals0, xGreaterThanMinus1); + + // Create solver + Solver solver = ctx.mkSolver(); + + // Check if implication is valid (tautology) + // We do this by checking if the negation is unsatisfiable + solver.add(ctx.mkNot(implication)); + + Status result = solver.check(); + + System.out.println("Result: " + result); + + if (result == Status.UNSATISFIABLE) { + System.out.println("✓ VALID: The implication x == 0 -> x > -1 is always true"); + } else if (result == Status.SATISFIABLE) { + System.out.println("✗ INVALID: Found a counterexample"); + Model model = solver.getModel(); + System.out.println("Counterexample: x = " + model.evaluate(x, false)); + } else { + System.out.println("? UNKNOWN"); } // Also test satisfiability of the implication itself System.out.println("\nTesting satisfiability of the implication..."); - try (ProverEnvironment prover = context.newProverEnvironment()) { - prover.push(implication); - - boolean isSat = !prover.isUnsat(); - System.out.println("Satisfiability: " + (isSat ? "SAT" : "UNSAT")); - - if (isSat) { - try (Model model = prover.getModel()) { - System.out.println("Example where implication holds: x = " + model.evaluate(x)); - } - } + Solver solver2 = ctx.mkSolver(); + solver2.add(implication); + + Status sat_result = solver2.check(); + System.out.println("Satisfiability: " + sat_result); + + if (sat_result == Status.SATISFIABLE) { + Model model = solver2.getModel(); + System.out.println("Example where implication holds: x = " + model.evaluate(x, false)); } + + } catch (Exception e) { + System.err.println("Error in test: " + e.getMessage()); + e.printStackTrace(); } } - // Additional method to test multiple queries - public static void testMultipleQueries() throws Exception { - System.out.println("\n=== Testing Multiple Queries ==="); + // Test multiple implications + public static void testMultipleImplications() { + System.out.println("\n=== Testing Multiple Implications ==="); + + String[] queries = { + "x == 0 -> x > -1", + "x > 5 -> x > 0", + "x == 0 -> x < 0" + }; - try (SolverContext context = SolverContextFactory.createSolverContext(Solvers.Z3)) { - FormulaManager fmgr = context.getFormulaManager(); - IntegerFormulaManager ifmgr = fmgr.getIntegerFormulaManager(); - BooleanFormulaManager bfmgr = fmgr.getBooleanFormulaManager(); - - IntegerFormula x = ifmgr.makeVariable("x"); - - // Test different implications - String[] descriptions = { - "x == 0 -> x > -1", - "x > 5 -> x > 0", - "x == 0 -> x < 0" - }; - - BooleanFormula[] implications = { - // x == 0 -> x > -1 - bfmgr.implication( - ifmgr.equal(x, ifmgr.makeNumber(0)), - ifmgr.greaterThan(x, ifmgr.makeNumber(-1)) - ), - // x > 5 -> x > 0 - bfmgr.implication( - ifmgr.greaterThan(x, ifmgr.makeNumber(5)), - ifmgr.greaterThan(x, ifmgr.makeNumber(0)) - ), - // x == 0 -> x < 0 - bfmgr.implication( - ifmgr.equal(x, ifmgr.makeNumber(0)), - ifmgr.lessThan(x, ifmgr.makeNumber(0)) - ) - }; - - for (int i = 0; i < descriptions.length; i++) { - System.out.println("\nTesting: " + descriptions[i]); - - try (ProverEnvironment prover = context.newProverEnvironment()) { - prover.push(bfmgr.not(implications[i])); - boolean isValid = prover.isUnsat(); - - System.out.println("Result: " + (isValid ? "VALID" : "INVALID")); - - if (!isValid) { - try (Model model = prover.getModel()) { - System.out.println("Counterexample: x = " + model.evaluate(x)); - } - } - } + for (String query : queries) { + System.out.println("\nTesting: " + query); + boolean result = checkImplication(query); + System.out.println("Result: " + (result ? "VALID" : "INVALID")); + } + } + + private static boolean checkImplication(String description) { + try (Context ctx = new Context()) { + IntExpr x = ctx.mkIntConst("x"); + BoolExpr implication = null; + + // Build specific implications + if (description.contains("x == 0 -> x > -1")) { + implication = ctx.mkImplies( + ctx.mkEq(x, ctx.mkInt(0)), + ctx.mkGt(x, ctx.mkInt(-1)) + ); + } else if (description.contains("x > 5 -> x > 0")) { + implication = ctx.mkImplies( + ctx.mkGt(x, ctx.mkInt(5)), + ctx.mkGt(x, ctx.mkInt(0)) + ); + } else if (description.contains("x == 0 -> x < 0")) { + implication = ctx.mkImplies( + ctx.mkEq(x, ctx.mkInt(0)), + ctx.mkLt(x, ctx.mkInt(0)) + ); + } + + if (implication == null) return false; + + Solver solver = ctx.mkSolver(); + solver.add(ctx.mkNot(implication)); + + Status result = solver.check(); + + if (result == Status.SATISFIABLE) { + Model model = solver.getModel(); + System.out.println(" Counterexample: x = " + model.evaluate(x, false)); + return false; } + + return result == Status.UNSATISFIABLE; + + } catch (Exception e) { + System.err.println("Error: " + e.getMessage()); + return false; } } } \ No newline at end of file From 04a03a10a34c47e3e8df93c0bbeac7bc3164f5e8 Mon Sep 17 00:00:00 2001 From: Catarina Gamboa Date: Tue, 24 Jun 2025 15:35:40 +0100 Subject: [PATCH 05/14] create template for simple smt generation --- .../java/smt/RefinementsToZ3Translator.java | 50 ++++ .../main/java/smt/SimpleTranslatorTest.java | 236 ++++++++++++++++++ latte/src/main/java/smt/TranslatorToZ3.java | 5 - 3 files changed, 286 insertions(+), 5 deletions(-) create mode 100644 latte/src/main/java/smt/RefinementsToZ3Translator.java create mode 100644 latte/src/main/java/smt/SimpleTranslatorTest.java delete mode 100644 latte/src/main/java/smt/TranslatorToZ3.java diff --git a/latte/src/main/java/smt/RefinementsToZ3Translator.java b/latte/src/main/java/smt/RefinementsToZ3Translator.java new file mode 100644 index 0000000..48adc81 --- /dev/null +++ b/latte/src/main/java/smt/RefinementsToZ3Translator.java @@ -0,0 +1,50 @@ +package smt; + +import org.antlr.v4.runtime.tree.ParseTree; + +import com.microsoft.z3.*; + +import refinements.*; + +import java.util.HashMap; +import java.util.Map; + +/** + * STUDENT EXERCISE: Complete this translator to convert RefinementsLanguage AST to Z3 formulas + * + * Your task is to implement the visitor methods to translate different language constructs + * into their corresponding Z3 expressions. + * + * The translator extends RefinementsLanguageBaseVisitor and converts parse tree nodes + * to Z3 Expr objects (BoolExpr for boolean expressions, ArithExpr for arithmetic, etc.) + */ +public class RefinementsToZ3Translator extends RefinementsLanguageBaseVisitor { + private final Context z3Context; + private final Map variableMap; + + public RefinementsToZ3Translator(Context z3Context) { + this.z3Context = z3Context; + this.variableMap = new HashMap<>(); + } + + /** + * Main entry point - translate a parse tree to a Z3 formula + * This method is already complete. + */ + public BoolExpr translate(ParseTree tree) { + Expr result = visit(tree); + + if (result instanceof BoolExpr) { + return (BoolExpr) result; + } else { + throw new IllegalArgumentException("Root expression must be boolean, got: " + result.getClass()); + } + } + + + // ================================================================= + // Implement visitor methods for elements in the grammar + // ================================================================= + + +} \ No newline at end of file diff --git a/latte/src/main/java/smt/SimpleTranslatorTest.java b/latte/src/main/java/smt/SimpleTranslatorTest.java new file mode 100644 index 0000000..be531e3 --- /dev/null +++ b/latte/src/main/java/smt/SimpleTranslatorTest.java @@ -0,0 +1,236 @@ +package smt; + +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.tree.*; + +import com.microsoft.z3.*; + +import refinements.*; + +/** + * Test class for students to verify their RefinementsToZ3TranslatorSkeleton implementation + * + * Run this class after implementing methods in the translator skeleton. + * Start with simple tests and work your way up to complex ones. + */ +public class SimpleTranslatorTest { + + public static void main(String[] args) { + System.out.println("Testing Student Translator Implementation"); + System.out.println("========================================"); + + // Test in order of difficulty + testStep1_Literals(); + testStep2_Variables(); + testStep3_Arithmetic(); + testStep4_Comparisons(); + testStep5_LogicalOperations(); + testStep6_Implications(); + testStep7_ComplexExpressions(); + } + + public static void testStep1_Literals() { + System.out.println("\n🔸 STEP 1: Testing Literals"); + System.out.println("Implement: visitIntegerLiteral, visitBooleanLiteral"); + + testExpression("5", "Should create Z3 integer 5"); + testExpression("42", "Should create Z3 integer 42"); + testExpression("true", "Should create Z3 true"); + testExpression("false", "Should create Z3 false"); + } + + public static void testStep2_Variables() { + System.out.println("\n🔸 STEP 2: Testing Variables"); + System.out.println("Implement: visitVariable"); + + testExpression("x", "Should create Z3 variable x"); + testExpression("myVar", "Should create Z3 variable myVar"); + } + + public static void testStep3_Arithmetic() { + System.out.println("\n🔸 STEP 3: Testing Arithmetic"); + System.out.println("Implement: visitArithmetic"); + + testExpression("x + 5", "Should create addition"); + testExpression("10 - y", "Should create subtraction"); + testExpression("x * 2", "Should create multiplication"); + } + + public static void testStep4_Comparisons() { + System.out.println("\n🔸 STEP 4: Testing Comparisons"); + System.out.println("Implement: visitEquality, visitRelational"); + + testExpression("x == 5", "Should create equality"); + testExpression("x > 0", "Should create greater than"); + testExpression("y >= 10", "Should create greater or equal"); + testExpression("z < 0", "Should create less than"); + testExpression("w <= 5", "Should create less or equal"); + } + + public static void testStep5_LogicalOperations() { + System.out.println("\n🔸 STEP 5: Testing Logical Operations"); + System.out.println("Implement: visitLogicalAnd, visitLogicalOr, visitLogicalNot"); + + testExpression("x > 0 && y < 5", "Should create logical AND"); + testExpression("x == 0 || y == 0", "Should create logical OR"); + testExpression("!x > 0", "Should create logical NOT"); + } + + public static void testStep6_Implications() { + System.out.println("\n🔸 STEP 6: Testing Implications"); + System.out.println("Implement: visitImplication"); + + testExpression("x == 0 -> x > -1", "Should create implication"); + testExpression("x > 5 -> x > 0", "Should create implication"); + } + + public static void testStep7_ComplexExpressions() { + System.out.println("\n🔸 STEP 7: Testing Complex Expressions"); + System.out.println("All methods should work together"); + + testExpression("(x > 0 && y > 0) -> (x + y > 0)", "Complex implication"); + testExpression("x == 0 -> (x > -1 && x < 1)", "Implication with AND"); + testExpression("(x + y == 10) && (x > y)", "Conjunction of constraints"); + } + + /** + * Test a single expression and report results + */ + private static void testExpression(String expression, String description) { + System.out.print(" Testing: " + expression + " (" + description + ") ... "); + + try (Context ctx = new Context()) { + + // Try to translate the expression + BoolExpr result = translateExpression(expression, ctx); + + if (result != null) { + System.out.println("✅ SUCCESS"); + System.out.println(" Z3 Formula: " + result); + + // For non-tautologies, try to find a model + if (!expression.contains("->")) { + tryFindModel(result, ctx); + } + } else { + System.out.println("❌ FAILED - Could not translate"); + } + + } catch (UnsupportedOperationException e) { + System.out.println("⏳ TODO - " + e.getMessage()); + } catch (Exception e) { + System.out.println("❌ ERROR - " + e.getMessage()); + } + } + + /** + * Translate expression using student's implementation + */ + private static BoolExpr translateExpression(String expression, Context ctx) { + try { + // Parse with ANTLR + CharStream input = CharStreams.fromString(expression); + RefinementsLanguageLexer lexer = new RefinementsLanguageLexer(input); + CommonTokenStream tokens = new CommonTokenStream(lexer); + RefinementsLanguageParser parser = new RefinementsLanguageParser(tokens); + + // Error handling + parser.removeErrorListeners(); + parser.addErrorListener(new BaseErrorListener() { + @Override + public void syntaxError(Recognizer recognizer, Object offendingSymbol, + int line, int charPositionInLine, String msg, RecognitionException e) { + throw new RuntimeException("Parse error: " + msg); + } + }); + + // Parse + ParseTree tree = parser.prog(); + + // Translate using student's implementation + RefinementsToZ3Translator translator = new RefinementsToZ3Translator(ctx); + return translator.translate(tree); + + } catch (Exception e) { + throw new RuntimeException("Translation failed: " + e.getMessage(), e); + } + } + + /** + * Try to find a satisfying model for the expression + */ + private static void tryFindModel(BoolExpr formula, Context ctx) { + try { + Solver solver = ctx.mkSolver(); + solver.add(formula); + + Status result = solver.check(); + + if (result == Status.SATISFIABLE) { + Model model = solver.getModel(); + System.out.println(" Example solution: " + getModelString(model)); + } else if (result == Status.UNSATISFIABLE) { + System.out.println(" (Unsatisfiable - no solutions exist)"); + } + + } catch (Exception e) { + // Ignore model-finding errors + } + } + + /** + * Convert model to readable string + */ + private static String getModelString(Model model) { + StringBuilder sb = new StringBuilder(); + FuncDecl[] decls = model.getDecls(); + + for (int i = 0; i < decls.length; i++) { + if (i > 0) sb.append(", "); + String name = decls[i].getName().toString(); + Expr value = model.getConstInterp(decls[i]); + sb.append(name).append("=").append(value); + } + + return sb.toString(); + } + + /** + * Bonus: Test validity of implications + */ + public static void testValidityCheck() { + System.out.println("\n🔸 BONUS: Testing Validity Checking"); + + String[] implications = { + "x == 0 -> x > -1", // Should be valid + "x > 5 -> x > 0", // Should be valid + "x == 0 -> x < 0" // Should be invalid + }; + + for (String impl : implications) { + System.out.print(" Checking validity of: " + impl + " ... "); + + try (Context ctx = new Context()) { + BoolExpr formula = translateExpression(impl, ctx); + + if (formula != null) { + Solver solver = ctx.mkSolver(); + solver.add(ctx.mkNot(formula)); // Negate to check validity + + Status result = solver.check(); + + if (result == Status.UNSATISFIABLE) { + System.out.println("✅ VALID (always true)"); + } else { + System.out.println("❌ INVALID (counterexample exists)"); + } + } else { + System.out.println("❌ Could not translate"); + } + + } catch (Exception e) { + System.out.println("❌ Error: " + e.getMessage()); + } + } + } +} \ No newline at end of file diff --git a/latte/src/main/java/smt/TranslatorToZ3.java b/latte/src/main/java/smt/TranslatorToZ3.java deleted file mode 100644 index 897a268..0000000 --- a/latte/src/main/java/smt/TranslatorToZ3.java +++ /dev/null @@ -1,5 +0,0 @@ -package smt; - -public class TranslatorToZ3 { - -} From 29088d69ba1b69601ce2fedee39d450e5f281d71 Mon Sep 17 00:00:00 2001 From: Catarina Gamboa Date: Tue, 24 Jun 2025 16:15:10 +0100 Subject: [PATCH 06/14] add all elements for template for translation --- .../.antlr/RefinementsLanguage.interp | 2 +- .../.antlr/RefinementsLanguageParser.java | 134 ++++++++------- .../java/refinements/RefinementsLanguage.g4 | 10 +- .../refinements/RefinementsLanguage.interp | 2 +- .../RefinementsLanguageBaseListener.java | 16 +- .../RefinementsLanguageBaseVisitor.java | 9 +- .../RefinementsLanguageListener.java | 22 ++- .../RefinementsLanguageParser.java | 153 +++++++++++------- .../RefinementsLanguageVisitor.java | 12 +- .../refinements/TestRefinementsLanguage.java | 2 +- .../java/smt/RefinementsToZ3Translator.java | 29 ++-- .../main/java/smt/SimpleTranslatorTest.java | 18 ++- 12 files changed, 259 insertions(+), 150 deletions(-) diff --git a/latte/src/main/java/refinements/.antlr/RefinementsLanguage.interp b/latte/src/main/java/refinements/.antlr/RefinementsLanguage.interp index 8a70f49..c71c3f4 100644 --- a/latte/src/main/java/refinements/.antlr/RefinementsLanguage.interp +++ b/latte/src/main/java/refinements/.antlr/RefinementsLanguage.interp @@ -40,4 +40,4 @@ literal atn: -[4, 1, 13, 85, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 1, 0, 1, 0, 3, 0, 15, 8, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 25, 8, 1, 1, 1, 1, 1, 1, 1, 5, 1, 30, 8, 1, 10, 1, 12, 1, 33, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 41, 8, 2, 1, 2, 1, 2, 1, 2, 5, 2, 46, 8, 2, 10, 2, 12, 2, 49, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 59, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 67, 8, 3, 10, 3, 12, 3, 70, 9, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 81, 8, 4, 1, 5, 1, 5, 1, 5, 0, 3, 2, 4, 6, 6, 0, 2, 4, 6, 8, 10, 0, 1, 2, 0, 9, 9, 12, 12, 91, 0, 14, 1, 0, 0, 0, 2, 24, 1, 0, 0, 0, 4, 40, 1, 0, 0, 0, 6, 58, 1, 0, 0, 0, 8, 80, 1, 0, 0, 0, 10, 82, 1, 0, 0, 0, 12, 15, 3, 2, 1, 0, 13, 15, 1, 0, 0, 0, 14, 12, 1, 0, 0, 0, 14, 13, 1, 0, 0, 0, 15, 1, 1, 0, 0, 0, 16, 17, 6, 1, -1, 0, 17, 18, 5, 1, 0, 0, 18, 19, 3, 2, 1, 0, 19, 20, 5, 2, 0, 0, 20, 25, 1, 0, 0, 0, 21, 22, 5, 3, 0, 0, 22, 25, 3, 2, 1, 3, 23, 25, 3, 4, 2, 0, 24, 16, 1, 0, 0, 0, 24, 21, 1, 0, 0, 0, 24, 23, 1, 0, 0, 0, 25, 31, 1, 0, 0, 0, 26, 27, 10, 2, 0, 0, 27, 28, 5, 6, 0, 0, 28, 30, 3, 2, 1, 3, 29, 26, 1, 0, 0, 0, 30, 33, 1, 0, 0, 0, 31, 29, 1, 0, 0, 0, 31, 32, 1, 0, 0, 0, 32, 3, 1, 0, 0, 0, 33, 31, 1, 0, 0, 0, 34, 35, 6, 2, -1, 0, 35, 36, 5, 1, 0, 0, 36, 37, 3, 4, 2, 0, 37, 38, 5, 2, 0, 0, 38, 41, 1, 0, 0, 0, 39, 41, 3, 6, 3, 0, 40, 34, 1, 0, 0, 0, 40, 39, 1, 0, 0, 0, 41, 47, 1, 0, 0, 0, 42, 43, 10, 2, 0, 0, 43, 44, 5, 7, 0, 0, 44, 46, 3, 4, 2, 3, 45, 42, 1, 0, 0, 0, 46, 49, 1, 0, 0, 0, 47, 45, 1, 0, 0, 0, 47, 48, 1, 0, 0, 0, 48, 5, 1, 0, 0, 0, 49, 47, 1, 0, 0, 0, 50, 51, 6, 3, -1, 0, 51, 59, 3, 8, 4, 0, 52, 53, 5, 3, 0, 0, 53, 59, 3, 6, 3, 2, 54, 55, 5, 1, 0, 0, 55, 56, 3, 6, 3, 0, 56, 57, 5, 2, 0, 0, 57, 59, 1, 0, 0, 0, 58, 50, 1, 0, 0, 0, 58, 52, 1, 0, 0, 0, 58, 54, 1, 0, 0, 0, 59, 68, 1, 0, 0, 0, 60, 61, 10, 4, 0, 0, 61, 62, 5, 8, 0, 0, 62, 67, 3, 6, 3, 5, 63, 64, 10, 3, 0, 0, 64, 65, 5, 4, 0, 0, 65, 67, 3, 6, 3, 4, 66, 60, 1, 0, 0, 0, 66, 63, 1, 0, 0, 0, 67, 70, 1, 0, 0, 0, 68, 66, 1, 0, 0, 0, 68, 69, 1, 0, 0, 0, 69, 7, 1, 0, 0, 0, 70, 68, 1, 0, 0, 0, 71, 72, 5, 1, 0, 0, 72, 73, 3, 8, 4, 0, 73, 74, 5, 2, 0, 0, 74, 81, 1, 0, 0, 0, 75, 81, 3, 10, 5, 0, 76, 81, 5, 11, 0, 0, 77, 78, 5, 11, 0, 0, 78, 79, 5, 5, 0, 0, 79, 81, 5, 11, 0, 0, 80, 71, 1, 0, 0, 0, 80, 75, 1, 0, 0, 0, 80, 76, 1, 0, 0, 0, 80, 77, 1, 0, 0, 0, 81, 9, 1, 0, 0, 0, 82, 83, 7, 0, 0, 0, 83, 11, 1, 0, 0, 0, 9, 14, 24, 31, 40, 47, 58, 66, 68, 80] \ No newline at end of file +[4, 1, 13, 87, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 1, 0, 1, 0, 3, 0, 15, 8, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 25, 8, 1, 1, 1, 1, 1, 1, 1, 5, 1, 30, 8, 1, 10, 1, 12, 1, 33, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 41, 8, 2, 1, 2, 1, 2, 1, 2, 5, 2, 46, 8, 2, 10, 2, 12, 2, 49, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 59, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 67, 8, 3, 10, 3, 12, 3, 70, 9, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 81, 8, 4, 1, 5, 1, 5, 3, 5, 85, 8, 5, 1, 5, 0, 3, 2, 4, 6, 6, 0, 2, 4, 6, 8, 10, 0, 0, 94, 0, 14, 1, 0, 0, 0, 2, 24, 1, 0, 0, 0, 4, 40, 1, 0, 0, 0, 6, 58, 1, 0, 0, 0, 8, 80, 1, 0, 0, 0, 10, 84, 1, 0, 0, 0, 12, 15, 3, 2, 1, 0, 13, 15, 1, 0, 0, 0, 14, 12, 1, 0, 0, 0, 14, 13, 1, 0, 0, 0, 15, 1, 1, 0, 0, 0, 16, 17, 6, 1, -1, 0, 17, 18, 5, 1, 0, 0, 18, 19, 3, 2, 1, 0, 19, 20, 5, 2, 0, 0, 20, 25, 1, 0, 0, 0, 21, 22, 5, 3, 0, 0, 22, 25, 3, 2, 1, 3, 23, 25, 3, 4, 2, 0, 24, 16, 1, 0, 0, 0, 24, 21, 1, 0, 0, 0, 24, 23, 1, 0, 0, 0, 25, 31, 1, 0, 0, 0, 26, 27, 10, 2, 0, 0, 27, 28, 5, 6, 0, 0, 28, 30, 3, 2, 1, 3, 29, 26, 1, 0, 0, 0, 30, 33, 1, 0, 0, 0, 31, 29, 1, 0, 0, 0, 31, 32, 1, 0, 0, 0, 32, 3, 1, 0, 0, 0, 33, 31, 1, 0, 0, 0, 34, 35, 6, 2, -1, 0, 35, 36, 5, 1, 0, 0, 36, 37, 3, 4, 2, 0, 37, 38, 5, 2, 0, 0, 38, 41, 1, 0, 0, 0, 39, 41, 3, 6, 3, 0, 40, 34, 1, 0, 0, 0, 40, 39, 1, 0, 0, 0, 41, 47, 1, 0, 0, 0, 42, 43, 10, 2, 0, 0, 43, 44, 5, 7, 0, 0, 44, 46, 3, 4, 2, 3, 45, 42, 1, 0, 0, 0, 46, 49, 1, 0, 0, 0, 47, 45, 1, 0, 0, 0, 47, 48, 1, 0, 0, 0, 48, 5, 1, 0, 0, 0, 49, 47, 1, 0, 0, 0, 50, 51, 6, 3, -1, 0, 51, 59, 3, 8, 4, 0, 52, 53, 5, 3, 0, 0, 53, 59, 3, 6, 3, 2, 54, 55, 5, 1, 0, 0, 55, 56, 3, 6, 3, 0, 56, 57, 5, 2, 0, 0, 57, 59, 1, 0, 0, 0, 58, 50, 1, 0, 0, 0, 58, 52, 1, 0, 0, 0, 58, 54, 1, 0, 0, 0, 59, 68, 1, 0, 0, 0, 60, 61, 10, 4, 0, 0, 61, 62, 5, 8, 0, 0, 62, 67, 3, 6, 3, 5, 63, 64, 10, 3, 0, 0, 64, 65, 5, 4, 0, 0, 65, 67, 3, 6, 3, 4, 66, 60, 1, 0, 0, 0, 66, 63, 1, 0, 0, 0, 67, 70, 1, 0, 0, 0, 68, 66, 1, 0, 0, 0, 68, 69, 1, 0, 0, 0, 69, 7, 1, 0, 0, 0, 70, 68, 1, 0, 0, 0, 71, 72, 5, 1, 0, 0, 72, 73, 3, 8, 4, 0, 73, 74, 5, 2, 0, 0, 74, 81, 1, 0, 0, 0, 75, 81, 3, 10, 5, 0, 76, 81, 5, 11, 0, 0, 77, 78, 5, 11, 0, 0, 78, 79, 5, 5, 0, 0, 79, 81, 5, 11, 0, 0, 80, 71, 1, 0, 0, 0, 80, 75, 1, 0, 0, 0, 80, 76, 1, 0, 0, 0, 80, 77, 1, 0, 0, 0, 81, 9, 1, 0, 0, 0, 82, 85, 5, 9, 0, 0, 83, 85, 5, 12, 0, 0, 84, 82, 1, 0, 0, 0, 84, 83, 1, 0, 0, 0, 85, 11, 1, 0, 0, 0, 10, 14, 24, 31, 40, 47, 58, 66, 68, 80, 84] \ No newline at end of file diff --git a/latte/src/main/java/refinements/.antlr/RefinementsLanguageParser.java b/latte/src/main/java/refinements/.antlr/RefinementsLanguageParser.java index e798ff4..e6f3a64 100644 --- a/latte/src/main/java/refinements/.antlr/RefinementsLanguageParser.java +++ b/latte/src/main/java/refinements/.antlr/RefinementsLanguageParser.java @@ -660,31 +660,52 @@ public final LeafsContext leafs() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class LiteralContext extends ParserRuleContext { - public TerminalNode BOOL() { return getToken(RefinementsLanguageParser.BOOL, 0); } - public TerminalNode INT() { return getToken(RefinementsLanguageParser.INT, 0); } public LiteralContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_literal; } + + public LiteralContext() { } + public void copyFrom(LiteralContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class LitIntContext extends LiteralContext { + public TerminalNode INT() { return getToken(RefinementsLanguageParser.INT, 0); } + public LitIntContext(LiteralContext ctx) { copyFrom(ctx); } + } + @SuppressWarnings("CheckReturnValue") + public static class LitBoolContext extends LiteralContext { + public TerminalNode BOOL() { return getToken(RefinementsLanguageParser.BOOL, 0); } + public LitBoolContext(LiteralContext ctx) { copyFrom(ctx); } } public final LiteralContext literal() throws RecognitionException { LiteralContext _localctx = new LiteralContext(_ctx, getState()); enterRule(_localctx, 10, RULE_literal); - int _la; try { - enterOuterAlt(_localctx, 1); - { - setState(82); - _la = _input.LA(1); - if ( !(_la==BOOL || _la==INT) ) { - _errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } + setState(84); + _errHandler.sync(this); + switch (_input.LA(1)) { + case BOOL: + _localctx = new LitBoolContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(82); + match(BOOL); + } + break; + case INT: + _localctx = new LitIntContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(83); + match(INT); + } + break; + default: + throw new NoViableAltException(this); } } catch (RecognitionException re) { @@ -734,7 +755,7 @@ private boolean operand_sempred(OperandContext _localctx, int predIndex) { } public static final String _serializedATN = - "\u0004\u0001\rU\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0004\u0001\rW\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ "\u0005\u0007\u0005\u0001\u0000\u0001\u0000\u0003\u0000\u000f\b\u0000\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ @@ -747,46 +768,47 @@ private boolean operand_sempred(OperandContext _localctx, int predIndex) { "\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0005"+ "\u0003C\b\u0003\n\u0003\f\u0003F\t\u0003\u0001\u0004\u0001\u0004\u0001"+ "\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+ - "\u0004\u0003\u0004Q\b\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0000"+ - "\u0003\u0002\u0004\u0006\u0006\u0000\u0002\u0004\u0006\b\n\u0000\u0001"+ - "\u0002\u0000\t\t\f\f[\u0000\u000e\u0001\u0000\u0000\u0000\u0002\u0018"+ - "\u0001\u0000\u0000\u0000\u0004(\u0001\u0000\u0000\u0000\u0006:\u0001\u0000"+ - "\u0000\u0000\bP\u0001\u0000\u0000\u0000\nR\u0001\u0000\u0000\u0000\f\u000f"+ - "\u0003\u0002\u0001\u0000\r\u000f\u0001\u0000\u0000\u0000\u000e\f\u0001"+ - "\u0000\u0000\u0000\u000e\r\u0001\u0000\u0000\u0000\u000f\u0001\u0001\u0000"+ - "\u0000\u0000\u0010\u0011\u0006\u0001\uffff\uffff\u0000\u0011\u0012\u0005"+ - "\u0001\u0000\u0000\u0012\u0013\u0003\u0002\u0001\u0000\u0013\u0014\u0005"+ - "\u0002\u0000\u0000\u0014\u0019\u0001\u0000\u0000\u0000\u0015\u0016\u0005"+ - "\u0003\u0000\u0000\u0016\u0019\u0003\u0002\u0001\u0003\u0017\u0019\u0003"+ - "\u0004\u0002\u0000\u0018\u0010\u0001\u0000\u0000\u0000\u0018\u0015\u0001"+ - "\u0000\u0000\u0000\u0018\u0017\u0001\u0000\u0000\u0000\u0019\u001f\u0001"+ - "\u0000\u0000\u0000\u001a\u001b\n\u0002\u0000\u0000\u001b\u001c\u0005\u0006"+ - "\u0000\u0000\u001c\u001e\u0003\u0002\u0001\u0003\u001d\u001a\u0001\u0000"+ - "\u0000\u0000\u001e!\u0001\u0000\u0000\u0000\u001f\u001d\u0001\u0000\u0000"+ - "\u0000\u001f \u0001\u0000\u0000\u0000 \u0003\u0001\u0000\u0000\u0000!"+ - "\u001f\u0001\u0000\u0000\u0000\"#\u0006\u0002\uffff\uffff\u0000#$\u0005"+ - "\u0001\u0000\u0000$%\u0003\u0004\u0002\u0000%&\u0005\u0002\u0000\u0000"+ - "&)\u0001\u0000\u0000\u0000\')\u0003\u0006\u0003\u0000(\"\u0001\u0000\u0000"+ - "\u0000(\'\u0001\u0000\u0000\u0000)/\u0001\u0000\u0000\u0000*+\n\u0002"+ - "\u0000\u0000+,\u0005\u0007\u0000\u0000,.\u0003\u0004\u0002\u0003-*\u0001"+ - "\u0000\u0000\u0000.1\u0001\u0000\u0000\u0000/-\u0001\u0000\u0000\u0000"+ - "/0\u0001\u0000\u0000\u00000\u0005\u0001\u0000\u0000\u00001/\u0001\u0000"+ - "\u0000\u000023\u0006\u0003\uffff\uffff\u00003;\u0003\b\u0004\u000045\u0005"+ - "\u0003\u0000\u00005;\u0003\u0006\u0003\u000267\u0005\u0001\u0000\u0000"+ - "78\u0003\u0006\u0003\u000089\u0005\u0002\u0000\u00009;\u0001\u0000\u0000"+ - "\u0000:2\u0001\u0000\u0000\u0000:4\u0001\u0000\u0000\u0000:6\u0001\u0000"+ - "\u0000\u0000;D\u0001\u0000\u0000\u0000<=\n\u0004\u0000\u0000=>\u0005\b"+ - "\u0000\u0000>C\u0003\u0006\u0003\u0005?@\n\u0003\u0000\u0000@A\u0005\u0004"+ - "\u0000\u0000AC\u0003\u0006\u0003\u0004B<\u0001\u0000\u0000\u0000B?\u0001"+ - "\u0000\u0000\u0000CF\u0001\u0000\u0000\u0000DB\u0001\u0000\u0000\u0000"+ - "DE\u0001\u0000\u0000\u0000E\u0007\u0001\u0000\u0000\u0000FD\u0001\u0000"+ - "\u0000\u0000GH\u0005\u0001\u0000\u0000HI\u0003\b\u0004\u0000IJ\u0005\u0002"+ - "\u0000\u0000JQ\u0001\u0000\u0000\u0000KQ\u0003\n\u0005\u0000LQ\u0005\u000b"+ - "\u0000\u0000MN\u0005\u000b\u0000\u0000NO\u0005\u0005\u0000\u0000OQ\u0005"+ - "\u000b\u0000\u0000PG\u0001\u0000\u0000\u0000PK\u0001\u0000\u0000\u0000"+ - "PL\u0001\u0000\u0000\u0000PM\u0001\u0000\u0000\u0000Q\t\u0001\u0000\u0000"+ - "\u0000RS\u0007\u0000\u0000\u0000S\u000b\u0001\u0000\u0000\u0000\t\u000e"+ - "\u0018\u001f(/:BDP"; + "\u0004\u0003\u0004Q\b\u0004\u0001\u0005\u0001\u0005\u0003\u0005U\b\u0005"+ + "\u0001\u0005\u0000\u0003\u0002\u0004\u0006\u0006\u0000\u0002\u0004\u0006"+ + "\b\n\u0000\u0000^\u0000\u000e\u0001\u0000\u0000\u0000\u0002\u0018\u0001"+ + "\u0000\u0000\u0000\u0004(\u0001\u0000\u0000\u0000\u0006:\u0001\u0000\u0000"+ + "\u0000\bP\u0001\u0000\u0000\u0000\nT\u0001\u0000\u0000\u0000\f\u000f\u0003"+ + "\u0002\u0001\u0000\r\u000f\u0001\u0000\u0000\u0000\u000e\f\u0001\u0000"+ + "\u0000\u0000\u000e\r\u0001\u0000\u0000\u0000\u000f\u0001\u0001\u0000\u0000"+ + "\u0000\u0010\u0011\u0006\u0001\uffff\uffff\u0000\u0011\u0012\u0005\u0001"+ + "\u0000\u0000\u0012\u0013\u0003\u0002\u0001\u0000\u0013\u0014\u0005\u0002"+ + "\u0000\u0000\u0014\u0019\u0001\u0000\u0000\u0000\u0015\u0016\u0005\u0003"+ + "\u0000\u0000\u0016\u0019\u0003\u0002\u0001\u0003\u0017\u0019\u0003\u0004"+ + "\u0002\u0000\u0018\u0010\u0001\u0000\u0000\u0000\u0018\u0015\u0001\u0000"+ + "\u0000\u0000\u0018\u0017\u0001\u0000\u0000\u0000\u0019\u001f\u0001\u0000"+ + "\u0000\u0000\u001a\u001b\n\u0002\u0000\u0000\u001b\u001c\u0005\u0006\u0000"+ + "\u0000\u001c\u001e\u0003\u0002\u0001\u0003\u001d\u001a\u0001\u0000\u0000"+ + "\u0000\u001e!\u0001\u0000\u0000\u0000\u001f\u001d\u0001\u0000\u0000\u0000"+ + "\u001f \u0001\u0000\u0000\u0000 \u0003\u0001\u0000\u0000\u0000!\u001f"+ + "\u0001\u0000\u0000\u0000\"#\u0006\u0002\uffff\uffff\u0000#$\u0005\u0001"+ + "\u0000\u0000$%\u0003\u0004\u0002\u0000%&\u0005\u0002\u0000\u0000&)\u0001"+ + "\u0000\u0000\u0000\')\u0003\u0006\u0003\u0000(\"\u0001\u0000\u0000\u0000"+ + "(\'\u0001\u0000\u0000\u0000)/\u0001\u0000\u0000\u0000*+\n\u0002\u0000"+ + "\u0000+,\u0005\u0007\u0000\u0000,.\u0003\u0004\u0002\u0003-*\u0001\u0000"+ + "\u0000\u0000.1\u0001\u0000\u0000\u0000/-\u0001\u0000\u0000\u0000/0\u0001"+ + "\u0000\u0000\u00000\u0005\u0001\u0000\u0000\u00001/\u0001\u0000\u0000"+ + "\u000023\u0006\u0003\uffff\uffff\u00003;\u0003\b\u0004\u000045\u0005\u0003"+ + "\u0000\u00005;\u0003\u0006\u0003\u000267\u0005\u0001\u0000\u000078\u0003"+ + "\u0006\u0003\u000089\u0005\u0002\u0000\u00009;\u0001\u0000\u0000\u0000"+ + ":2\u0001\u0000\u0000\u0000:4\u0001\u0000\u0000\u0000:6\u0001\u0000\u0000"+ + "\u0000;D\u0001\u0000\u0000\u0000<=\n\u0004\u0000\u0000=>\u0005\b\u0000"+ + "\u0000>C\u0003\u0006\u0003\u0005?@\n\u0003\u0000\u0000@A\u0005\u0004\u0000"+ + "\u0000AC\u0003\u0006\u0003\u0004B<\u0001\u0000\u0000\u0000B?\u0001\u0000"+ + "\u0000\u0000CF\u0001\u0000\u0000\u0000DB\u0001\u0000\u0000\u0000DE\u0001"+ + "\u0000\u0000\u0000E\u0007\u0001\u0000\u0000\u0000FD\u0001\u0000\u0000"+ + "\u0000GH\u0005\u0001\u0000\u0000HI\u0003\b\u0004\u0000IJ\u0005\u0002\u0000"+ + "\u0000JQ\u0001\u0000\u0000\u0000KQ\u0003\n\u0005\u0000LQ\u0005\u000b\u0000"+ + "\u0000MN\u0005\u000b\u0000\u0000NO\u0005\u0005\u0000\u0000OQ\u0005\u000b"+ + "\u0000\u0000PG\u0001\u0000\u0000\u0000PK\u0001\u0000\u0000\u0000PL\u0001"+ + "\u0000\u0000\u0000PM\u0001\u0000\u0000\u0000Q\t\u0001\u0000\u0000\u0000"+ + "RU\u0005\t\u0000\u0000SU\u0005\f\u0000\u0000TR\u0001\u0000\u0000\u0000"+ + "TS\u0001\u0000\u0000\u0000U\u000b\u0001\u0000\u0000\u0000\n\u000e\u0018"+ + "\u001f(/:BDPT"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/latte/src/main/java/refinements/RefinementsLanguage.g4 b/latte/src/main/java/refinements/RefinementsLanguage.g4 index c3c95eb..e1049d4 100644 --- a/latte/src/main/java/refinements/RefinementsLanguage.g4 +++ b/latte/src/main/java/refinements/RefinementsLanguage.g4 @@ -2,9 +2,6 @@ grammar RefinementsLanguage; prog: pred | ; -// start: -// pred #startPred -// ; pred: @@ -30,7 +27,7 @@ operand: leafs: - '(' leafs ')' #litGroup + '(' leafs ')' #litGroup | literal #lit | ID #var | ID '.' ID #targetInvocation @@ -38,8 +35,9 @@ leafs: literal: - BOOL - | INT; + BOOL #litBool + | INT #litInt + ; diff --git a/latte/src/main/java/refinements/RefinementsLanguage.interp b/latte/src/main/java/refinements/RefinementsLanguage.interp index 8a70f49..c71c3f4 100644 --- a/latte/src/main/java/refinements/RefinementsLanguage.interp +++ b/latte/src/main/java/refinements/RefinementsLanguage.interp @@ -40,4 +40,4 @@ literal atn: -[4, 1, 13, 85, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 1, 0, 1, 0, 3, 0, 15, 8, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 25, 8, 1, 1, 1, 1, 1, 1, 1, 5, 1, 30, 8, 1, 10, 1, 12, 1, 33, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 41, 8, 2, 1, 2, 1, 2, 1, 2, 5, 2, 46, 8, 2, 10, 2, 12, 2, 49, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 59, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 67, 8, 3, 10, 3, 12, 3, 70, 9, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 81, 8, 4, 1, 5, 1, 5, 1, 5, 0, 3, 2, 4, 6, 6, 0, 2, 4, 6, 8, 10, 0, 1, 2, 0, 9, 9, 12, 12, 91, 0, 14, 1, 0, 0, 0, 2, 24, 1, 0, 0, 0, 4, 40, 1, 0, 0, 0, 6, 58, 1, 0, 0, 0, 8, 80, 1, 0, 0, 0, 10, 82, 1, 0, 0, 0, 12, 15, 3, 2, 1, 0, 13, 15, 1, 0, 0, 0, 14, 12, 1, 0, 0, 0, 14, 13, 1, 0, 0, 0, 15, 1, 1, 0, 0, 0, 16, 17, 6, 1, -1, 0, 17, 18, 5, 1, 0, 0, 18, 19, 3, 2, 1, 0, 19, 20, 5, 2, 0, 0, 20, 25, 1, 0, 0, 0, 21, 22, 5, 3, 0, 0, 22, 25, 3, 2, 1, 3, 23, 25, 3, 4, 2, 0, 24, 16, 1, 0, 0, 0, 24, 21, 1, 0, 0, 0, 24, 23, 1, 0, 0, 0, 25, 31, 1, 0, 0, 0, 26, 27, 10, 2, 0, 0, 27, 28, 5, 6, 0, 0, 28, 30, 3, 2, 1, 3, 29, 26, 1, 0, 0, 0, 30, 33, 1, 0, 0, 0, 31, 29, 1, 0, 0, 0, 31, 32, 1, 0, 0, 0, 32, 3, 1, 0, 0, 0, 33, 31, 1, 0, 0, 0, 34, 35, 6, 2, -1, 0, 35, 36, 5, 1, 0, 0, 36, 37, 3, 4, 2, 0, 37, 38, 5, 2, 0, 0, 38, 41, 1, 0, 0, 0, 39, 41, 3, 6, 3, 0, 40, 34, 1, 0, 0, 0, 40, 39, 1, 0, 0, 0, 41, 47, 1, 0, 0, 0, 42, 43, 10, 2, 0, 0, 43, 44, 5, 7, 0, 0, 44, 46, 3, 4, 2, 3, 45, 42, 1, 0, 0, 0, 46, 49, 1, 0, 0, 0, 47, 45, 1, 0, 0, 0, 47, 48, 1, 0, 0, 0, 48, 5, 1, 0, 0, 0, 49, 47, 1, 0, 0, 0, 50, 51, 6, 3, -1, 0, 51, 59, 3, 8, 4, 0, 52, 53, 5, 3, 0, 0, 53, 59, 3, 6, 3, 2, 54, 55, 5, 1, 0, 0, 55, 56, 3, 6, 3, 0, 56, 57, 5, 2, 0, 0, 57, 59, 1, 0, 0, 0, 58, 50, 1, 0, 0, 0, 58, 52, 1, 0, 0, 0, 58, 54, 1, 0, 0, 0, 59, 68, 1, 0, 0, 0, 60, 61, 10, 4, 0, 0, 61, 62, 5, 8, 0, 0, 62, 67, 3, 6, 3, 5, 63, 64, 10, 3, 0, 0, 64, 65, 5, 4, 0, 0, 65, 67, 3, 6, 3, 4, 66, 60, 1, 0, 0, 0, 66, 63, 1, 0, 0, 0, 67, 70, 1, 0, 0, 0, 68, 66, 1, 0, 0, 0, 68, 69, 1, 0, 0, 0, 69, 7, 1, 0, 0, 0, 70, 68, 1, 0, 0, 0, 71, 72, 5, 1, 0, 0, 72, 73, 3, 8, 4, 0, 73, 74, 5, 2, 0, 0, 74, 81, 1, 0, 0, 0, 75, 81, 3, 10, 5, 0, 76, 81, 5, 11, 0, 0, 77, 78, 5, 11, 0, 0, 78, 79, 5, 5, 0, 0, 79, 81, 5, 11, 0, 0, 80, 71, 1, 0, 0, 0, 80, 75, 1, 0, 0, 0, 80, 76, 1, 0, 0, 0, 80, 77, 1, 0, 0, 0, 81, 9, 1, 0, 0, 0, 82, 83, 7, 0, 0, 0, 83, 11, 1, 0, 0, 0, 9, 14, 24, 31, 40, 47, 58, 66, 68, 80] \ No newline at end of file +[4, 1, 13, 87, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 1, 0, 1, 0, 3, 0, 15, 8, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 25, 8, 1, 1, 1, 1, 1, 1, 1, 5, 1, 30, 8, 1, 10, 1, 12, 1, 33, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 41, 8, 2, 1, 2, 1, 2, 1, 2, 5, 2, 46, 8, 2, 10, 2, 12, 2, 49, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 59, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 67, 8, 3, 10, 3, 12, 3, 70, 9, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 81, 8, 4, 1, 5, 1, 5, 3, 5, 85, 8, 5, 1, 5, 0, 3, 2, 4, 6, 6, 0, 2, 4, 6, 8, 10, 0, 0, 94, 0, 14, 1, 0, 0, 0, 2, 24, 1, 0, 0, 0, 4, 40, 1, 0, 0, 0, 6, 58, 1, 0, 0, 0, 8, 80, 1, 0, 0, 0, 10, 84, 1, 0, 0, 0, 12, 15, 3, 2, 1, 0, 13, 15, 1, 0, 0, 0, 14, 12, 1, 0, 0, 0, 14, 13, 1, 0, 0, 0, 15, 1, 1, 0, 0, 0, 16, 17, 6, 1, -1, 0, 17, 18, 5, 1, 0, 0, 18, 19, 3, 2, 1, 0, 19, 20, 5, 2, 0, 0, 20, 25, 1, 0, 0, 0, 21, 22, 5, 3, 0, 0, 22, 25, 3, 2, 1, 3, 23, 25, 3, 4, 2, 0, 24, 16, 1, 0, 0, 0, 24, 21, 1, 0, 0, 0, 24, 23, 1, 0, 0, 0, 25, 31, 1, 0, 0, 0, 26, 27, 10, 2, 0, 0, 27, 28, 5, 6, 0, 0, 28, 30, 3, 2, 1, 3, 29, 26, 1, 0, 0, 0, 30, 33, 1, 0, 0, 0, 31, 29, 1, 0, 0, 0, 31, 32, 1, 0, 0, 0, 32, 3, 1, 0, 0, 0, 33, 31, 1, 0, 0, 0, 34, 35, 6, 2, -1, 0, 35, 36, 5, 1, 0, 0, 36, 37, 3, 4, 2, 0, 37, 38, 5, 2, 0, 0, 38, 41, 1, 0, 0, 0, 39, 41, 3, 6, 3, 0, 40, 34, 1, 0, 0, 0, 40, 39, 1, 0, 0, 0, 41, 47, 1, 0, 0, 0, 42, 43, 10, 2, 0, 0, 43, 44, 5, 7, 0, 0, 44, 46, 3, 4, 2, 3, 45, 42, 1, 0, 0, 0, 46, 49, 1, 0, 0, 0, 47, 45, 1, 0, 0, 0, 47, 48, 1, 0, 0, 0, 48, 5, 1, 0, 0, 0, 49, 47, 1, 0, 0, 0, 50, 51, 6, 3, -1, 0, 51, 59, 3, 8, 4, 0, 52, 53, 5, 3, 0, 0, 53, 59, 3, 6, 3, 2, 54, 55, 5, 1, 0, 0, 55, 56, 3, 6, 3, 0, 56, 57, 5, 2, 0, 0, 57, 59, 1, 0, 0, 0, 58, 50, 1, 0, 0, 0, 58, 52, 1, 0, 0, 0, 58, 54, 1, 0, 0, 0, 59, 68, 1, 0, 0, 0, 60, 61, 10, 4, 0, 0, 61, 62, 5, 8, 0, 0, 62, 67, 3, 6, 3, 5, 63, 64, 10, 3, 0, 0, 64, 65, 5, 4, 0, 0, 65, 67, 3, 6, 3, 4, 66, 60, 1, 0, 0, 0, 66, 63, 1, 0, 0, 0, 67, 70, 1, 0, 0, 0, 68, 66, 1, 0, 0, 0, 68, 69, 1, 0, 0, 0, 69, 7, 1, 0, 0, 0, 70, 68, 1, 0, 0, 0, 71, 72, 5, 1, 0, 0, 72, 73, 3, 8, 4, 0, 73, 74, 5, 2, 0, 0, 74, 81, 1, 0, 0, 0, 75, 81, 3, 10, 5, 0, 76, 81, 5, 11, 0, 0, 77, 78, 5, 11, 0, 0, 78, 79, 5, 5, 0, 0, 79, 81, 5, 11, 0, 0, 80, 71, 1, 0, 0, 0, 80, 75, 1, 0, 0, 0, 80, 76, 1, 0, 0, 0, 80, 77, 1, 0, 0, 0, 81, 9, 1, 0, 0, 0, 82, 85, 5, 9, 0, 0, 83, 85, 5, 12, 0, 0, 84, 82, 1, 0, 0, 0, 84, 83, 1, 0, 0, 0, 85, 11, 1, 0, 0, 0, 10, 14, 24, 31, 40, 47, 58, 66, 68, 80, 84] \ No newline at end of file diff --git a/latte/src/main/java/refinements/RefinementsLanguageBaseListener.java b/latte/src/main/java/refinements/RefinementsLanguageBaseListener.java index 5697b22..f118641 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageBaseListener.java +++ b/latte/src/main/java/refinements/RefinementsLanguageBaseListener.java @@ -221,13 +221,25 @@ public class RefinementsLanguageBaseListener implements RefinementsLanguageListe * *

The default implementation does nothing.

*/ - @Override public void enterLiteral(RefinementsLanguageParser.LiteralContext ctx) { } + @Override public void enterLitBool(RefinementsLanguageParser.LitBoolContext ctx) { } /** * {@inheritDoc} * *

The default implementation does nothing.

*/ - @Override public void exitLiteral(RefinementsLanguageParser.LiteralContext ctx) { } + @Override public void exitLitBool(RefinementsLanguageParser.LitBoolContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLitInt(RefinementsLanguageParser.LitIntContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLitInt(RefinementsLanguageParser.LitIntContext ctx) { } /** * {@inheritDoc} diff --git a/latte/src/main/java/refinements/RefinementsLanguageBaseVisitor.java b/latte/src/main/java/refinements/RefinementsLanguageBaseVisitor.java index e10d477..b610982 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageBaseVisitor.java +++ b/latte/src/main/java/refinements/RefinementsLanguageBaseVisitor.java @@ -137,5 +137,12 @@ public class RefinementsLanguageBaseVisitor extends AbstractParseTreeVisitor< *

The default implementation returns the result of calling * {@link #visitChildren} on {@code ctx}.

*/ - @Override public T visitLiteral(RefinementsLanguageParser.LiteralContext ctx) { return visitChildren(ctx); } + @Override public T visitLitBool(RefinementsLanguageParser.LitBoolContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLitInt(RefinementsLanguageParser.LitIntContext ctx) { return visitChildren(ctx); } } \ No newline at end of file diff --git a/latte/src/main/java/refinements/RefinementsLanguageListener.java b/latte/src/main/java/refinements/RefinementsLanguageListener.java index d781947..8b9473b 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageListener.java +++ b/latte/src/main/java/refinements/RefinementsLanguageListener.java @@ -210,13 +210,27 @@ public interface RefinementsLanguageListener extends ParseTreeListener { */ void exitTargetInvocation(RefinementsLanguageParser.TargetInvocationContext ctx); /** - * Enter a parse tree produced by {@link RefinementsLanguageParser#literal}. + * Enter a parse tree produced by the {@code litBool} + * labeled alternative in {@link RefinementsLanguageParser#literal}. * @param ctx the parse tree */ - void enterLiteral(RefinementsLanguageParser.LiteralContext ctx); + void enterLitBool(RefinementsLanguageParser.LitBoolContext ctx); /** - * Exit a parse tree produced by {@link RefinementsLanguageParser#literal}. + * Exit a parse tree produced by the {@code litBool} + * labeled alternative in {@link RefinementsLanguageParser#literal}. * @param ctx the parse tree */ - void exitLiteral(RefinementsLanguageParser.LiteralContext ctx); + void exitLitBool(RefinementsLanguageParser.LitBoolContext ctx); + /** + * Enter a parse tree produced by the {@code litInt} + * labeled alternative in {@link RefinementsLanguageParser#literal}. + * @param ctx the parse tree + */ + void enterLitInt(RefinementsLanguageParser.LitIntContext ctx); + /** + * Exit a parse tree produced by the {@code litInt} + * labeled alternative in {@link RefinementsLanguageParser#literal}. + * @param ctx the parse tree + */ + void exitLitInt(RefinementsLanguageParser.LitIntContext ctx); } \ No newline at end of file diff --git a/latte/src/main/java/refinements/RefinementsLanguageParser.java b/latte/src/main/java/refinements/RefinementsLanguageParser.java index bcd9db4..8178edf 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageParser.java +++ b/latte/src/main/java/refinements/RefinementsLanguageParser.java @@ -882,23 +882,49 @@ public final LeafsContext leafs() throws RecognitionException { @SuppressWarnings("CheckReturnValue") public static class LiteralContext extends ParserRuleContext { - public TerminalNode BOOL() { return getToken(RefinementsLanguageParser.BOOL, 0); } - public TerminalNode INT() { return getToken(RefinementsLanguageParser.INT, 0); } public LiteralContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); } @Override public int getRuleIndex() { return RULE_literal; } + + public LiteralContext() { } + public void copyFrom(LiteralContext ctx) { + super.copyFrom(ctx); + } + } + @SuppressWarnings("CheckReturnValue") + public static class LitIntContext extends LiteralContext { + public TerminalNode INT() { return getToken(RefinementsLanguageParser.INT, 0); } + public LitIntContext(LiteralContext ctx) { copyFrom(ctx); } @Override public void enterRule(ParseTreeListener listener) { - if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterLiteral(this); + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterLitInt(this); } @Override public void exitRule(ParseTreeListener listener) { - if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitLiteral(this); + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitLitInt(this); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitLiteral(this); + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitLitInt(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class LitBoolContext extends LiteralContext { + public TerminalNode BOOL() { return getToken(RefinementsLanguageParser.BOOL, 0); } + public LitBoolContext(LiteralContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterLitBool(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitLitBool(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitLitBool(this); else return visitor.visitChildren(this); } } @@ -906,20 +932,28 @@ public T accept(ParseTreeVisitor visitor) { public final LiteralContext literal() throws RecognitionException { LiteralContext _localctx = new LiteralContext(_ctx, getState()); enterRule(_localctx, 10, RULE_literal); - int _la; try { - enterOuterAlt(_localctx, 1); - { - setState(82); - _la = _input.LA(1); - if ( !(_la==BOOL || _la==INT) ) { - _errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } + setState(84); + _errHandler.sync(this); + switch (_input.LA(1)) { + case BOOL: + _localctx = new LitBoolContext(_localctx); + enterOuterAlt(_localctx, 1); + { + setState(82); + match(BOOL); + } + break; + case INT: + _localctx = new LitIntContext(_localctx); + enterOuterAlt(_localctx, 2); + { + setState(83); + match(INT); + } + break; + default: + throw new NoViableAltException(this); } } catch (RecognitionException re) { @@ -969,7 +1003,7 @@ private boolean operand_sempred(OperandContext _localctx, int predIndex) { } public static final String _serializedATN = - "\u0004\u0001\rU\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0004\u0001\rW\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ "\u0005\u0007\u0005\u0001\u0000\u0001\u0000\u0003\u0000\u000f\b\u0000\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ @@ -982,46 +1016,47 @@ private boolean operand_sempred(OperandContext _localctx, int predIndex) { "\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0005"+ "\u0003C\b\u0003\n\u0003\f\u0003F\t\u0003\u0001\u0004\u0001\u0004\u0001"+ "\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+ - "\u0004\u0003\u0004Q\b\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0000"+ - "\u0003\u0002\u0004\u0006\u0006\u0000\u0002\u0004\u0006\b\n\u0000\u0001"+ - "\u0002\u0000\t\t\f\f[\u0000\u000e\u0001\u0000\u0000\u0000\u0002\u0018"+ - "\u0001\u0000\u0000\u0000\u0004(\u0001\u0000\u0000\u0000\u0006:\u0001\u0000"+ - "\u0000\u0000\bP\u0001\u0000\u0000\u0000\nR\u0001\u0000\u0000\u0000\f\u000f"+ - "\u0003\u0002\u0001\u0000\r\u000f\u0001\u0000\u0000\u0000\u000e\f\u0001"+ - "\u0000\u0000\u0000\u000e\r\u0001\u0000\u0000\u0000\u000f\u0001\u0001\u0000"+ - "\u0000\u0000\u0010\u0011\u0006\u0001\uffff\uffff\u0000\u0011\u0012\u0005"+ - "\u0001\u0000\u0000\u0012\u0013\u0003\u0002\u0001\u0000\u0013\u0014\u0005"+ - "\u0002\u0000\u0000\u0014\u0019\u0001\u0000\u0000\u0000\u0015\u0016\u0005"+ - "\u0003\u0000\u0000\u0016\u0019\u0003\u0002\u0001\u0003\u0017\u0019\u0003"+ - "\u0004\u0002\u0000\u0018\u0010\u0001\u0000\u0000\u0000\u0018\u0015\u0001"+ - "\u0000\u0000\u0000\u0018\u0017\u0001\u0000\u0000\u0000\u0019\u001f\u0001"+ - "\u0000\u0000\u0000\u001a\u001b\n\u0002\u0000\u0000\u001b\u001c\u0005\u0006"+ - "\u0000\u0000\u001c\u001e\u0003\u0002\u0001\u0003\u001d\u001a\u0001\u0000"+ - "\u0000\u0000\u001e!\u0001\u0000\u0000\u0000\u001f\u001d\u0001\u0000\u0000"+ - "\u0000\u001f \u0001\u0000\u0000\u0000 \u0003\u0001\u0000\u0000\u0000!"+ - "\u001f\u0001\u0000\u0000\u0000\"#\u0006\u0002\uffff\uffff\u0000#$\u0005"+ - "\u0001\u0000\u0000$%\u0003\u0004\u0002\u0000%&\u0005\u0002\u0000\u0000"+ - "&)\u0001\u0000\u0000\u0000\')\u0003\u0006\u0003\u0000(\"\u0001\u0000\u0000"+ - "\u0000(\'\u0001\u0000\u0000\u0000)/\u0001\u0000\u0000\u0000*+\n\u0002"+ - "\u0000\u0000+,\u0005\u0007\u0000\u0000,.\u0003\u0004\u0002\u0003-*\u0001"+ - "\u0000\u0000\u0000.1\u0001\u0000\u0000\u0000/-\u0001\u0000\u0000\u0000"+ - "/0\u0001\u0000\u0000\u00000\u0005\u0001\u0000\u0000\u00001/\u0001\u0000"+ - "\u0000\u000023\u0006\u0003\uffff\uffff\u00003;\u0003\b\u0004\u000045\u0005"+ - "\u0003\u0000\u00005;\u0003\u0006\u0003\u000267\u0005\u0001\u0000\u0000"+ - "78\u0003\u0006\u0003\u000089\u0005\u0002\u0000\u00009;\u0001\u0000\u0000"+ - "\u0000:2\u0001\u0000\u0000\u0000:4\u0001\u0000\u0000\u0000:6\u0001\u0000"+ - "\u0000\u0000;D\u0001\u0000\u0000\u0000<=\n\u0004\u0000\u0000=>\u0005\b"+ - "\u0000\u0000>C\u0003\u0006\u0003\u0005?@\n\u0003\u0000\u0000@A\u0005\u0004"+ - "\u0000\u0000AC\u0003\u0006\u0003\u0004B<\u0001\u0000\u0000\u0000B?\u0001"+ - "\u0000\u0000\u0000CF\u0001\u0000\u0000\u0000DB\u0001\u0000\u0000\u0000"+ - "DE\u0001\u0000\u0000\u0000E\u0007\u0001\u0000\u0000\u0000FD\u0001\u0000"+ - "\u0000\u0000GH\u0005\u0001\u0000\u0000HI\u0003\b\u0004\u0000IJ\u0005\u0002"+ - "\u0000\u0000JQ\u0001\u0000\u0000\u0000KQ\u0003\n\u0005\u0000LQ\u0005\u000b"+ - "\u0000\u0000MN\u0005\u000b\u0000\u0000NO\u0005\u0005\u0000\u0000OQ\u0005"+ - "\u000b\u0000\u0000PG\u0001\u0000\u0000\u0000PK\u0001\u0000\u0000\u0000"+ - "PL\u0001\u0000\u0000\u0000PM\u0001\u0000\u0000\u0000Q\t\u0001\u0000\u0000"+ - "\u0000RS\u0007\u0000\u0000\u0000S\u000b\u0001\u0000\u0000\u0000\t\u000e"+ - "\u0018\u001f(/:BDP"; + "\u0004\u0003\u0004Q\b\u0004\u0001\u0005\u0001\u0005\u0003\u0005U\b\u0005"+ + "\u0001\u0005\u0000\u0003\u0002\u0004\u0006\u0006\u0000\u0002\u0004\u0006"+ + "\b\n\u0000\u0000^\u0000\u000e\u0001\u0000\u0000\u0000\u0002\u0018\u0001"+ + "\u0000\u0000\u0000\u0004(\u0001\u0000\u0000\u0000\u0006:\u0001\u0000\u0000"+ + "\u0000\bP\u0001\u0000\u0000\u0000\nT\u0001\u0000\u0000\u0000\f\u000f\u0003"+ + "\u0002\u0001\u0000\r\u000f\u0001\u0000\u0000\u0000\u000e\f\u0001\u0000"+ + "\u0000\u0000\u000e\r\u0001\u0000\u0000\u0000\u000f\u0001\u0001\u0000\u0000"+ + "\u0000\u0010\u0011\u0006\u0001\uffff\uffff\u0000\u0011\u0012\u0005\u0001"+ + "\u0000\u0000\u0012\u0013\u0003\u0002\u0001\u0000\u0013\u0014\u0005\u0002"+ + "\u0000\u0000\u0014\u0019\u0001\u0000\u0000\u0000\u0015\u0016\u0005\u0003"+ + "\u0000\u0000\u0016\u0019\u0003\u0002\u0001\u0003\u0017\u0019\u0003\u0004"+ + "\u0002\u0000\u0018\u0010\u0001\u0000\u0000\u0000\u0018\u0015\u0001\u0000"+ + "\u0000\u0000\u0018\u0017\u0001\u0000\u0000\u0000\u0019\u001f\u0001\u0000"+ + "\u0000\u0000\u001a\u001b\n\u0002\u0000\u0000\u001b\u001c\u0005\u0006\u0000"+ + "\u0000\u001c\u001e\u0003\u0002\u0001\u0003\u001d\u001a\u0001\u0000\u0000"+ + "\u0000\u001e!\u0001\u0000\u0000\u0000\u001f\u001d\u0001\u0000\u0000\u0000"+ + "\u001f \u0001\u0000\u0000\u0000 \u0003\u0001\u0000\u0000\u0000!\u001f"+ + "\u0001\u0000\u0000\u0000\"#\u0006\u0002\uffff\uffff\u0000#$\u0005\u0001"+ + "\u0000\u0000$%\u0003\u0004\u0002\u0000%&\u0005\u0002\u0000\u0000&)\u0001"+ + "\u0000\u0000\u0000\')\u0003\u0006\u0003\u0000(\"\u0001\u0000\u0000\u0000"+ + "(\'\u0001\u0000\u0000\u0000)/\u0001\u0000\u0000\u0000*+\n\u0002\u0000"+ + "\u0000+,\u0005\u0007\u0000\u0000,.\u0003\u0004\u0002\u0003-*\u0001\u0000"+ + "\u0000\u0000.1\u0001\u0000\u0000\u0000/-\u0001\u0000\u0000\u0000/0\u0001"+ + "\u0000\u0000\u00000\u0005\u0001\u0000\u0000\u00001/\u0001\u0000\u0000"+ + "\u000023\u0006\u0003\uffff\uffff\u00003;\u0003\b\u0004\u000045\u0005\u0003"+ + "\u0000\u00005;\u0003\u0006\u0003\u000267\u0005\u0001\u0000\u000078\u0003"+ + "\u0006\u0003\u000089\u0005\u0002\u0000\u00009;\u0001\u0000\u0000\u0000"+ + ":2\u0001\u0000\u0000\u0000:4\u0001\u0000\u0000\u0000:6\u0001\u0000\u0000"+ + "\u0000;D\u0001\u0000\u0000\u0000<=\n\u0004\u0000\u0000=>\u0005\b\u0000"+ + "\u0000>C\u0003\u0006\u0003\u0005?@\n\u0003\u0000\u0000@A\u0005\u0004\u0000"+ + "\u0000AC\u0003\u0006\u0003\u0004B<\u0001\u0000\u0000\u0000B?\u0001\u0000"+ + "\u0000\u0000CF\u0001\u0000\u0000\u0000DB\u0001\u0000\u0000\u0000DE\u0001"+ + "\u0000\u0000\u0000E\u0007\u0001\u0000\u0000\u0000FD\u0001\u0000\u0000"+ + "\u0000GH\u0005\u0001\u0000\u0000HI\u0003\b\u0004\u0000IJ\u0005\u0002\u0000"+ + "\u0000JQ\u0001\u0000\u0000\u0000KQ\u0003\n\u0005\u0000LQ\u0005\u000b\u0000"+ + "\u0000MN\u0005\u000b\u0000\u0000NO\u0005\u0005\u0000\u0000OQ\u0005\u000b"+ + "\u0000\u0000PG\u0001\u0000\u0000\u0000PK\u0001\u0000\u0000\u0000PL\u0001"+ + "\u0000\u0000\u0000PM\u0001\u0000\u0000\u0000Q\t\u0001\u0000\u0000\u0000"+ + "RU\u0005\t\u0000\u0000SU\u0005\f\u0000\u0000TR\u0001\u0000\u0000\u0000"+ + "TS\u0001\u0000\u0000\u0000U\u000b\u0001\u0000\u0000\u0000\n\u000e\u0018"+ + "\u001f(/:BDPT"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/latte/src/main/java/refinements/RefinementsLanguageVisitor.java b/latte/src/main/java/refinements/RefinementsLanguageVisitor.java index 806337e..4150f3a 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageVisitor.java +++ b/latte/src/main/java/refinements/RefinementsLanguageVisitor.java @@ -129,9 +129,17 @@ public interface RefinementsLanguageVisitor extends ParseTreeVisitor { */ T visitTargetInvocation(RefinementsLanguageParser.TargetInvocationContext ctx); /** - * Visit a parse tree produced by {@link RefinementsLanguageParser#literal}. + * Visit a parse tree produced by the {@code litBool} + * labeled alternative in {@link RefinementsLanguageParser#literal}. * @param ctx the parse tree * @return the visitor result */ - T visitLiteral(RefinementsLanguageParser.LiteralContext ctx); + T visitLitBool(RefinementsLanguageParser.LitBoolContext ctx); + /** + * Visit a parse tree produced by the {@code litInt} + * labeled alternative in {@link RefinementsLanguageParser#literal}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLitInt(RefinementsLanguageParser.LitIntContext ctx); } \ No newline at end of file diff --git a/latte/src/main/java/refinements/TestRefinementsLanguage.java b/latte/src/main/java/refinements/TestRefinementsLanguage.java index 65bc27d..fe2c046 100644 --- a/latte/src/main/java/refinements/TestRefinementsLanguage.java +++ b/latte/src/main/java/refinements/TestRefinementsLanguage.java @@ -12,7 +12,7 @@ public class TestRefinementsLanguage { public static void main(String[] args) { - String input = "a < 10"; + String input = "10"; // // Create input stream (modern way) CharStream inputStream = CharStreams.fromString(input); diff --git a/latte/src/main/java/smt/RefinementsToZ3Translator.java b/latte/src/main/java/smt/RefinementsToZ3Translator.java index 48adc81..693750a 100644 --- a/latte/src/main/java/smt/RefinementsToZ3Translator.java +++ b/latte/src/main/java/smt/RefinementsToZ3Translator.java @@ -5,16 +5,12 @@ import com.microsoft.z3.*; import refinements.*; +import refinements.RefinementsLanguageParser.ProgContext; import java.util.HashMap; import java.util.Map; /** - * STUDENT EXERCISE: Complete this translator to convert RefinementsLanguage AST to Z3 formulas - * - * Your task is to implement the visitor methods to translate different language constructs - * into their corresponding Z3 expressions. - * * The translator extends RefinementsLanguageBaseVisitor and converts parse tree nodes * to Z3 Expr objects (BoolExpr for boolean expressions, ArithExpr for arithmetic, etc.) */ @@ -32,19 +28,34 @@ public RefinementsToZ3Translator(Context z3Context) { * This method is already complete. */ public BoolExpr translate(ParseTree tree) { - Expr result = visit(tree); - + Expr result = visit(tree); if (result instanceof BoolExpr) { return (BoolExpr) result; } else { throw new IllegalArgumentException("Root expression must be boolean, got: " + result.getClass()); } } - - + + @Override + public Expr visitProg(ProgContext ctx) { + return super.visitProg(ctx); + } + // ================================================================= // Implement visitor methods for elements in the grammar // ================================================================= + public Expr visitLitBool(RefinementsLanguageParser.ProgContext ctx) { + System.out.println("Visiting boolean literal: " + ctx.getText()); + // Handle boolean literals (true/false) + String text = ctx.getText(); + if (text.equals("true")) { + return z3Context.mkTrue(); + } else if (text.equals("false")) { + return z3Context.mkFalse(); + } else + throw new IllegalArgumentException("Unknown boolean literal: " + text); + } + } \ No newline at end of file diff --git a/latte/src/main/java/smt/SimpleTranslatorTest.java b/latte/src/main/java/smt/SimpleTranslatorTest.java index be531e3..6afe94c 100644 --- a/latte/src/main/java/smt/SimpleTranslatorTest.java +++ b/latte/src/main/java/smt/SimpleTranslatorTest.java @@ -8,9 +8,9 @@ import refinements.*; /** - * Test class for students to verify their RefinementsToZ3TranslatorSkeleton implementation + * Test class to verify RefinementsToZ3Translator implementation * - * Run this class after implementing methods in the translator skeleton. + * Run this class after implementing methods in the translator. * Start with simple tests and work your way up to complex ones. */ public class SimpleTranslatorTest { @@ -21,12 +21,12 @@ public static void main(String[] args) { // Test in order of difficulty testStep1_Literals(); - testStep2_Variables(); - testStep3_Arithmetic(); - testStep4_Comparisons(); - testStep5_LogicalOperations(); - testStep6_Implications(); - testStep7_ComplexExpressions(); + // testStep2_Variables(); + // testStep3_Arithmetic(); + // testStep4_Comparisons(); + // testStep5_LogicalOperations(); + // testStep6_Implications(); + // testStep7_ComplexExpressions(); } public static void testStep1_Literals() { @@ -146,6 +146,7 @@ public void syntaxError(Recognizer recognizer, Object offendingSymbol, // Parse ParseTree tree = parser.prog(); + System.out.println("\n Parse Tree: " + tree.toStringTree(parser)); // Translate using student's implementation RefinementsToZ3Translator translator = new RefinementsToZ3Translator(ctx); @@ -164,6 +165,7 @@ private static void tryFindModel(BoolExpr formula, Context ctx) { Solver solver = ctx.mkSolver(); solver.add(formula); + System.out.println("Translation to SMT:\n"+solver.toString()); Status result = solver.check(); if (result == Status.SATISFIABLE) { From b7f166cdb8ddcc0831ec44c0ced295cade2dd784 Mon Sep 17 00:00:00 2001 From: Antonio Almeida Date: Wed, 25 Jun 2025 18:33:07 +0100 Subject: [PATCH 07/14] Added visit literal functions and 'fixed' (?) tests and logic --- .../java/smt/RefinementsToZ3Translator.java | 33 ++++++++++++------- .../main/java/smt/SimpleTranslatorTest.java | 8 ++--- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/latte/src/main/java/smt/RefinementsToZ3Translator.java b/latte/src/main/java/smt/RefinementsToZ3Translator.java index 693750a..57e8871 100644 --- a/latte/src/main/java/smt/RefinementsToZ3Translator.java +++ b/latte/src/main/java/smt/RefinementsToZ3Translator.java @@ -27,12 +27,12 @@ public RefinementsToZ3Translator(Context z3Context) { * Main entry point - translate a parse tree to a Z3 formula * This method is already complete. */ - public BoolExpr translate(ParseTree tree) { + public Expr translate(ParseTree tree) { Expr result = visit(tree); - if (result instanceof BoolExpr) { - return (BoolExpr) result; + if (result != null) { + return result; } else { - throw new IllegalArgumentException("Root expression must be boolean, got: " + result.getClass()); + throw new IllegalArgumentException("Root expression must be expression, got: " + result.getClass()); } } @@ -45,16 +45,25 @@ public Expr visitProg(ProgContext ctx) { // Implement visitor methods for elements in the grammar // ================================================================= - public Expr visitLitBool(RefinementsLanguageParser.ProgContext ctx) { - System.out.println("Visiting boolean literal: " + ctx.getText()); - // Handle boolean literals (true/false) - String text = ctx.getText(); - if (text.equals("true")) { + @Override + public Expr visitLitBool(RefinementsLanguageParser.LitBoolContext ctx) { + if (ctx.getText().equals("true")) { return z3Context.mkTrue(); - } else if (text.equals("false")) { + } else { return z3Context.mkFalse(); - } else - throw new IllegalArgumentException("Unknown boolean literal: " + text); + } + } + + @Override + public Expr visitLitInt(RefinementsLanguageParser.LitIntContext ctx) { + String intText = ctx.getText().replace("_", ""); // sanitize e.g., 1_000 + int value = Integer.parseInt(intText); + return z3Context.mkInt(value); + } + + @Override + public Expr visitLit(RefinementsLanguageParser.LitContext ctx) { + return visit(ctx.literal()); // Delegate to litBool or litInt } diff --git a/latte/src/main/java/smt/SimpleTranslatorTest.java b/latte/src/main/java/smt/SimpleTranslatorTest.java index 6afe94c..9107803 100644 --- a/latte/src/main/java/smt/SimpleTranslatorTest.java +++ b/latte/src/main/java/smt/SimpleTranslatorTest.java @@ -102,7 +102,7 @@ private static void testExpression(String expression, String description) { try (Context ctx = new Context()) { // Try to translate the expression - BoolExpr result = translateExpression(expression, ctx); + Expr result = translateExpression(expression, ctx); if (result != null) { System.out.println("✅ SUCCESS"); @@ -126,7 +126,7 @@ private static void testExpression(String expression, String description) { /** * Translate expression using student's implementation */ - private static BoolExpr translateExpression(String expression, Context ctx) { + private static Expr translateExpression(String expression, Context ctx) { try { // Parse with ANTLR CharStream input = CharStreams.fromString(expression); @@ -160,7 +160,7 @@ public void syntaxError(Recognizer recognizer, Object offendingSymbol, /** * Try to find a satisfying model for the expression */ - private static void tryFindModel(BoolExpr formula, Context ctx) { + private static void tryFindModel(Expr formula, Context ctx) { try { Solver solver = ctx.mkSolver(); solver.add(formula); @@ -213,7 +213,7 @@ public static void testValidityCheck() { System.out.print(" Checking validity of: " + impl + " ... "); try (Context ctx = new Context()) { - BoolExpr formula = translateExpression(impl, ctx); + Expr formula = translateExpression(impl, ctx); if (formula != null) { Solver solver = ctx.mkSolver(); From a88d678d4f54cf6b134c37c0d6e0383d0526b5d1 Mon Sep 17 00:00:00 2001 From: Antonio Almeida Date: Wed, 25 Jun 2025 18:46:05 +0100 Subject: [PATCH 08/14] Added visitVar function --- .../java/smt/RefinementsToZ3Translator.java | 19 +++++++++++++++++++ .../main/java/smt/SimpleTranslatorTest.java | 4 ++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/latte/src/main/java/smt/RefinementsToZ3Translator.java b/latte/src/main/java/smt/RefinementsToZ3Translator.java index 57e8871..cea6b7a 100644 --- a/latte/src/main/java/smt/RefinementsToZ3Translator.java +++ b/latte/src/main/java/smt/RefinementsToZ3Translator.java @@ -66,5 +66,24 @@ public Expr visitLit(RefinementsLanguageParser.LitContext ctx) { return visit(ctx.literal()); // Delegate to litBool or litInt } + @Override + public Expr visitVar(RefinementsLanguageParser.VarContext ctx) { + String varName = ctx.getText(); + + // Look up if we've already created a Z3 variable for this name + if (variableMap.containsKey(varName)) { + return variableMap.get(varName); + } + + // If not, create a fresh Z3 integer variable (default assumption) + // Later you could refine this to support booleans too if needed. + Expr z3Var = z3Context.mkIntConst(varName); + + // Store it in the map so it’s reused consistently + variableMap.put(varName, z3Var); + + return z3Var; + } + } \ No newline at end of file diff --git a/latte/src/main/java/smt/SimpleTranslatorTest.java b/latte/src/main/java/smt/SimpleTranslatorTest.java index 9107803..f883f09 100644 --- a/latte/src/main/java/smt/SimpleTranslatorTest.java +++ b/latte/src/main/java/smt/SimpleTranslatorTest.java @@ -21,7 +21,7 @@ public static void main(String[] args) { // Test in order of difficulty testStep1_Literals(); - // testStep2_Variables(); + testStep2_Variables(); // testStep3_Arithmetic(); // testStep4_Comparisons(); // testStep5_LogicalOperations(); @@ -106,7 +106,7 @@ private static void testExpression(String expression, String description) { if (result != null) { System.out.println("✅ SUCCESS"); - System.out.println(" Z3 Formula: " + result); + System.out.println(" Z3 Formula: " + result + ": " + result.getClass().getSimpleName()); // For non-tautologies, try to find a model if (!expression.contains("->")) { From 856dd8af61aeaa6d859cbd8e7a891eb05bfa1528 Mon Sep 17 00:00:00 2001 From: Antonio Almeida Date: Thu, 26 Jun 2025 15:43:44 +0100 Subject: [PATCH 09/14] Added visitOpArith function --- .../java/smt/RefinementsToZ3Translator.java | 28 +++++++++++++++++++ .../main/java/smt/SimpleTranslatorTest.java | 2 +- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/latte/src/main/java/smt/RefinementsToZ3Translator.java b/latte/src/main/java/smt/RefinementsToZ3Translator.java index cea6b7a..4e9f26a 100644 --- a/latte/src/main/java/smt/RefinementsToZ3Translator.java +++ b/latte/src/main/java/smt/RefinementsToZ3Translator.java @@ -85,5 +85,33 @@ public Expr visitVar(RefinementsLanguageParser.VarContext ctx) { return z3Var; } + @Override + public Expr visitOpArith(RefinementsLanguageParser.OpArithContext ctx) { + // Visit the left and right operands + Expr left = visit(ctx.operand(0)); + Expr right = visit(ctx.operand(1)); + String op = ctx.ARITHOP().getText(); + + // Ensure both sides are arithmetic expressions + if (!(left instanceof ArithExpr) || !(right instanceof ArithExpr)) { + throw new IllegalArgumentException("Operands must be arithmetic expressions"); + } + + ArithExpr leftArith = (ArithExpr) left; + ArithExpr rightArith = (ArithExpr) right; + + // Dispatch based on operator + switch (op) { + case "+": + return z3Context.mkAdd(leftArith, rightArith); + case "*": + return z3Context.mkMul(leftArith, rightArith); + case "/": + return z3Context.mkDiv(leftArith, rightArith); // Integer division + default: + throw new UnsupportedOperationException("Unknown arithmetic operator: " + op); + } + } + } \ No newline at end of file diff --git a/latte/src/main/java/smt/SimpleTranslatorTest.java b/latte/src/main/java/smt/SimpleTranslatorTest.java index f883f09..f4ebca1 100644 --- a/latte/src/main/java/smt/SimpleTranslatorTest.java +++ b/latte/src/main/java/smt/SimpleTranslatorTest.java @@ -22,7 +22,7 @@ public static void main(String[] args) { // Test in order of difficulty testStep1_Literals(); testStep2_Variables(); - // testStep3_Arithmetic(); + testStep3_Arithmetic(); // testStep4_Comparisons(); // testStep5_LogicalOperations(); // testStep6_Implications(); From 3610d44ffc20a4a210477e773bd807c84f4b396c Mon Sep 17 00:00:00 2001 From: Antonio Almeida Date: Thu, 26 Jun 2025 15:52:54 +0100 Subject: [PATCH 10/14] Added visitExpBool for comparisons and updated the grammar to include '>' and '>=' --- .../java/refinements/RefinementsLanguage.g4 | 2 +- .../java/smt/RefinementsToZ3Translator.java | 28 +++++++++++++++++++ .../main/java/smt/SimpleTranslatorTest.java | 2 +- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/latte/src/main/java/refinements/RefinementsLanguage.g4 b/latte/src/main/java/refinements/RefinementsLanguage.g4 index e1049d4..084e177 100644 --- a/latte/src/main/java/refinements/RefinementsLanguage.g4 +++ b/latte/src/main/java/refinements/RefinementsLanguage.g4 @@ -42,7 +42,7 @@ literal: LOGOP : '&&'|'||'; -BOOLOP : '=='|'<='|'<'; +BOOLOP: '==' | '<=' | '<' | '>=' | '>'; ARITHOP : '+'|'*'|'/';//|'-'; // 𝑐 | 𝑥 | 𝑥 .𝑓 | 𝑒 + 𝑒 | ! 𝑒 diff --git a/latte/src/main/java/smt/RefinementsToZ3Translator.java b/latte/src/main/java/smt/RefinementsToZ3Translator.java index 4e9f26a..c9f4f46 100644 --- a/latte/src/main/java/smt/RefinementsToZ3Translator.java +++ b/latte/src/main/java/smt/RefinementsToZ3Translator.java @@ -113,5 +113,33 @@ public Expr visitOpArith(RefinementsLanguageParser.OpArithContext ctx) { } } + @Override + public Expr visitExpBool(RefinementsLanguageParser.ExpBoolContext ctx) { + Expr left = visit(ctx.exp(0)); + Expr right = visit(ctx.exp(1)); + String op = ctx.BOOLOP().getText(); + + if (!(left instanceof ArithExpr) || !(right instanceof ArithExpr)) { + throw new IllegalArgumentException("Both sides of a comparison must be arithmetic expressions."); + } + + ArithExpr leftArith = (ArithExpr) left; + ArithExpr rightArith = (ArithExpr) right; + + switch (op) { + case "==": + return z3Context.mkEq(leftArith, rightArith); + case "<": + return z3Context.mkLt(leftArith, rightArith); + case "<=": + return z3Context.mkLe(leftArith, rightArith); + case ">": + return z3Context.mkGt(leftArith, rightArith); + case ">=": + return z3Context.mkGe(leftArith, rightArith); + default: + throw new UnsupportedOperationException("Unknown boolean operator: " + op); + } + } } \ No newline at end of file diff --git a/latte/src/main/java/smt/SimpleTranslatorTest.java b/latte/src/main/java/smt/SimpleTranslatorTest.java index f4ebca1..d2bcabe 100644 --- a/latte/src/main/java/smt/SimpleTranslatorTest.java +++ b/latte/src/main/java/smt/SimpleTranslatorTest.java @@ -23,7 +23,7 @@ public static void main(String[] args) { testStep1_Literals(); testStep2_Variables(); testStep3_Arithmetic(); - // testStep4_Comparisons(); + testStep4_Comparisons(); // testStep5_LogicalOperations(); // testStep6_Implications(); // testStep7_ComplexExpressions(); From 5a40a2496ff829739ee084a2bf1a150af7063843 Mon Sep 17 00:00:00 2001 From: Antonio Almeida Date: Thu, 26 Jun 2025 16:15:38 +0100 Subject: [PATCH 11/14] Added visitPredNegate and visitPredLogic to handle logical operations --- .../RefinementsLanguageLexer.interp | 2 +- .../refinements/RefinementsLanguageLexer.java | 127 +++++++++--------- .../java/smt/RefinementsToZ3Translator.java | 32 +++++ .../main/java/smt/SimpleTranslatorTest.java | 2 +- 4 files changed, 99 insertions(+), 64 deletions(-) diff --git a/latte/src/main/java/refinements/RefinementsLanguageLexer.interp b/latte/src/main/java/refinements/RefinementsLanguageLexer.interp index d6867f3..b262e22 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageLexer.interp +++ b/latte/src/main/java/refinements/RefinementsLanguageLexer.interp @@ -53,4 +53,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 13, 113, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 42, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 49, 8, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 62, 8, 8, 1, 9, 1, 9, 5, 9, 66, 8, 9, 10, 9, 12, 9, 69, 9, 9, 1, 10, 5, 10, 72, 8, 10, 10, 10, 12, 10, 75, 9, 10, 1, 10, 1, 10, 5, 10, 79, 8, 10, 10, 10, 12, 10, 82, 9, 10, 1, 11, 4, 11, 85, 8, 11, 11, 11, 12, 11, 86, 1, 11, 4, 11, 90, 8, 11, 11, 11, 12, 11, 91, 1, 11, 1, 11, 4, 11, 96, 8, 11, 11, 11, 12, 11, 97, 5, 11, 100, 8, 11, 10, 11, 12, 11, 103, 9, 11, 3, 11, 105, 8, 11, 1, 12, 4, 12, 108, 8, 12, 11, 12, 12, 12, 109, 1, 12, 1, 12, 0, 0, 13, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 1, 0, 7, 2, 0, 42, 43, 47, 47, 1, 0, 65, 90, 3, 0, 48, 57, 65, 90, 97, 122, 3, 0, 65, 90, 95, 95, 97, 122, 5, 0, 35, 35, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 3, 0, 9, 10, 13, 13, 32, 32, 125, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 1, 27, 1, 0, 0, 0, 3, 29, 1, 0, 0, 0, 5, 31, 1, 0, 0, 0, 7, 33, 1, 0, 0, 0, 9, 35, 1, 0, 0, 0, 11, 41, 1, 0, 0, 0, 13, 48, 1, 0, 0, 0, 15, 50, 1, 0, 0, 0, 17, 61, 1, 0, 0, 0, 19, 63, 1, 0, 0, 0, 21, 73, 1, 0, 0, 0, 23, 104, 1, 0, 0, 0, 25, 107, 1, 0, 0, 0, 27, 28, 5, 40, 0, 0, 28, 2, 1, 0, 0, 0, 29, 30, 5, 41, 0, 0, 30, 4, 1, 0, 0, 0, 31, 32, 5, 33, 0, 0, 32, 6, 1, 0, 0, 0, 33, 34, 5, 45, 0, 0, 34, 8, 1, 0, 0, 0, 35, 36, 5, 46, 0, 0, 36, 10, 1, 0, 0, 0, 37, 38, 5, 38, 0, 0, 38, 42, 5, 38, 0, 0, 39, 40, 5, 124, 0, 0, 40, 42, 5, 124, 0, 0, 41, 37, 1, 0, 0, 0, 41, 39, 1, 0, 0, 0, 42, 12, 1, 0, 0, 0, 43, 44, 5, 61, 0, 0, 44, 49, 5, 61, 0, 0, 45, 46, 5, 60, 0, 0, 46, 49, 5, 61, 0, 0, 47, 49, 5, 60, 0, 0, 48, 43, 1, 0, 0, 0, 48, 45, 1, 0, 0, 0, 48, 47, 1, 0, 0, 0, 49, 14, 1, 0, 0, 0, 50, 51, 7, 0, 0, 0, 51, 16, 1, 0, 0, 0, 52, 53, 5, 116, 0, 0, 53, 54, 5, 114, 0, 0, 54, 55, 5, 117, 0, 0, 55, 62, 5, 101, 0, 0, 56, 57, 5, 102, 0, 0, 57, 58, 5, 97, 0, 0, 58, 59, 5, 108, 0, 0, 59, 60, 5, 115, 0, 0, 60, 62, 5, 101, 0, 0, 61, 52, 1, 0, 0, 0, 61, 56, 1, 0, 0, 0, 62, 18, 1, 0, 0, 0, 63, 67, 7, 1, 0, 0, 64, 66, 7, 2, 0, 0, 65, 64, 1, 0, 0, 0, 66, 69, 1, 0, 0, 0, 67, 65, 1, 0, 0, 0, 67, 68, 1, 0, 0, 0, 68, 20, 1, 0, 0, 0, 69, 67, 1, 0, 0, 0, 70, 72, 5, 35, 0, 0, 71, 70, 1, 0, 0, 0, 72, 75, 1, 0, 0, 0, 73, 71, 1, 0, 0, 0, 73, 74, 1, 0, 0, 0, 74, 76, 1, 0, 0, 0, 75, 73, 1, 0, 0, 0, 76, 80, 7, 3, 0, 0, 77, 79, 7, 4, 0, 0, 78, 77, 1, 0, 0, 0, 79, 82, 1, 0, 0, 0, 80, 78, 1, 0, 0, 0, 80, 81, 1, 0, 0, 0, 81, 22, 1, 0, 0, 0, 82, 80, 1, 0, 0, 0, 83, 85, 7, 5, 0, 0, 84, 83, 1, 0, 0, 0, 85, 86, 1, 0, 0, 0, 86, 84, 1, 0, 0, 0, 86, 87, 1, 0, 0, 0, 87, 105, 1, 0, 0, 0, 88, 90, 7, 5, 0, 0, 89, 88, 1, 0, 0, 0, 90, 91, 1, 0, 0, 0, 91, 89, 1, 0, 0, 0, 91, 92, 1, 0, 0, 0, 92, 101, 1, 0, 0, 0, 93, 95, 5, 95, 0, 0, 94, 96, 7, 5, 0, 0, 95, 94, 1, 0, 0, 0, 96, 97, 1, 0, 0, 0, 97, 95, 1, 0, 0, 0, 97, 98, 1, 0, 0, 0, 98, 100, 1, 0, 0, 0, 99, 93, 1, 0, 0, 0, 100, 103, 1, 0, 0, 0, 101, 99, 1, 0, 0, 0, 101, 102, 1, 0, 0, 0, 102, 105, 1, 0, 0, 0, 103, 101, 1, 0, 0, 0, 104, 84, 1, 0, 0, 0, 104, 89, 1, 0, 0, 0, 105, 24, 1, 0, 0, 0, 106, 108, 7, 6, 0, 0, 107, 106, 1, 0, 0, 0, 108, 109, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 111, 1, 0, 0, 0, 111, 112, 6, 12, 0, 0, 112, 26, 1, 0, 0, 0, 13, 0, 41, 48, 61, 67, 73, 80, 86, 91, 97, 101, 104, 109, 1, 0, 1, 0] \ No newline at end of file +[4, 0, 13, 116, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 42, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 52, 8, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 65, 8, 8, 1, 9, 1, 9, 5, 9, 69, 8, 9, 10, 9, 12, 9, 72, 9, 9, 1, 10, 5, 10, 75, 8, 10, 10, 10, 12, 10, 78, 9, 10, 1, 10, 1, 10, 5, 10, 82, 8, 10, 10, 10, 12, 10, 85, 9, 10, 1, 11, 4, 11, 88, 8, 11, 11, 11, 12, 11, 89, 1, 11, 4, 11, 93, 8, 11, 11, 11, 12, 11, 94, 1, 11, 1, 11, 4, 11, 99, 8, 11, 11, 11, 12, 11, 100, 5, 11, 103, 8, 11, 10, 11, 12, 11, 106, 9, 11, 3, 11, 108, 8, 11, 1, 12, 4, 12, 111, 8, 12, 11, 12, 12, 12, 112, 1, 12, 1, 12, 0, 0, 13, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 1, 0, 7, 2, 0, 42, 43, 47, 47, 1, 0, 65, 90, 3, 0, 48, 57, 65, 90, 97, 122, 3, 0, 65, 90, 95, 95, 97, 122, 5, 0, 35, 35, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 3, 0, 9, 10, 13, 13, 32, 32, 130, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 1, 27, 1, 0, 0, 0, 3, 29, 1, 0, 0, 0, 5, 31, 1, 0, 0, 0, 7, 33, 1, 0, 0, 0, 9, 35, 1, 0, 0, 0, 11, 41, 1, 0, 0, 0, 13, 51, 1, 0, 0, 0, 15, 53, 1, 0, 0, 0, 17, 64, 1, 0, 0, 0, 19, 66, 1, 0, 0, 0, 21, 76, 1, 0, 0, 0, 23, 107, 1, 0, 0, 0, 25, 110, 1, 0, 0, 0, 27, 28, 5, 40, 0, 0, 28, 2, 1, 0, 0, 0, 29, 30, 5, 41, 0, 0, 30, 4, 1, 0, 0, 0, 31, 32, 5, 33, 0, 0, 32, 6, 1, 0, 0, 0, 33, 34, 5, 45, 0, 0, 34, 8, 1, 0, 0, 0, 35, 36, 5, 46, 0, 0, 36, 10, 1, 0, 0, 0, 37, 38, 5, 38, 0, 0, 38, 42, 5, 38, 0, 0, 39, 40, 5, 124, 0, 0, 40, 42, 5, 124, 0, 0, 41, 37, 1, 0, 0, 0, 41, 39, 1, 0, 0, 0, 42, 12, 1, 0, 0, 0, 43, 44, 5, 61, 0, 0, 44, 52, 5, 61, 0, 0, 45, 46, 5, 60, 0, 0, 46, 52, 5, 61, 0, 0, 47, 52, 5, 60, 0, 0, 48, 49, 5, 62, 0, 0, 49, 52, 5, 61, 0, 0, 50, 52, 5, 62, 0, 0, 51, 43, 1, 0, 0, 0, 51, 45, 1, 0, 0, 0, 51, 47, 1, 0, 0, 0, 51, 48, 1, 0, 0, 0, 51, 50, 1, 0, 0, 0, 52, 14, 1, 0, 0, 0, 53, 54, 7, 0, 0, 0, 54, 16, 1, 0, 0, 0, 55, 56, 5, 116, 0, 0, 56, 57, 5, 114, 0, 0, 57, 58, 5, 117, 0, 0, 58, 65, 5, 101, 0, 0, 59, 60, 5, 102, 0, 0, 60, 61, 5, 97, 0, 0, 61, 62, 5, 108, 0, 0, 62, 63, 5, 115, 0, 0, 63, 65, 5, 101, 0, 0, 64, 55, 1, 0, 0, 0, 64, 59, 1, 0, 0, 0, 65, 18, 1, 0, 0, 0, 66, 70, 7, 1, 0, 0, 67, 69, 7, 2, 0, 0, 68, 67, 1, 0, 0, 0, 69, 72, 1, 0, 0, 0, 70, 68, 1, 0, 0, 0, 70, 71, 1, 0, 0, 0, 71, 20, 1, 0, 0, 0, 72, 70, 1, 0, 0, 0, 73, 75, 5, 35, 0, 0, 74, 73, 1, 0, 0, 0, 75, 78, 1, 0, 0, 0, 76, 74, 1, 0, 0, 0, 76, 77, 1, 0, 0, 0, 77, 79, 1, 0, 0, 0, 78, 76, 1, 0, 0, 0, 79, 83, 7, 3, 0, 0, 80, 82, 7, 4, 0, 0, 81, 80, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 22, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 86, 88, 7, 5, 0, 0, 87, 86, 1, 0, 0, 0, 88, 89, 1, 0, 0, 0, 89, 87, 1, 0, 0, 0, 89, 90, 1, 0, 0, 0, 90, 108, 1, 0, 0, 0, 91, 93, 7, 5, 0, 0, 92, 91, 1, 0, 0, 0, 93, 94, 1, 0, 0, 0, 94, 92, 1, 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 104, 1, 0, 0, 0, 96, 98, 5, 95, 0, 0, 97, 99, 7, 5, 0, 0, 98, 97, 1, 0, 0, 0, 99, 100, 1, 0, 0, 0, 100, 98, 1, 0, 0, 0, 100, 101, 1, 0, 0, 0, 101, 103, 1, 0, 0, 0, 102, 96, 1, 0, 0, 0, 103, 106, 1, 0, 0, 0, 104, 102, 1, 0, 0, 0, 104, 105, 1, 0, 0, 0, 105, 108, 1, 0, 0, 0, 106, 104, 1, 0, 0, 0, 107, 87, 1, 0, 0, 0, 107, 92, 1, 0, 0, 0, 108, 24, 1, 0, 0, 0, 109, 111, 7, 6, 0, 0, 110, 109, 1, 0, 0, 0, 111, 112, 1, 0, 0, 0, 112, 110, 1, 0, 0, 0, 112, 113, 1, 0, 0, 0, 113, 114, 1, 0, 0, 0, 114, 115, 6, 12, 0, 0, 115, 26, 1, 0, 0, 0, 13, 0, 41, 51, 64, 70, 76, 83, 89, 94, 100, 104, 107, 112, 1, 0, 1, 0] \ No newline at end of file diff --git a/latte/src/main/java/refinements/RefinementsLanguageLexer.java b/latte/src/main/java/refinements/RefinementsLanguageLexer.java index 46e3e5d..6949c5b 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageLexer.java +++ b/latte/src/main/java/refinements/RefinementsLanguageLexer.java @@ -106,74 +106,77 @@ public RefinementsLanguageLexer(CharStream input) { public ATN getATN() { return _ATN; } public static final String _serializedATN = - "\u0004\u0000\rq\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ + "\u0004\u0000\rt\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ "\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+ "\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+ "\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+ "\u0007\u000b\u0002\f\u0007\f\u0001\u0000\u0001\u0000\u0001\u0001\u0001"+ "\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001"+ "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0003\u0005*\b"+ - "\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0003"+ - "\u00061\b\u0006\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\b\u0001"+ - "\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0003\b>\b\b\u0001\t\u0001"+ - "\t\u0005\tB\b\t\n\t\f\tE\t\t\u0001\n\u0005\nH\b\n\n\n\f\nK\t\n\u0001\n"+ - "\u0001\n\u0005\nO\b\n\n\n\f\nR\t\n\u0001\u000b\u0004\u000bU\b\u000b\u000b"+ - "\u000b\f\u000bV\u0001\u000b\u0004\u000bZ\b\u000b\u000b\u000b\f\u000b["+ - "\u0001\u000b\u0001\u000b\u0004\u000b`\b\u000b\u000b\u000b\f\u000ba\u0005"+ - "\u000bd\b\u000b\n\u000b\f\u000bg\t\u000b\u0003\u000bi\b\u000b\u0001\f"+ - "\u0004\fl\b\f\u000b\f\f\fm\u0001\f\u0001\f\u0000\u0000\r\u0001\u0001\u0003"+ - "\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006\r\u0007\u000f\b\u0011"+ - "\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u0001\u0000\u0007\u0002\u0000*"+ - "+//\u0001\u0000AZ\u0003\u000009AZaz\u0003\u0000AZ__az\u0005\u0000##09"+ - "AZ__az\u0001\u000009\u0003\u0000\t\n\r\r }\u0000\u0001\u0001\u0000\u0000"+ - "\u0000\u0000\u0003\u0001\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000"+ - "\u0000\u0000\u0007\u0001\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000"+ - "\u0000\u000b\u0001\u0000\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000"+ - "\u000f\u0001\u0000\u0000\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000"+ - "\u0013\u0001\u0000\u0000\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000"+ - "\u0017\u0001\u0000\u0000\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0001"+ - "\u001b\u0001\u0000\u0000\u0000\u0003\u001d\u0001\u0000\u0000\u0000\u0005"+ - "\u001f\u0001\u0000\u0000\u0000\u0007!\u0001\u0000\u0000\u0000\t#\u0001"+ - "\u0000\u0000\u0000\u000b)\u0001\u0000\u0000\u0000\r0\u0001\u0000\u0000"+ - "\u0000\u000f2\u0001\u0000\u0000\u0000\u0011=\u0001\u0000\u0000\u0000\u0013"+ - "?\u0001\u0000\u0000\u0000\u0015I\u0001\u0000\u0000\u0000\u0017h\u0001"+ - "\u0000\u0000\u0000\u0019k\u0001\u0000\u0000\u0000\u001b\u001c\u0005(\u0000"+ - "\u0000\u001c\u0002\u0001\u0000\u0000\u0000\u001d\u001e\u0005)\u0000\u0000"+ - "\u001e\u0004\u0001\u0000\u0000\u0000\u001f \u0005!\u0000\u0000 \u0006"+ - "\u0001\u0000\u0000\u0000!\"\u0005-\u0000\u0000\"\b\u0001\u0000\u0000\u0000"+ - "#$\u0005.\u0000\u0000$\n\u0001\u0000\u0000\u0000%&\u0005&\u0000\u0000"+ - "&*\u0005&\u0000\u0000\'(\u0005|\u0000\u0000(*\u0005|\u0000\u0000)%\u0001"+ - "\u0000\u0000\u0000)\'\u0001\u0000\u0000\u0000*\f\u0001\u0000\u0000\u0000"+ - "+,\u0005=\u0000\u0000,1\u0005=\u0000\u0000-.\u0005<\u0000\u0000.1\u0005"+ - "=\u0000\u0000/1\u0005<\u0000\u00000+\u0001\u0000\u0000\u00000-\u0001\u0000"+ - "\u0000\u00000/\u0001\u0000\u0000\u00001\u000e\u0001\u0000\u0000\u0000"+ - "23\u0007\u0000\u0000\u00003\u0010\u0001\u0000\u0000\u000045\u0005t\u0000"+ - "\u000056\u0005r\u0000\u000067\u0005u\u0000\u00007>\u0005e\u0000\u0000"+ - "89\u0005f\u0000\u00009:\u0005a\u0000\u0000:;\u0005l\u0000\u0000;<\u0005"+ - "s\u0000\u0000<>\u0005e\u0000\u0000=4\u0001\u0000\u0000\u0000=8\u0001\u0000"+ - "\u0000\u0000>\u0012\u0001\u0000\u0000\u0000?C\u0007\u0001\u0000\u0000"+ - "@B\u0007\u0002\u0000\u0000A@\u0001\u0000\u0000\u0000BE\u0001\u0000\u0000"+ - "\u0000CA\u0001\u0000\u0000\u0000CD\u0001\u0000\u0000\u0000D\u0014\u0001"+ - "\u0000\u0000\u0000EC\u0001\u0000\u0000\u0000FH\u0005#\u0000\u0000GF\u0001"+ - "\u0000\u0000\u0000HK\u0001\u0000\u0000\u0000IG\u0001\u0000\u0000\u0000"+ - "IJ\u0001\u0000\u0000\u0000JL\u0001\u0000\u0000\u0000KI\u0001\u0000\u0000"+ - "\u0000LP\u0007\u0003\u0000\u0000MO\u0007\u0004\u0000\u0000NM\u0001\u0000"+ - "\u0000\u0000OR\u0001\u0000\u0000\u0000PN\u0001\u0000\u0000\u0000PQ\u0001"+ - "\u0000\u0000\u0000Q\u0016\u0001\u0000\u0000\u0000RP\u0001\u0000\u0000"+ - "\u0000SU\u0007\u0005\u0000\u0000TS\u0001\u0000\u0000\u0000UV\u0001\u0000"+ - "\u0000\u0000VT\u0001\u0000\u0000\u0000VW\u0001\u0000\u0000\u0000Wi\u0001"+ - "\u0000\u0000\u0000XZ\u0007\u0005\u0000\u0000YX\u0001\u0000\u0000\u0000"+ - "Z[\u0001\u0000\u0000\u0000[Y\u0001\u0000\u0000\u0000[\\\u0001\u0000\u0000"+ - "\u0000\\e\u0001\u0000\u0000\u0000]_\u0005_\u0000\u0000^`\u0007\u0005\u0000"+ - "\u0000_^\u0001\u0000\u0000\u0000`a\u0001\u0000\u0000\u0000a_\u0001\u0000"+ - "\u0000\u0000ab\u0001\u0000\u0000\u0000bd\u0001\u0000\u0000\u0000c]\u0001"+ - "\u0000\u0000\u0000dg\u0001\u0000\u0000\u0000ec\u0001\u0000\u0000\u0000"+ - "ef\u0001\u0000\u0000\u0000fi\u0001\u0000\u0000\u0000ge\u0001\u0000\u0000"+ - "\u0000hT\u0001\u0000\u0000\u0000hY\u0001\u0000\u0000\u0000i\u0018\u0001"+ - "\u0000\u0000\u0000jl\u0007\u0006\u0000\u0000kj\u0001\u0000\u0000\u0000"+ - "lm\u0001\u0000\u0000\u0000mk\u0001\u0000\u0000\u0000mn\u0001\u0000\u0000"+ - "\u0000no\u0001\u0000\u0000\u0000op\u0006\f\u0000\u0000p\u001a\u0001\u0000"+ - "\u0000\u0000\r\u0000)0=CIPV[aehm\u0001\u0000\u0001\u0000"; + "\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001"+ + "\u0006\u0001\u0006\u0001\u0006\u0003\u00064\b\u0006\u0001\u0007\u0001"+ + "\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b"+ + "\u0001\b\u0003\bA\b\b\u0001\t\u0001\t\u0005\tE\b\t\n\t\f\tH\t\t\u0001"+ + "\n\u0005\nK\b\n\n\n\f\nN\t\n\u0001\n\u0001\n\u0005\nR\b\n\n\n\f\nU\t\n"+ + "\u0001\u000b\u0004\u000bX\b\u000b\u000b\u000b\f\u000bY\u0001\u000b\u0004"+ + "\u000b]\b\u000b\u000b\u000b\f\u000b^\u0001\u000b\u0001\u000b\u0004\u000b"+ + "c\b\u000b\u000b\u000b\f\u000bd\u0005\u000bg\b\u000b\n\u000b\f\u000bj\t"+ + "\u000b\u0003\u000bl\b\u000b\u0001\f\u0004\fo\b\f\u000b\f\f\fp\u0001\f"+ + "\u0001\f\u0000\u0000\r\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004"+ + "\t\u0005\u000b\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017"+ + "\f\u0019\r\u0001\u0000\u0007\u0002\u0000*+//\u0001\u0000AZ\u0003\u0000"+ + "09AZaz\u0003\u0000AZ__az\u0005\u0000##09AZ__az\u0001\u000009\u0003\u0000"+ + "\t\n\r\r \u0082\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001"+ + "\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001"+ + "\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000"+ + "\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000"+ + "\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000"+ + "\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000"+ + "\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0001\u001b\u0001\u0000\u0000"+ + "\u0000\u0003\u001d\u0001\u0000\u0000\u0000\u0005\u001f\u0001\u0000\u0000"+ + "\u0000\u0007!\u0001\u0000\u0000\u0000\t#\u0001\u0000\u0000\u0000\u000b"+ + ")\u0001\u0000\u0000\u0000\r3\u0001\u0000\u0000\u0000\u000f5\u0001\u0000"+ + "\u0000\u0000\u0011@\u0001\u0000\u0000\u0000\u0013B\u0001\u0000\u0000\u0000"+ + "\u0015L\u0001\u0000\u0000\u0000\u0017k\u0001\u0000\u0000\u0000\u0019n"+ + "\u0001\u0000\u0000\u0000\u001b\u001c\u0005(\u0000\u0000\u001c\u0002\u0001"+ + "\u0000\u0000\u0000\u001d\u001e\u0005)\u0000\u0000\u001e\u0004\u0001\u0000"+ + "\u0000\u0000\u001f \u0005!\u0000\u0000 \u0006\u0001\u0000\u0000\u0000"+ + "!\"\u0005-\u0000\u0000\"\b\u0001\u0000\u0000\u0000#$\u0005.\u0000\u0000"+ + "$\n\u0001\u0000\u0000\u0000%&\u0005&\u0000\u0000&*\u0005&\u0000\u0000"+ + "\'(\u0005|\u0000\u0000(*\u0005|\u0000\u0000)%\u0001\u0000\u0000\u0000"+ + ")\'\u0001\u0000\u0000\u0000*\f\u0001\u0000\u0000\u0000+,\u0005=\u0000"+ + "\u0000,4\u0005=\u0000\u0000-.\u0005<\u0000\u0000.4\u0005=\u0000\u0000"+ + "/4\u0005<\u0000\u000001\u0005>\u0000\u000014\u0005=\u0000\u000024\u0005"+ + ">\u0000\u00003+\u0001\u0000\u0000\u00003-\u0001\u0000\u0000\u00003/\u0001"+ + "\u0000\u0000\u000030\u0001\u0000\u0000\u000032\u0001\u0000\u0000\u0000"+ + "4\u000e\u0001\u0000\u0000\u000056\u0007\u0000\u0000\u00006\u0010\u0001"+ + "\u0000\u0000\u000078\u0005t\u0000\u000089\u0005r\u0000\u00009:\u0005u"+ + "\u0000\u0000:A\u0005e\u0000\u0000;<\u0005f\u0000\u0000<=\u0005a\u0000"+ + "\u0000=>\u0005l\u0000\u0000>?\u0005s\u0000\u0000?A\u0005e\u0000\u0000"+ + "@7\u0001\u0000\u0000\u0000@;\u0001\u0000\u0000\u0000A\u0012\u0001\u0000"+ + "\u0000\u0000BF\u0007\u0001\u0000\u0000CE\u0007\u0002\u0000\u0000DC\u0001"+ + "\u0000\u0000\u0000EH\u0001\u0000\u0000\u0000FD\u0001\u0000\u0000\u0000"+ + "FG\u0001\u0000\u0000\u0000G\u0014\u0001\u0000\u0000\u0000HF\u0001\u0000"+ + "\u0000\u0000IK\u0005#\u0000\u0000JI\u0001\u0000\u0000\u0000KN\u0001\u0000"+ + "\u0000\u0000LJ\u0001\u0000\u0000\u0000LM\u0001\u0000\u0000\u0000MO\u0001"+ + "\u0000\u0000\u0000NL\u0001\u0000\u0000\u0000OS\u0007\u0003\u0000\u0000"+ + "PR\u0007\u0004\u0000\u0000QP\u0001\u0000\u0000\u0000RU\u0001\u0000\u0000"+ + "\u0000SQ\u0001\u0000\u0000\u0000ST\u0001\u0000\u0000\u0000T\u0016\u0001"+ + "\u0000\u0000\u0000US\u0001\u0000\u0000\u0000VX\u0007\u0005\u0000\u0000"+ + "WV\u0001\u0000\u0000\u0000XY\u0001\u0000\u0000\u0000YW\u0001\u0000\u0000"+ + "\u0000YZ\u0001\u0000\u0000\u0000Zl\u0001\u0000\u0000\u0000[]\u0007\u0005"+ + "\u0000\u0000\\[\u0001\u0000\u0000\u0000]^\u0001\u0000\u0000\u0000^\\\u0001"+ + "\u0000\u0000\u0000^_\u0001\u0000\u0000\u0000_h\u0001\u0000\u0000\u0000"+ + "`b\u0005_\u0000\u0000ac\u0007\u0005\u0000\u0000ba\u0001\u0000\u0000\u0000"+ + "cd\u0001\u0000\u0000\u0000db\u0001\u0000\u0000\u0000de\u0001\u0000\u0000"+ + "\u0000eg\u0001\u0000\u0000\u0000f`\u0001\u0000\u0000\u0000gj\u0001\u0000"+ + "\u0000\u0000hf\u0001\u0000\u0000\u0000hi\u0001\u0000\u0000\u0000il\u0001"+ + "\u0000\u0000\u0000jh\u0001\u0000\u0000\u0000kW\u0001\u0000\u0000\u0000"+ + "k\\\u0001\u0000\u0000\u0000l\u0018\u0001\u0000\u0000\u0000mo\u0007\u0006"+ + "\u0000\u0000nm\u0001\u0000\u0000\u0000op\u0001\u0000\u0000\u0000pn\u0001"+ + "\u0000\u0000\u0000pq\u0001\u0000\u0000\u0000qr\u0001\u0000\u0000\u0000"+ + "rs\u0006\f\u0000\u0000s\u001a\u0001\u0000\u0000\u0000\r\u0000)3@FLSY^"+ + "dhkp\u0001\u0000\u0001\u0000"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/latte/src/main/java/smt/RefinementsToZ3Translator.java b/latte/src/main/java/smt/RefinementsToZ3Translator.java index c9f4f46..2a41038 100644 --- a/latte/src/main/java/smt/RefinementsToZ3Translator.java +++ b/latte/src/main/java/smt/RefinementsToZ3Translator.java @@ -142,4 +142,36 @@ public Expr visitExpBool(RefinementsLanguageParser.ExpBoolContext ctx) { } } + @Override + public Expr visitPredNegate(RefinementsLanguageParser.PredNegateContext ctx) { + Expr inner = visit(ctx.pred()); + if (!(inner instanceof BoolExpr)) { + throw new IllegalArgumentException("Negation requires a boolean expression."); + } + return z3Context.mkNot((BoolExpr) inner); + } + + @Override + public Expr visitPredLogic(RefinementsLanguageParser.PredLogicContext ctx) { + Expr left = visit(ctx.pred(0)); + Expr right = visit(ctx.pred(1)); + String op = ctx.LOGOP().getText(); + + if (!(left instanceof BoolExpr) || !(right instanceof BoolExpr)) { + throw new IllegalArgumentException("Logical operations require boolean expressions."); + } + + BoolExpr leftBool = (BoolExpr) left; + BoolExpr rightBool = (BoolExpr) right; + + switch (op) { + case "&&": + return z3Context.mkAnd(leftBool, rightBool); + case "||": + return z3Context.mkOr(leftBool, rightBool); + default: + throw new UnsupportedOperationException("Unknown logical operator: " + op); + } + } + } \ No newline at end of file diff --git a/latte/src/main/java/smt/SimpleTranslatorTest.java b/latte/src/main/java/smt/SimpleTranslatorTest.java index d2bcabe..a5c5326 100644 --- a/latte/src/main/java/smt/SimpleTranslatorTest.java +++ b/latte/src/main/java/smt/SimpleTranslatorTest.java @@ -24,7 +24,7 @@ public static void main(String[] args) { testStep2_Variables(); testStep3_Arithmetic(); testStep4_Comparisons(); - // testStep5_LogicalOperations(); + testStep5_LogicalOperations(); // testStep6_Implications(); // testStep7_ComplexExpressions(); } From e464f41c9f43a77d7eaf2508e05dbaacedf9e293 Mon Sep 17 00:00:00 2001 From: Antonio Almeida Date: Thu, 26 Jun 2025 16:36:43 +0100 Subject: [PATCH 12/14] Added visitPredImplies to handle implications and updated the grammar to include implications (->) --- .../java/refinements/RefinementsLanguage.g4 | 1 + .../refinements/RefinementsLanguage.interp | 4 +- .../refinements/RefinementsLanguage.tokens | 22 +- .../RefinementsLanguageBaseListener.java | 12 + .../RefinementsLanguageBaseVisitor.java | 7 + .../RefinementsLanguageLexer.interp | 5 +- .../refinements/RefinementsLanguageLexer.java | 149 ++++----- .../RefinementsLanguageLexer.tokens | 22 +- .../RefinementsLanguageListener.java | 12 + .../RefinementsLanguageParser.java | 284 ++++++++++-------- .../RefinementsLanguageVisitor.java | 7 + .../java/smt/RefinementsToZ3Translator.java | 11 + .../main/java/smt/SimpleTranslatorTest.java | 4 +- 13 files changed, 322 insertions(+), 218 deletions(-) diff --git a/latte/src/main/java/refinements/RefinementsLanguage.g4 b/latte/src/main/java/refinements/RefinementsLanguage.g4 index 084e177..50d6fbb 100644 --- a/latte/src/main/java/refinements/RefinementsLanguage.g4 +++ b/latte/src/main/java/refinements/RefinementsLanguage.g4 @@ -8,6 +8,7 @@ pred: '(' pred ')' #predGroup | '!' pred #predNegate | pred LOGOP pred #predLogic + | pred '->' pred #predImplies | exp #predExp ; diff --git a/latte/src/main/java/refinements/RefinementsLanguage.interp b/latte/src/main/java/refinements/RefinementsLanguage.interp index c71c3f4..d37f1d5 100644 --- a/latte/src/main/java/refinements/RefinementsLanguage.interp +++ b/latte/src/main/java/refinements/RefinementsLanguage.interp @@ -3,6 +3,7 @@ null '(' ')' '!' +'->' '-' '.' null @@ -21,6 +22,7 @@ null null null null +null LOGOP BOOLOP ARITHOP @@ -40,4 +42,4 @@ literal atn: -[4, 1, 13, 87, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 1, 0, 1, 0, 3, 0, 15, 8, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 25, 8, 1, 1, 1, 1, 1, 1, 1, 5, 1, 30, 8, 1, 10, 1, 12, 1, 33, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 41, 8, 2, 1, 2, 1, 2, 1, 2, 5, 2, 46, 8, 2, 10, 2, 12, 2, 49, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 59, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 67, 8, 3, 10, 3, 12, 3, 70, 9, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 81, 8, 4, 1, 5, 1, 5, 3, 5, 85, 8, 5, 1, 5, 0, 3, 2, 4, 6, 6, 0, 2, 4, 6, 8, 10, 0, 0, 94, 0, 14, 1, 0, 0, 0, 2, 24, 1, 0, 0, 0, 4, 40, 1, 0, 0, 0, 6, 58, 1, 0, 0, 0, 8, 80, 1, 0, 0, 0, 10, 84, 1, 0, 0, 0, 12, 15, 3, 2, 1, 0, 13, 15, 1, 0, 0, 0, 14, 12, 1, 0, 0, 0, 14, 13, 1, 0, 0, 0, 15, 1, 1, 0, 0, 0, 16, 17, 6, 1, -1, 0, 17, 18, 5, 1, 0, 0, 18, 19, 3, 2, 1, 0, 19, 20, 5, 2, 0, 0, 20, 25, 1, 0, 0, 0, 21, 22, 5, 3, 0, 0, 22, 25, 3, 2, 1, 3, 23, 25, 3, 4, 2, 0, 24, 16, 1, 0, 0, 0, 24, 21, 1, 0, 0, 0, 24, 23, 1, 0, 0, 0, 25, 31, 1, 0, 0, 0, 26, 27, 10, 2, 0, 0, 27, 28, 5, 6, 0, 0, 28, 30, 3, 2, 1, 3, 29, 26, 1, 0, 0, 0, 30, 33, 1, 0, 0, 0, 31, 29, 1, 0, 0, 0, 31, 32, 1, 0, 0, 0, 32, 3, 1, 0, 0, 0, 33, 31, 1, 0, 0, 0, 34, 35, 6, 2, -1, 0, 35, 36, 5, 1, 0, 0, 36, 37, 3, 4, 2, 0, 37, 38, 5, 2, 0, 0, 38, 41, 1, 0, 0, 0, 39, 41, 3, 6, 3, 0, 40, 34, 1, 0, 0, 0, 40, 39, 1, 0, 0, 0, 41, 47, 1, 0, 0, 0, 42, 43, 10, 2, 0, 0, 43, 44, 5, 7, 0, 0, 44, 46, 3, 4, 2, 3, 45, 42, 1, 0, 0, 0, 46, 49, 1, 0, 0, 0, 47, 45, 1, 0, 0, 0, 47, 48, 1, 0, 0, 0, 48, 5, 1, 0, 0, 0, 49, 47, 1, 0, 0, 0, 50, 51, 6, 3, -1, 0, 51, 59, 3, 8, 4, 0, 52, 53, 5, 3, 0, 0, 53, 59, 3, 6, 3, 2, 54, 55, 5, 1, 0, 0, 55, 56, 3, 6, 3, 0, 56, 57, 5, 2, 0, 0, 57, 59, 1, 0, 0, 0, 58, 50, 1, 0, 0, 0, 58, 52, 1, 0, 0, 0, 58, 54, 1, 0, 0, 0, 59, 68, 1, 0, 0, 0, 60, 61, 10, 4, 0, 0, 61, 62, 5, 8, 0, 0, 62, 67, 3, 6, 3, 5, 63, 64, 10, 3, 0, 0, 64, 65, 5, 4, 0, 0, 65, 67, 3, 6, 3, 4, 66, 60, 1, 0, 0, 0, 66, 63, 1, 0, 0, 0, 67, 70, 1, 0, 0, 0, 68, 66, 1, 0, 0, 0, 68, 69, 1, 0, 0, 0, 69, 7, 1, 0, 0, 0, 70, 68, 1, 0, 0, 0, 71, 72, 5, 1, 0, 0, 72, 73, 3, 8, 4, 0, 73, 74, 5, 2, 0, 0, 74, 81, 1, 0, 0, 0, 75, 81, 3, 10, 5, 0, 76, 81, 5, 11, 0, 0, 77, 78, 5, 11, 0, 0, 78, 79, 5, 5, 0, 0, 79, 81, 5, 11, 0, 0, 80, 71, 1, 0, 0, 0, 80, 75, 1, 0, 0, 0, 80, 76, 1, 0, 0, 0, 80, 77, 1, 0, 0, 0, 81, 9, 1, 0, 0, 0, 82, 85, 5, 9, 0, 0, 83, 85, 5, 12, 0, 0, 84, 82, 1, 0, 0, 0, 84, 83, 1, 0, 0, 0, 85, 11, 1, 0, 0, 0, 10, 14, 24, 31, 40, 47, 58, 66, 68, 80, 84] \ No newline at end of file +[4, 1, 14, 90, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 1, 0, 1, 0, 3, 0, 15, 8, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 25, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 33, 8, 1, 10, 1, 12, 1, 36, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 44, 8, 2, 1, 2, 1, 2, 1, 2, 5, 2, 49, 8, 2, 10, 2, 12, 2, 52, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 62, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 70, 8, 3, 10, 3, 12, 3, 73, 9, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 84, 8, 4, 1, 5, 1, 5, 3, 5, 88, 8, 5, 1, 5, 0, 3, 2, 4, 6, 6, 0, 2, 4, 6, 8, 10, 0, 0, 98, 0, 14, 1, 0, 0, 0, 2, 24, 1, 0, 0, 0, 4, 43, 1, 0, 0, 0, 6, 61, 1, 0, 0, 0, 8, 83, 1, 0, 0, 0, 10, 87, 1, 0, 0, 0, 12, 15, 3, 2, 1, 0, 13, 15, 1, 0, 0, 0, 14, 12, 1, 0, 0, 0, 14, 13, 1, 0, 0, 0, 15, 1, 1, 0, 0, 0, 16, 17, 6, 1, -1, 0, 17, 18, 5, 1, 0, 0, 18, 19, 3, 2, 1, 0, 19, 20, 5, 2, 0, 0, 20, 25, 1, 0, 0, 0, 21, 22, 5, 3, 0, 0, 22, 25, 3, 2, 1, 4, 23, 25, 3, 4, 2, 0, 24, 16, 1, 0, 0, 0, 24, 21, 1, 0, 0, 0, 24, 23, 1, 0, 0, 0, 25, 34, 1, 0, 0, 0, 26, 27, 10, 3, 0, 0, 27, 28, 5, 7, 0, 0, 28, 33, 3, 2, 1, 4, 29, 30, 10, 2, 0, 0, 30, 31, 5, 4, 0, 0, 31, 33, 3, 2, 1, 3, 32, 26, 1, 0, 0, 0, 32, 29, 1, 0, 0, 0, 33, 36, 1, 0, 0, 0, 34, 32, 1, 0, 0, 0, 34, 35, 1, 0, 0, 0, 35, 3, 1, 0, 0, 0, 36, 34, 1, 0, 0, 0, 37, 38, 6, 2, -1, 0, 38, 39, 5, 1, 0, 0, 39, 40, 3, 4, 2, 0, 40, 41, 5, 2, 0, 0, 41, 44, 1, 0, 0, 0, 42, 44, 3, 6, 3, 0, 43, 37, 1, 0, 0, 0, 43, 42, 1, 0, 0, 0, 44, 50, 1, 0, 0, 0, 45, 46, 10, 2, 0, 0, 46, 47, 5, 8, 0, 0, 47, 49, 3, 4, 2, 3, 48, 45, 1, 0, 0, 0, 49, 52, 1, 0, 0, 0, 50, 48, 1, 0, 0, 0, 50, 51, 1, 0, 0, 0, 51, 5, 1, 0, 0, 0, 52, 50, 1, 0, 0, 0, 53, 54, 6, 3, -1, 0, 54, 62, 3, 8, 4, 0, 55, 56, 5, 3, 0, 0, 56, 62, 3, 6, 3, 2, 57, 58, 5, 1, 0, 0, 58, 59, 3, 6, 3, 0, 59, 60, 5, 2, 0, 0, 60, 62, 1, 0, 0, 0, 61, 53, 1, 0, 0, 0, 61, 55, 1, 0, 0, 0, 61, 57, 1, 0, 0, 0, 62, 71, 1, 0, 0, 0, 63, 64, 10, 4, 0, 0, 64, 65, 5, 9, 0, 0, 65, 70, 3, 6, 3, 5, 66, 67, 10, 3, 0, 0, 67, 68, 5, 5, 0, 0, 68, 70, 3, 6, 3, 4, 69, 63, 1, 0, 0, 0, 69, 66, 1, 0, 0, 0, 70, 73, 1, 0, 0, 0, 71, 69, 1, 0, 0, 0, 71, 72, 1, 0, 0, 0, 72, 7, 1, 0, 0, 0, 73, 71, 1, 0, 0, 0, 74, 75, 5, 1, 0, 0, 75, 76, 3, 8, 4, 0, 76, 77, 5, 2, 0, 0, 77, 84, 1, 0, 0, 0, 78, 84, 3, 10, 5, 0, 79, 84, 5, 12, 0, 0, 80, 81, 5, 12, 0, 0, 81, 82, 5, 6, 0, 0, 82, 84, 5, 12, 0, 0, 83, 74, 1, 0, 0, 0, 83, 78, 1, 0, 0, 0, 83, 79, 1, 0, 0, 0, 83, 80, 1, 0, 0, 0, 84, 9, 1, 0, 0, 0, 85, 88, 5, 10, 0, 0, 86, 88, 5, 13, 0, 0, 87, 85, 1, 0, 0, 0, 87, 86, 1, 0, 0, 0, 88, 11, 1, 0, 0, 0, 11, 14, 24, 32, 34, 43, 50, 61, 69, 71, 83, 87] \ No newline at end of file diff --git a/latte/src/main/java/refinements/RefinementsLanguage.tokens b/latte/src/main/java/refinements/RefinementsLanguage.tokens index 91471e1..fa92ca5 100644 --- a/latte/src/main/java/refinements/RefinementsLanguage.tokens +++ b/latte/src/main/java/refinements/RefinementsLanguage.tokens @@ -3,16 +3,18 @@ T__1=2 T__2=3 T__3=4 T__4=5 -LOGOP=6 -BOOLOP=7 -ARITHOP=8 -BOOL=9 -ID_UPPER=10 -ID=11 -INT=12 -WS=13 +T__5=6 +LOGOP=7 +BOOLOP=8 +ARITHOP=9 +BOOL=10 +ID_UPPER=11 +ID=12 +INT=13 +WS=14 '('=1 ')'=2 '!'=3 -'-'=4 -'.'=5 +'->'=4 +'-'=5 +'.'=6 diff --git a/latte/src/main/java/refinements/RefinementsLanguageBaseListener.java b/latte/src/main/java/refinements/RefinementsLanguageBaseListener.java index f118641..cdd4627 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageBaseListener.java +++ b/latte/src/main/java/refinements/RefinementsLanguageBaseListener.java @@ -60,6 +60,18 @@ public class RefinementsLanguageBaseListener implements RefinementsLanguageListe *

The default implementation does nothing.

*/ @Override public void exitPredExp(RefinementsLanguageParser.PredExpContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPredImplies(RefinementsLanguageParser.PredImpliesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPredImplies(RefinementsLanguageParser.PredImpliesContext ctx) { } /** * {@inheritDoc} * diff --git a/latte/src/main/java/refinements/RefinementsLanguageBaseVisitor.java b/latte/src/main/java/refinements/RefinementsLanguageBaseVisitor.java index b610982..11513fe 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageBaseVisitor.java +++ b/latte/src/main/java/refinements/RefinementsLanguageBaseVisitor.java @@ -40,6 +40,13 @@ public class RefinementsLanguageBaseVisitor extends AbstractParseTreeVisitor< * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitPredExp(RefinementsLanguageParser.PredExpContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPredImplies(RefinementsLanguageParser.PredImpliesContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * diff --git a/latte/src/main/java/refinements/RefinementsLanguageLexer.interp b/latte/src/main/java/refinements/RefinementsLanguageLexer.interp index b262e22..13eda4e 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageLexer.interp +++ b/latte/src/main/java/refinements/RefinementsLanguageLexer.interp @@ -3,6 +3,7 @@ null '(' ')' '!' +'->' '-' '.' null @@ -21,6 +22,7 @@ null null null null +null LOGOP BOOLOP ARITHOP @@ -36,6 +38,7 @@ T__1 T__2 T__3 T__4 +T__5 LOGOP BOOLOP ARITHOP @@ -53,4 +56,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 13, 116, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 42, 8, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 52, 8, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 65, 8, 8, 1, 9, 1, 9, 5, 9, 69, 8, 9, 10, 9, 12, 9, 72, 9, 9, 1, 10, 5, 10, 75, 8, 10, 10, 10, 12, 10, 78, 9, 10, 1, 10, 1, 10, 5, 10, 82, 8, 10, 10, 10, 12, 10, 85, 9, 10, 1, 11, 4, 11, 88, 8, 11, 11, 11, 12, 11, 89, 1, 11, 4, 11, 93, 8, 11, 11, 11, 12, 11, 94, 1, 11, 1, 11, 4, 11, 99, 8, 11, 11, 11, 12, 11, 100, 5, 11, 103, 8, 11, 10, 11, 12, 11, 106, 9, 11, 3, 11, 108, 8, 11, 1, 12, 4, 12, 111, 8, 12, 11, 12, 12, 12, 112, 1, 12, 1, 12, 0, 0, 13, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 1, 0, 7, 2, 0, 42, 43, 47, 47, 1, 0, 65, 90, 3, 0, 48, 57, 65, 90, 97, 122, 3, 0, 65, 90, 95, 95, 97, 122, 5, 0, 35, 35, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 3, 0, 9, 10, 13, 13, 32, 32, 130, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 1, 27, 1, 0, 0, 0, 3, 29, 1, 0, 0, 0, 5, 31, 1, 0, 0, 0, 7, 33, 1, 0, 0, 0, 9, 35, 1, 0, 0, 0, 11, 41, 1, 0, 0, 0, 13, 51, 1, 0, 0, 0, 15, 53, 1, 0, 0, 0, 17, 64, 1, 0, 0, 0, 19, 66, 1, 0, 0, 0, 21, 76, 1, 0, 0, 0, 23, 107, 1, 0, 0, 0, 25, 110, 1, 0, 0, 0, 27, 28, 5, 40, 0, 0, 28, 2, 1, 0, 0, 0, 29, 30, 5, 41, 0, 0, 30, 4, 1, 0, 0, 0, 31, 32, 5, 33, 0, 0, 32, 6, 1, 0, 0, 0, 33, 34, 5, 45, 0, 0, 34, 8, 1, 0, 0, 0, 35, 36, 5, 46, 0, 0, 36, 10, 1, 0, 0, 0, 37, 38, 5, 38, 0, 0, 38, 42, 5, 38, 0, 0, 39, 40, 5, 124, 0, 0, 40, 42, 5, 124, 0, 0, 41, 37, 1, 0, 0, 0, 41, 39, 1, 0, 0, 0, 42, 12, 1, 0, 0, 0, 43, 44, 5, 61, 0, 0, 44, 52, 5, 61, 0, 0, 45, 46, 5, 60, 0, 0, 46, 52, 5, 61, 0, 0, 47, 52, 5, 60, 0, 0, 48, 49, 5, 62, 0, 0, 49, 52, 5, 61, 0, 0, 50, 52, 5, 62, 0, 0, 51, 43, 1, 0, 0, 0, 51, 45, 1, 0, 0, 0, 51, 47, 1, 0, 0, 0, 51, 48, 1, 0, 0, 0, 51, 50, 1, 0, 0, 0, 52, 14, 1, 0, 0, 0, 53, 54, 7, 0, 0, 0, 54, 16, 1, 0, 0, 0, 55, 56, 5, 116, 0, 0, 56, 57, 5, 114, 0, 0, 57, 58, 5, 117, 0, 0, 58, 65, 5, 101, 0, 0, 59, 60, 5, 102, 0, 0, 60, 61, 5, 97, 0, 0, 61, 62, 5, 108, 0, 0, 62, 63, 5, 115, 0, 0, 63, 65, 5, 101, 0, 0, 64, 55, 1, 0, 0, 0, 64, 59, 1, 0, 0, 0, 65, 18, 1, 0, 0, 0, 66, 70, 7, 1, 0, 0, 67, 69, 7, 2, 0, 0, 68, 67, 1, 0, 0, 0, 69, 72, 1, 0, 0, 0, 70, 68, 1, 0, 0, 0, 70, 71, 1, 0, 0, 0, 71, 20, 1, 0, 0, 0, 72, 70, 1, 0, 0, 0, 73, 75, 5, 35, 0, 0, 74, 73, 1, 0, 0, 0, 75, 78, 1, 0, 0, 0, 76, 74, 1, 0, 0, 0, 76, 77, 1, 0, 0, 0, 77, 79, 1, 0, 0, 0, 78, 76, 1, 0, 0, 0, 79, 83, 7, 3, 0, 0, 80, 82, 7, 4, 0, 0, 81, 80, 1, 0, 0, 0, 82, 85, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 22, 1, 0, 0, 0, 85, 83, 1, 0, 0, 0, 86, 88, 7, 5, 0, 0, 87, 86, 1, 0, 0, 0, 88, 89, 1, 0, 0, 0, 89, 87, 1, 0, 0, 0, 89, 90, 1, 0, 0, 0, 90, 108, 1, 0, 0, 0, 91, 93, 7, 5, 0, 0, 92, 91, 1, 0, 0, 0, 93, 94, 1, 0, 0, 0, 94, 92, 1, 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 104, 1, 0, 0, 0, 96, 98, 5, 95, 0, 0, 97, 99, 7, 5, 0, 0, 98, 97, 1, 0, 0, 0, 99, 100, 1, 0, 0, 0, 100, 98, 1, 0, 0, 0, 100, 101, 1, 0, 0, 0, 101, 103, 1, 0, 0, 0, 102, 96, 1, 0, 0, 0, 103, 106, 1, 0, 0, 0, 104, 102, 1, 0, 0, 0, 104, 105, 1, 0, 0, 0, 105, 108, 1, 0, 0, 0, 106, 104, 1, 0, 0, 0, 107, 87, 1, 0, 0, 0, 107, 92, 1, 0, 0, 0, 108, 24, 1, 0, 0, 0, 109, 111, 7, 6, 0, 0, 110, 109, 1, 0, 0, 0, 111, 112, 1, 0, 0, 0, 112, 110, 1, 0, 0, 0, 112, 113, 1, 0, 0, 0, 113, 114, 1, 0, 0, 0, 114, 115, 6, 12, 0, 0, 115, 26, 1, 0, 0, 0, 13, 0, 41, 51, 64, 70, 76, 83, 89, 94, 100, 104, 107, 112, 1, 0, 1, 0] \ No newline at end of file +[4, 0, 14, 121, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 47, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 57, 8, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 70, 8, 9, 1, 10, 1, 10, 5, 10, 74, 8, 10, 10, 10, 12, 10, 77, 9, 10, 1, 11, 5, 11, 80, 8, 11, 10, 11, 12, 11, 83, 9, 11, 1, 11, 1, 11, 5, 11, 87, 8, 11, 10, 11, 12, 11, 90, 9, 11, 1, 12, 4, 12, 93, 8, 12, 11, 12, 12, 12, 94, 1, 12, 4, 12, 98, 8, 12, 11, 12, 12, 12, 99, 1, 12, 1, 12, 4, 12, 104, 8, 12, 11, 12, 12, 12, 105, 5, 12, 108, 8, 12, 10, 12, 12, 12, 111, 9, 12, 3, 12, 113, 8, 12, 1, 13, 4, 13, 116, 8, 13, 11, 13, 12, 13, 117, 1, 13, 1, 13, 0, 0, 14, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 1, 0, 7, 2, 0, 42, 43, 47, 47, 1, 0, 65, 90, 3, 0, 48, 57, 65, 90, 97, 122, 3, 0, 65, 90, 95, 95, 97, 122, 5, 0, 35, 35, 48, 57, 65, 90, 95, 95, 97, 122, 1, 0, 48, 57, 3, 0, 9, 10, 13, 13, 32, 32, 135, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 1, 29, 1, 0, 0, 0, 3, 31, 1, 0, 0, 0, 5, 33, 1, 0, 0, 0, 7, 35, 1, 0, 0, 0, 9, 38, 1, 0, 0, 0, 11, 40, 1, 0, 0, 0, 13, 46, 1, 0, 0, 0, 15, 56, 1, 0, 0, 0, 17, 58, 1, 0, 0, 0, 19, 69, 1, 0, 0, 0, 21, 71, 1, 0, 0, 0, 23, 81, 1, 0, 0, 0, 25, 112, 1, 0, 0, 0, 27, 115, 1, 0, 0, 0, 29, 30, 5, 40, 0, 0, 30, 2, 1, 0, 0, 0, 31, 32, 5, 41, 0, 0, 32, 4, 1, 0, 0, 0, 33, 34, 5, 33, 0, 0, 34, 6, 1, 0, 0, 0, 35, 36, 5, 45, 0, 0, 36, 37, 5, 62, 0, 0, 37, 8, 1, 0, 0, 0, 38, 39, 5, 45, 0, 0, 39, 10, 1, 0, 0, 0, 40, 41, 5, 46, 0, 0, 41, 12, 1, 0, 0, 0, 42, 43, 5, 38, 0, 0, 43, 47, 5, 38, 0, 0, 44, 45, 5, 124, 0, 0, 45, 47, 5, 124, 0, 0, 46, 42, 1, 0, 0, 0, 46, 44, 1, 0, 0, 0, 47, 14, 1, 0, 0, 0, 48, 49, 5, 61, 0, 0, 49, 57, 5, 61, 0, 0, 50, 51, 5, 60, 0, 0, 51, 57, 5, 61, 0, 0, 52, 57, 5, 60, 0, 0, 53, 54, 5, 62, 0, 0, 54, 57, 5, 61, 0, 0, 55, 57, 5, 62, 0, 0, 56, 48, 1, 0, 0, 0, 56, 50, 1, 0, 0, 0, 56, 52, 1, 0, 0, 0, 56, 53, 1, 0, 0, 0, 56, 55, 1, 0, 0, 0, 57, 16, 1, 0, 0, 0, 58, 59, 7, 0, 0, 0, 59, 18, 1, 0, 0, 0, 60, 61, 5, 116, 0, 0, 61, 62, 5, 114, 0, 0, 62, 63, 5, 117, 0, 0, 63, 70, 5, 101, 0, 0, 64, 65, 5, 102, 0, 0, 65, 66, 5, 97, 0, 0, 66, 67, 5, 108, 0, 0, 67, 68, 5, 115, 0, 0, 68, 70, 5, 101, 0, 0, 69, 60, 1, 0, 0, 0, 69, 64, 1, 0, 0, 0, 70, 20, 1, 0, 0, 0, 71, 75, 7, 1, 0, 0, 72, 74, 7, 2, 0, 0, 73, 72, 1, 0, 0, 0, 74, 77, 1, 0, 0, 0, 75, 73, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 22, 1, 0, 0, 0, 77, 75, 1, 0, 0, 0, 78, 80, 5, 35, 0, 0, 79, 78, 1, 0, 0, 0, 80, 83, 1, 0, 0, 0, 81, 79, 1, 0, 0, 0, 81, 82, 1, 0, 0, 0, 82, 84, 1, 0, 0, 0, 83, 81, 1, 0, 0, 0, 84, 88, 7, 3, 0, 0, 85, 87, 7, 4, 0, 0, 86, 85, 1, 0, 0, 0, 87, 90, 1, 0, 0, 0, 88, 86, 1, 0, 0, 0, 88, 89, 1, 0, 0, 0, 89, 24, 1, 0, 0, 0, 90, 88, 1, 0, 0, 0, 91, 93, 7, 5, 0, 0, 92, 91, 1, 0, 0, 0, 93, 94, 1, 0, 0, 0, 94, 92, 1, 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 113, 1, 0, 0, 0, 96, 98, 7, 5, 0, 0, 97, 96, 1, 0, 0, 0, 98, 99, 1, 0, 0, 0, 99, 97, 1, 0, 0, 0, 99, 100, 1, 0, 0, 0, 100, 109, 1, 0, 0, 0, 101, 103, 5, 95, 0, 0, 102, 104, 7, 5, 0, 0, 103, 102, 1, 0, 0, 0, 104, 105, 1, 0, 0, 0, 105, 103, 1, 0, 0, 0, 105, 106, 1, 0, 0, 0, 106, 108, 1, 0, 0, 0, 107, 101, 1, 0, 0, 0, 108, 111, 1, 0, 0, 0, 109, 107, 1, 0, 0, 0, 109, 110, 1, 0, 0, 0, 110, 113, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 112, 92, 1, 0, 0, 0, 112, 97, 1, 0, 0, 0, 113, 26, 1, 0, 0, 0, 114, 116, 7, 6, 0, 0, 115, 114, 1, 0, 0, 0, 116, 117, 1, 0, 0, 0, 117, 115, 1, 0, 0, 0, 117, 118, 1, 0, 0, 0, 118, 119, 1, 0, 0, 0, 119, 120, 6, 13, 0, 0, 120, 28, 1, 0, 0, 0, 13, 0, 46, 56, 69, 75, 81, 88, 94, 99, 105, 109, 112, 117, 1, 0, 1, 0] \ No newline at end of file diff --git a/latte/src/main/java/refinements/RefinementsLanguageLexer.java b/latte/src/main/java/refinements/RefinementsLanguageLexer.java index 6949c5b..fb8f21e 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageLexer.java +++ b/latte/src/main/java/refinements/RefinementsLanguageLexer.java @@ -17,8 +17,8 @@ public class RefinementsLanguageLexer extends Lexer { protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache(); public static final int - T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, LOGOP=6, BOOLOP=7, ARITHOP=8, - BOOL=9, ID_UPPER=10, ID=11, INT=12, WS=13; + T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, LOGOP=7, BOOLOP=8, ARITHOP=9, + BOOL=10, ID_UPPER=11, ID=12, INT=13, WS=14; public static String[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -29,7 +29,7 @@ public class RefinementsLanguageLexer extends Lexer { private static String[] makeRuleNames() { return new String[] { - "T__0", "T__1", "T__2", "T__3", "T__4", "LOGOP", "BOOLOP", "ARITHOP", + "T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "LOGOP", "BOOLOP", "ARITHOP", "BOOL", "ID_UPPER", "ID", "INT", "WS" }; } @@ -37,14 +37,14 @@ private static String[] makeRuleNames() { private static String[] makeLiteralNames() { return new String[] { - null, "'('", "')'", "'!'", "'-'", "'.'" + null, "'('", "')'", "'!'", "'->'", "'-'", "'.'" }; } private static final String[] _LITERAL_NAMES = makeLiteralNames(); private static String[] makeSymbolicNames() { return new String[] { - null, null, null, null, null, null, "LOGOP", "BOOLOP", "ARITHOP", "BOOL", - "ID_UPPER", "ID", "INT", "WS" + null, null, null, null, null, null, null, "LOGOP", "BOOLOP", "ARITHOP", + "BOOL", "ID_UPPER", "ID", "INT", "WS" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -106,77 +106,78 @@ public RefinementsLanguageLexer(CharStream input) { public ATN getATN() { return _ATN; } public static final String _serializedATN = - "\u0004\u0000\rt\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ + "\u0004\u0000\u000ey\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001"+ "\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004"+ "\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007"+ "\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002\u000b"+ - "\u0007\u000b\u0002\f\u0007\f\u0001\u0000\u0001\u0000\u0001\u0001\u0001"+ - "\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001"+ - "\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0001\u0005\u0003\u0005*\b"+ - "\u0005\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001\u0006\u0001"+ - "\u0006\u0001\u0006\u0001\u0006\u0003\u00064\b\u0006\u0001\u0007\u0001"+ - "\u0007\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b\u0001\b"+ - "\u0001\b\u0003\bA\b\b\u0001\t\u0001\t\u0005\tE\b\t\n\t\f\tH\t\t\u0001"+ - "\n\u0005\nK\b\n\n\n\f\nN\t\n\u0001\n\u0001\n\u0005\nR\b\n\n\n\f\nU\t\n"+ - "\u0001\u000b\u0004\u000bX\b\u000b\u000b\u000b\f\u000bY\u0001\u000b\u0004"+ - "\u000b]\b\u000b\u000b\u000b\f\u000b^\u0001\u000b\u0001\u000b\u0004\u000b"+ - "c\b\u000b\u000b\u000b\f\u000bd\u0005\u000bg\b\u000b\n\u000b\f\u000bj\t"+ - "\u000b\u0003\u000bl\b\u000b\u0001\f\u0004\fo\b\f\u000b\f\f\fp\u0001\f"+ - "\u0001\f\u0000\u0000\r\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004"+ - "\t\u0005\u000b\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017"+ - "\f\u0019\r\u0001\u0000\u0007\u0002\u0000*+//\u0001\u0000AZ\u0003\u0000"+ - "09AZaz\u0003\u0000AZ__az\u0005\u0000##09AZ__az\u0001\u000009\u0003\u0000"+ - "\t\n\r\r \u0082\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003\u0001"+ - "\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007\u0001"+ - "\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001\u0000"+ - "\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000\u0000"+ - "\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000\u0000"+ - "\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000\u0000"+ - "\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0001\u001b\u0001\u0000\u0000"+ - "\u0000\u0003\u001d\u0001\u0000\u0000\u0000\u0005\u001f\u0001\u0000\u0000"+ - "\u0000\u0007!\u0001\u0000\u0000\u0000\t#\u0001\u0000\u0000\u0000\u000b"+ - ")\u0001\u0000\u0000\u0000\r3\u0001\u0000\u0000\u0000\u000f5\u0001\u0000"+ - "\u0000\u0000\u0011@\u0001\u0000\u0000\u0000\u0013B\u0001\u0000\u0000\u0000"+ - "\u0015L\u0001\u0000\u0000\u0000\u0017k\u0001\u0000\u0000\u0000\u0019n"+ - "\u0001\u0000\u0000\u0000\u001b\u001c\u0005(\u0000\u0000\u001c\u0002\u0001"+ - "\u0000\u0000\u0000\u001d\u001e\u0005)\u0000\u0000\u001e\u0004\u0001\u0000"+ - "\u0000\u0000\u001f \u0005!\u0000\u0000 \u0006\u0001\u0000\u0000\u0000"+ - "!\"\u0005-\u0000\u0000\"\b\u0001\u0000\u0000\u0000#$\u0005.\u0000\u0000"+ - "$\n\u0001\u0000\u0000\u0000%&\u0005&\u0000\u0000&*\u0005&\u0000\u0000"+ - "\'(\u0005|\u0000\u0000(*\u0005|\u0000\u0000)%\u0001\u0000\u0000\u0000"+ - ")\'\u0001\u0000\u0000\u0000*\f\u0001\u0000\u0000\u0000+,\u0005=\u0000"+ - "\u0000,4\u0005=\u0000\u0000-.\u0005<\u0000\u0000.4\u0005=\u0000\u0000"+ - "/4\u0005<\u0000\u000001\u0005>\u0000\u000014\u0005=\u0000\u000024\u0005"+ - ">\u0000\u00003+\u0001\u0000\u0000\u00003-\u0001\u0000\u0000\u00003/\u0001"+ - "\u0000\u0000\u000030\u0001\u0000\u0000\u000032\u0001\u0000\u0000\u0000"+ - "4\u000e\u0001\u0000\u0000\u000056\u0007\u0000\u0000\u00006\u0010\u0001"+ - "\u0000\u0000\u000078\u0005t\u0000\u000089\u0005r\u0000\u00009:\u0005u"+ - "\u0000\u0000:A\u0005e\u0000\u0000;<\u0005f\u0000\u0000<=\u0005a\u0000"+ - "\u0000=>\u0005l\u0000\u0000>?\u0005s\u0000\u0000?A\u0005e\u0000\u0000"+ - "@7\u0001\u0000\u0000\u0000@;\u0001\u0000\u0000\u0000A\u0012\u0001\u0000"+ - "\u0000\u0000BF\u0007\u0001\u0000\u0000CE\u0007\u0002\u0000\u0000DC\u0001"+ - "\u0000\u0000\u0000EH\u0001\u0000\u0000\u0000FD\u0001\u0000\u0000\u0000"+ - "FG\u0001\u0000\u0000\u0000G\u0014\u0001\u0000\u0000\u0000HF\u0001\u0000"+ - "\u0000\u0000IK\u0005#\u0000\u0000JI\u0001\u0000\u0000\u0000KN\u0001\u0000"+ - "\u0000\u0000LJ\u0001\u0000\u0000\u0000LM\u0001\u0000\u0000\u0000MO\u0001"+ - "\u0000\u0000\u0000NL\u0001\u0000\u0000\u0000OS\u0007\u0003\u0000\u0000"+ - "PR\u0007\u0004\u0000\u0000QP\u0001\u0000\u0000\u0000RU\u0001\u0000\u0000"+ - "\u0000SQ\u0001\u0000\u0000\u0000ST\u0001\u0000\u0000\u0000T\u0016\u0001"+ - "\u0000\u0000\u0000US\u0001\u0000\u0000\u0000VX\u0007\u0005\u0000\u0000"+ - "WV\u0001\u0000\u0000\u0000XY\u0001\u0000\u0000\u0000YW\u0001\u0000\u0000"+ - "\u0000YZ\u0001\u0000\u0000\u0000Zl\u0001\u0000\u0000\u0000[]\u0007\u0005"+ - "\u0000\u0000\\[\u0001\u0000\u0000\u0000]^\u0001\u0000\u0000\u0000^\\\u0001"+ - "\u0000\u0000\u0000^_\u0001\u0000\u0000\u0000_h\u0001\u0000\u0000\u0000"+ - "`b\u0005_\u0000\u0000ac\u0007\u0005\u0000\u0000ba\u0001\u0000\u0000\u0000"+ - "cd\u0001\u0000\u0000\u0000db\u0001\u0000\u0000\u0000de\u0001\u0000\u0000"+ - "\u0000eg\u0001\u0000\u0000\u0000f`\u0001\u0000\u0000\u0000gj\u0001\u0000"+ - "\u0000\u0000hf\u0001\u0000\u0000\u0000hi\u0001\u0000\u0000\u0000il\u0001"+ - "\u0000\u0000\u0000jh\u0001\u0000\u0000\u0000kW\u0001\u0000\u0000\u0000"+ - "k\\\u0001\u0000\u0000\u0000l\u0018\u0001\u0000\u0000\u0000mo\u0007\u0006"+ - "\u0000\u0000nm\u0001\u0000\u0000\u0000op\u0001\u0000\u0000\u0000pn\u0001"+ - "\u0000\u0000\u0000pq\u0001\u0000\u0000\u0000qr\u0001\u0000\u0000\u0000"+ - "rs\u0006\f\u0000\u0000s\u001a\u0001\u0000\u0000\u0000\r\u0000)3@FLSY^"+ - "dhkp\u0001\u0000\u0001\u0000"; + "\u0007\u000b\u0002\f\u0007\f\u0002\r\u0007\r\u0001\u0000\u0001\u0000\u0001"+ + "\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001"+ + "\u0003\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0006\u0001"+ + "\u0006\u0001\u0006\u0001\u0006\u0003\u0006/\b\u0006\u0001\u0007\u0001"+ + "\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001\u0007\u0001"+ + "\u0007\u0003\u00079\b\u0007\u0001\b\u0001\b\u0001\t\u0001\t\u0001\t\u0001"+ + "\t\u0001\t\u0001\t\u0001\t\u0001\t\u0001\t\u0003\tF\b\t\u0001\n\u0001"+ + "\n\u0005\nJ\b\n\n\n\f\nM\t\n\u0001\u000b\u0005\u000bP\b\u000b\n\u000b"+ + "\f\u000bS\t\u000b\u0001\u000b\u0001\u000b\u0005\u000bW\b\u000b\n\u000b"+ + "\f\u000bZ\t\u000b\u0001\f\u0004\f]\b\f\u000b\f\f\f^\u0001\f\u0004\fb\b"+ + "\f\u000b\f\f\fc\u0001\f\u0001\f\u0004\fh\b\f\u000b\f\f\fi\u0005\fl\b\f"+ + "\n\f\f\fo\t\f\u0003\fq\b\f\u0001\r\u0004\rt\b\r\u000b\r\f\ru\u0001\r\u0001"+ + "\r\u0000\u0000\u000e\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t"+ + "\u0005\u000b\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f"+ + "\u0019\r\u001b\u000e\u0001\u0000\u0007\u0002\u0000*+//\u0001\u0000AZ\u0003"+ + "\u000009AZaz\u0003\u0000AZ__az\u0005\u0000##09AZ__az\u0001\u000009\u0003"+ + "\u0000\t\n\r\r \u0087\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0003"+ + "\u0001\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0007"+ + "\u0001\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000\u000b\u0001"+ + "\u0000\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f\u0001\u0000"+ + "\u0000\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013\u0001\u0000"+ + "\u0000\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017\u0001\u0000"+ + "\u0000\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b\u0001\u0000"+ + "\u0000\u0000\u0001\u001d\u0001\u0000\u0000\u0000\u0003\u001f\u0001\u0000"+ + "\u0000\u0000\u0005!\u0001\u0000\u0000\u0000\u0007#\u0001\u0000\u0000\u0000"+ + "\t&\u0001\u0000\u0000\u0000\u000b(\u0001\u0000\u0000\u0000\r.\u0001\u0000"+ + "\u0000\u0000\u000f8\u0001\u0000\u0000\u0000\u0011:\u0001\u0000\u0000\u0000"+ + "\u0013E\u0001\u0000\u0000\u0000\u0015G\u0001\u0000\u0000\u0000\u0017Q"+ + "\u0001\u0000\u0000\u0000\u0019p\u0001\u0000\u0000\u0000\u001bs\u0001\u0000"+ + "\u0000\u0000\u001d\u001e\u0005(\u0000\u0000\u001e\u0002\u0001\u0000\u0000"+ + "\u0000\u001f \u0005)\u0000\u0000 \u0004\u0001\u0000\u0000\u0000!\"\u0005"+ + "!\u0000\u0000\"\u0006\u0001\u0000\u0000\u0000#$\u0005-\u0000\u0000$%\u0005"+ + ">\u0000\u0000%\b\u0001\u0000\u0000\u0000&\'\u0005-\u0000\u0000\'\n\u0001"+ + "\u0000\u0000\u0000()\u0005.\u0000\u0000)\f\u0001\u0000\u0000\u0000*+\u0005"+ + "&\u0000\u0000+/\u0005&\u0000\u0000,-\u0005|\u0000\u0000-/\u0005|\u0000"+ + "\u0000.*\u0001\u0000\u0000\u0000.,\u0001\u0000\u0000\u0000/\u000e\u0001"+ + "\u0000\u0000\u000001\u0005=\u0000\u000019\u0005=\u0000\u000023\u0005<"+ + "\u0000\u000039\u0005=\u0000\u000049\u0005<\u0000\u000056\u0005>\u0000"+ + "\u000069\u0005=\u0000\u000079\u0005>\u0000\u000080\u0001\u0000\u0000\u0000"+ + "82\u0001\u0000\u0000\u000084\u0001\u0000\u0000\u000085\u0001\u0000\u0000"+ + "\u000087\u0001\u0000\u0000\u00009\u0010\u0001\u0000\u0000\u0000:;\u0007"+ + "\u0000\u0000\u0000;\u0012\u0001\u0000\u0000\u0000<=\u0005t\u0000\u0000"+ + "=>\u0005r\u0000\u0000>?\u0005u\u0000\u0000?F\u0005e\u0000\u0000@A\u0005"+ + "f\u0000\u0000AB\u0005a\u0000\u0000BC\u0005l\u0000\u0000CD\u0005s\u0000"+ + "\u0000DF\u0005e\u0000\u0000E<\u0001\u0000\u0000\u0000E@\u0001\u0000\u0000"+ + "\u0000F\u0014\u0001\u0000\u0000\u0000GK\u0007\u0001\u0000\u0000HJ\u0007"+ + "\u0002\u0000\u0000IH\u0001\u0000\u0000\u0000JM\u0001\u0000\u0000\u0000"+ + "KI\u0001\u0000\u0000\u0000KL\u0001\u0000\u0000\u0000L\u0016\u0001\u0000"+ + "\u0000\u0000MK\u0001\u0000\u0000\u0000NP\u0005#\u0000\u0000ON\u0001\u0000"+ + "\u0000\u0000PS\u0001\u0000\u0000\u0000QO\u0001\u0000\u0000\u0000QR\u0001"+ + "\u0000\u0000\u0000RT\u0001\u0000\u0000\u0000SQ\u0001\u0000\u0000\u0000"+ + "TX\u0007\u0003\u0000\u0000UW\u0007\u0004\u0000\u0000VU\u0001\u0000\u0000"+ + "\u0000WZ\u0001\u0000\u0000\u0000XV\u0001\u0000\u0000\u0000XY\u0001\u0000"+ + "\u0000\u0000Y\u0018\u0001\u0000\u0000\u0000ZX\u0001\u0000\u0000\u0000"+ + "[]\u0007\u0005\u0000\u0000\\[\u0001\u0000\u0000\u0000]^\u0001\u0000\u0000"+ + "\u0000^\\\u0001\u0000\u0000\u0000^_\u0001\u0000\u0000\u0000_q\u0001\u0000"+ + "\u0000\u0000`b\u0007\u0005\u0000\u0000a`\u0001\u0000\u0000\u0000bc\u0001"+ + "\u0000\u0000\u0000ca\u0001\u0000\u0000\u0000cd\u0001\u0000\u0000\u0000"+ + "dm\u0001\u0000\u0000\u0000eg\u0005_\u0000\u0000fh\u0007\u0005\u0000\u0000"+ + "gf\u0001\u0000\u0000\u0000hi\u0001\u0000\u0000\u0000ig\u0001\u0000\u0000"+ + "\u0000ij\u0001\u0000\u0000\u0000jl\u0001\u0000\u0000\u0000ke\u0001\u0000"+ + "\u0000\u0000lo\u0001\u0000\u0000\u0000mk\u0001\u0000\u0000\u0000mn\u0001"+ + "\u0000\u0000\u0000nq\u0001\u0000\u0000\u0000om\u0001\u0000\u0000\u0000"+ + "p\\\u0001\u0000\u0000\u0000pa\u0001\u0000\u0000\u0000q\u001a\u0001\u0000"+ + "\u0000\u0000rt\u0007\u0006\u0000\u0000sr\u0001\u0000\u0000\u0000tu\u0001"+ + "\u0000\u0000\u0000us\u0001\u0000\u0000\u0000uv\u0001\u0000\u0000\u0000"+ + "vw\u0001\u0000\u0000\u0000wx\u0006\r\u0000\u0000x\u001c\u0001\u0000\u0000"+ + "\u0000\r\u0000.8EKQX^cimpu\u0001\u0000\u0001\u0000"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/latte/src/main/java/refinements/RefinementsLanguageLexer.tokens b/latte/src/main/java/refinements/RefinementsLanguageLexer.tokens index 91471e1..fa92ca5 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageLexer.tokens +++ b/latte/src/main/java/refinements/RefinementsLanguageLexer.tokens @@ -3,16 +3,18 @@ T__1=2 T__2=3 T__3=4 T__4=5 -LOGOP=6 -BOOLOP=7 -ARITHOP=8 -BOOL=9 -ID_UPPER=10 -ID=11 -INT=12 -WS=13 +T__5=6 +LOGOP=7 +BOOLOP=8 +ARITHOP=9 +BOOL=10 +ID_UPPER=11 +ID=12 +INT=13 +WS=14 '('=1 ')'=2 '!'=3 -'-'=4 -'.'=5 +'->'=4 +'-'=5 +'.'=6 diff --git a/latte/src/main/java/refinements/RefinementsLanguageListener.java b/latte/src/main/java/refinements/RefinementsLanguageListener.java index 8b9473b..4df1111 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageListener.java +++ b/latte/src/main/java/refinements/RefinementsLanguageListener.java @@ -53,6 +53,18 @@ public interface RefinementsLanguageListener extends ParseTreeListener { * @param ctx the parse tree */ void exitPredExp(RefinementsLanguageParser.PredExpContext ctx); + /** + * Enter a parse tree produced by the {@code predImplies} + * labeled alternative in {@link RefinementsLanguageParser#pred}. + * @param ctx the parse tree + */ + void enterPredImplies(RefinementsLanguageParser.PredImpliesContext ctx); + /** + * Exit a parse tree produced by the {@code predImplies} + * labeled alternative in {@link RefinementsLanguageParser#pred}. + * @param ctx the parse tree + */ + void exitPredImplies(RefinementsLanguageParser.PredImpliesContext ctx); /** * Enter a parse tree produced by the {@code predLogic} * labeled alternative in {@link RefinementsLanguageParser#pred}. diff --git a/latte/src/main/java/refinements/RefinementsLanguageParser.java b/latte/src/main/java/refinements/RefinementsLanguageParser.java index 8178edf..9d0eb20 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageParser.java +++ b/latte/src/main/java/refinements/RefinementsLanguageParser.java @@ -17,8 +17,8 @@ public class RefinementsLanguageParser extends Parser { protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache(); public static final int - T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, LOGOP=6, BOOLOP=7, ARITHOP=8, - BOOL=9, ID_UPPER=10, ID=11, INT=12, WS=13; + T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, LOGOP=7, BOOLOP=8, ARITHOP=9, + BOOL=10, ID_UPPER=11, ID=12, INT=13, WS=14; public static final int RULE_prog = 0, RULE_pred = 1, RULE_exp = 2, RULE_operand = 3, RULE_leafs = 4, RULE_literal = 5; @@ -31,14 +31,14 @@ private static String[] makeRuleNames() { private static String[] makeLiteralNames() { return new String[] { - null, "'('", "')'", "'!'", "'-'", "'.'" + null, "'('", "')'", "'!'", "'->'", "'-'", "'.'" }; } private static final String[] _LITERAL_NAMES = makeLiteralNames(); private static String[] makeSymbolicNames() { return new String[] { - null, null, null, null, null, null, "LOGOP", "BOOLOP", "ARITHOP", "BOOL", - "ID_UPPER", "ID", "INT", "WS" + null, null, null, null, null, null, null, "LOGOP", "BOOLOP", "ARITHOP", + "BOOL", "ID_UPPER", "ID", "INT", "WS" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -227,6 +227,29 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class PredImpliesContext extends PredContext { + public List pred() { + return getRuleContexts(PredContext.class); + } + public PredContext pred(int i) { + return getRuleContext(PredContext.class,i); + } + public PredImpliesContext(PredContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).enterPredImplies(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof RefinementsLanguageListener ) ((RefinementsLanguageListener)listener).exitPredImplies(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof RefinementsLanguageVisitor ) return ((RefinementsLanguageVisitor)visitor).visitPredImplies(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class PredLogicContext extends PredContext { public List pred() { return getRuleContexts(PredContext.class); @@ -291,7 +314,7 @@ private PredContext pred(int _p) throws RecognitionException { setState(21); match(T__2); setState(22); - pred(3); + pred(4); } break; case 3: @@ -305,29 +328,47 @@ private PredContext pred(int _p) throws RecognitionException { break; } _ctx.stop = _input.LT(-1); - setState(31); + setState(34); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,2,_ctx); + _alt = getInterpreter().adaptivePredict(_input,3,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - { - _localctx = new PredLogicContext(new PredContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_pred); - setState(26); - if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(27); - match(LOGOP); - setState(28); - pred(3); + setState(32); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,2,_ctx) ) { + case 1: + { + _localctx = new PredLogicContext(new PredContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_pred); + setState(26); + if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)"); + setState(27); + match(LOGOP); + setState(28); + pred(4); + } + break; + case 2: + { + _localctx = new PredImpliesContext(new PredContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_pred); + setState(29); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(30); + match(T__3); + setState(31); + pred(3); + } + break; } } } - setState(33); + setState(36); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,2,_ctx); + _alt = getInterpreter().adaptivePredict(_input,3,_ctx); } } } @@ -434,20 +475,20 @@ private ExpContext exp(int _p) throws RecognitionException { int _alt; enterOuterAlt(_localctx, 1); { - setState(40); + setState(43); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,3,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) { case 1: { _localctx = new ExpGroupContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(35); + setState(38); match(T__0); - setState(36); + setState(39); exp(0); - setState(37); + setState(40); match(T__1); } break; @@ -456,15 +497,15 @@ private ExpContext exp(int _p) throws RecognitionException { _localctx = new ExpOperandContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(39); + setState(42); operand(0); } break; } _ctx.stop = _input.LT(-1); - setState(47); + setState(50); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,4,_ctx); + _alt = getInterpreter().adaptivePredict(_input,5,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -473,18 +514,18 @@ private ExpContext exp(int _p) throws RecognitionException { { _localctx = new ExpBoolContext(new ExpContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_exp); - setState(42); + setState(45); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(43); + setState(46); match(BOOLOP); - setState(44); + setState(47); exp(3); } } } - setState(49); + setState(52); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,4,_ctx); + _alt = getInterpreter().adaptivePredict(_input,5,_ctx); } } } @@ -634,16 +675,16 @@ private OperandContext operand(int _p) throws RecognitionException { int _alt; enterOuterAlt(_localctx, 1); { - setState(58); + setState(61); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,5,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) { case 1: { _localctx = new OpLiteralContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(51); + setState(54); leafs(); } break; @@ -652,9 +693,9 @@ private OperandContext operand(int _p) throws RecognitionException { _localctx = new OpNotContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(52); + setState(55); match(T__2); - setState(53); + setState(56); operand(2); } break; @@ -663,36 +704,36 @@ private OperandContext operand(int _p) throws RecognitionException { _localctx = new OpGroupContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(54); + setState(57); match(T__0); - setState(55); + setState(58); operand(0); - setState(56); + setState(59); match(T__1); } break; } _ctx.stop = _input.LT(-1); - setState(68); + setState(71); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,7,_ctx); + _alt = getInterpreter().adaptivePredict(_input,8,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(66); + setState(69); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,7,_ctx) ) { case 1: { _localctx = new OpArithContext(new OperandContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_operand); - setState(60); + setState(63); if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)"); - setState(61); + setState(64); match(ARITHOP); - setState(62); + setState(65); operand(5); } break; @@ -700,20 +741,20 @@ private OperandContext operand(int _p) throws RecognitionException { { _localctx = new OpSubContext(new OperandContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_operand); - setState(63); + setState(66); if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)"); - setState(64); - match(T__3); - setState(65); + setState(67); + match(T__4); + setState(68); operand(4); } break; } } } - setState(70); + setState(73); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,7,_ctx); + _alt = getInterpreter().adaptivePredict(_input,8,_ctx); } } } @@ -824,18 +865,18 @@ public final LeafsContext leafs() throws RecognitionException { LeafsContext _localctx = new LeafsContext(_ctx, getState()); enterRule(_localctx, 8, RULE_leafs); try { - setState(80); + setState(83); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,8,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,9,_ctx) ) { case 1: _localctx = new LitGroupContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(71); + setState(74); match(T__0); - setState(72); + setState(75); leafs(); - setState(73); + setState(76); match(T__1); } break; @@ -843,7 +884,7 @@ public final LeafsContext leafs() throws RecognitionException { _localctx = new LitContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(75); + setState(78); literal(); } break; @@ -851,7 +892,7 @@ public final LeafsContext leafs() throws RecognitionException { _localctx = new VarContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(76); + setState(79); match(ID); } break; @@ -859,11 +900,11 @@ public final LeafsContext leafs() throws RecognitionException { _localctx = new TargetInvocationContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(77); + setState(80); match(ID); - setState(78); - match(T__4); - setState(79); + setState(81); + match(T__5); + setState(82); match(ID); } break; @@ -933,14 +974,14 @@ public final LiteralContext literal() throws RecognitionException { LiteralContext _localctx = new LiteralContext(_ctx, getState()); enterRule(_localctx, 10, RULE_literal); try { - setState(84); + setState(87); _errHandler.sync(this); switch (_input.LA(1)) { case BOOL: _localctx = new LitBoolContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(82); + setState(85); match(BOOL); } break; @@ -948,7 +989,7 @@ public final LiteralContext literal() throws RecognitionException { _localctx = new LitIntContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(83); + setState(86); match(INT); } break; @@ -981,82 +1022,85 @@ public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { private boolean pred_sempred(PredContext _localctx, int predIndex) { switch (predIndex) { case 0: + return precpred(_ctx, 3); + case 1: return precpred(_ctx, 2); } return true; } private boolean exp_sempred(ExpContext _localctx, int predIndex) { switch (predIndex) { - case 1: + case 2: return precpred(_ctx, 2); } return true; } private boolean operand_sempred(OperandContext _localctx, int predIndex) { switch (predIndex) { - case 2: - return precpred(_ctx, 4); case 3: + return precpred(_ctx, 4); + case 4: return precpred(_ctx, 3); } return true; } public static final String _serializedATN = - "\u0004\u0001\rW\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ + "\u0004\u0001\u000eZ\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ "\u0005\u0007\u0005\u0001\u0000\u0001\u0000\u0003\u0000\u000f\b\u0000\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0003\u0001\u0019\b\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0005\u0001\u001e\b\u0001\n\u0001\f\u0001!\t\u0001\u0001\u0002"+ - "\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0003\u0002"+ - ")\b\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0005\u0002.\b\u0002\n\u0002"+ - "\f\u00021\t\u0002\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001"+ - "\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0003\u0003;\b\u0003\u0001"+ - "\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0005"+ - "\u0003C\b\u0003\n\u0003\f\u0003F\t\u0003\u0001\u0004\u0001\u0004\u0001"+ - "\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+ - "\u0004\u0003\u0004Q\b\u0004\u0001\u0005\u0001\u0005\u0003\u0005U\b\u0005"+ - "\u0001\u0005\u0000\u0003\u0002\u0004\u0006\u0006\u0000\u0002\u0004\u0006"+ - "\b\n\u0000\u0000^\u0000\u000e\u0001\u0000\u0000\u0000\u0002\u0018\u0001"+ - "\u0000\u0000\u0000\u0004(\u0001\u0000\u0000\u0000\u0006:\u0001\u0000\u0000"+ - "\u0000\bP\u0001\u0000\u0000\u0000\nT\u0001\u0000\u0000\u0000\f\u000f\u0003"+ - "\u0002\u0001\u0000\r\u000f\u0001\u0000\u0000\u0000\u000e\f\u0001\u0000"+ - "\u0000\u0000\u000e\r\u0001\u0000\u0000\u0000\u000f\u0001\u0001\u0000\u0000"+ - "\u0000\u0010\u0011\u0006\u0001\uffff\uffff\u0000\u0011\u0012\u0005\u0001"+ - "\u0000\u0000\u0012\u0013\u0003\u0002\u0001\u0000\u0013\u0014\u0005\u0002"+ - "\u0000\u0000\u0014\u0019\u0001\u0000\u0000\u0000\u0015\u0016\u0005\u0003"+ - "\u0000\u0000\u0016\u0019\u0003\u0002\u0001\u0003\u0017\u0019\u0003\u0004"+ - "\u0002\u0000\u0018\u0010\u0001\u0000\u0000\u0000\u0018\u0015\u0001\u0000"+ - "\u0000\u0000\u0018\u0017\u0001\u0000\u0000\u0000\u0019\u001f\u0001\u0000"+ - "\u0000\u0000\u001a\u001b\n\u0002\u0000\u0000\u001b\u001c\u0005\u0006\u0000"+ - "\u0000\u001c\u001e\u0003\u0002\u0001\u0003\u001d\u001a\u0001\u0000\u0000"+ - "\u0000\u001e!\u0001\u0000\u0000\u0000\u001f\u001d\u0001\u0000\u0000\u0000"+ - "\u001f \u0001\u0000\u0000\u0000 \u0003\u0001\u0000\u0000\u0000!\u001f"+ - "\u0001\u0000\u0000\u0000\"#\u0006\u0002\uffff\uffff\u0000#$\u0005\u0001"+ - "\u0000\u0000$%\u0003\u0004\u0002\u0000%&\u0005\u0002\u0000\u0000&)\u0001"+ - "\u0000\u0000\u0000\')\u0003\u0006\u0003\u0000(\"\u0001\u0000\u0000\u0000"+ - "(\'\u0001\u0000\u0000\u0000)/\u0001\u0000\u0000\u0000*+\n\u0002\u0000"+ - "\u0000+,\u0005\u0007\u0000\u0000,.\u0003\u0004\u0002\u0003-*\u0001\u0000"+ - "\u0000\u0000.1\u0001\u0000\u0000\u0000/-\u0001\u0000\u0000\u0000/0\u0001"+ - "\u0000\u0000\u00000\u0005\u0001\u0000\u0000\u00001/\u0001\u0000\u0000"+ - "\u000023\u0006\u0003\uffff\uffff\u00003;\u0003\b\u0004\u000045\u0005\u0003"+ - "\u0000\u00005;\u0003\u0006\u0003\u000267\u0005\u0001\u0000\u000078\u0003"+ - "\u0006\u0003\u000089\u0005\u0002\u0000\u00009;\u0001\u0000\u0000\u0000"+ - ":2\u0001\u0000\u0000\u0000:4\u0001\u0000\u0000\u0000:6\u0001\u0000\u0000"+ - "\u0000;D\u0001\u0000\u0000\u0000<=\n\u0004\u0000\u0000=>\u0005\b\u0000"+ - "\u0000>C\u0003\u0006\u0003\u0005?@\n\u0003\u0000\u0000@A\u0005\u0004\u0000"+ - "\u0000AC\u0003\u0006\u0003\u0004B<\u0001\u0000\u0000\u0000B?\u0001\u0000"+ - "\u0000\u0000CF\u0001\u0000\u0000\u0000DB\u0001\u0000\u0000\u0000DE\u0001"+ - "\u0000\u0000\u0000E\u0007\u0001\u0000\u0000\u0000FD\u0001\u0000\u0000"+ - "\u0000GH\u0005\u0001\u0000\u0000HI\u0003\b\u0004\u0000IJ\u0005\u0002\u0000"+ - "\u0000JQ\u0001\u0000\u0000\u0000KQ\u0003\n\u0005\u0000LQ\u0005\u000b\u0000"+ - "\u0000MN\u0005\u000b\u0000\u0000NO\u0005\u0005\u0000\u0000OQ\u0005\u000b"+ - "\u0000\u0000PG\u0001\u0000\u0000\u0000PK\u0001\u0000\u0000\u0000PL\u0001"+ - "\u0000\u0000\u0000PM\u0001\u0000\u0000\u0000Q\t\u0001\u0000\u0000\u0000"+ - "RU\u0005\t\u0000\u0000SU\u0005\f\u0000\u0000TR\u0001\u0000\u0000\u0000"+ - "TS\u0001\u0000\u0000\u0000U\u000b\u0001\u0000\u0000\u0000\n\u000e\u0018"+ - "\u001f(/:BDPT"; + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001!\b\u0001\n\u0001"+ + "\f\u0001$\t\u0001\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001"+ + "\u0002\u0001\u0002\u0003\u0002,\b\u0002\u0001\u0002\u0001\u0002\u0001"+ + "\u0002\u0005\u00021\b\u0002\n\u0002\f\u00024\t\u0002\u0001\u0003\u0001"+ + "\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001"+ + "\u0003\u0003\u0003>\b\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001"+ + "\u0003\u0001\u0003\u0001\u0003\u0005\u0003F\b\u0003\n\u0003\f\u0003I\t"+ + "\u0003\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001"+ + "\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0003\u0004T\b\u0004\u0001"+ + "\u0005\u0001\u0005\u0003\u0005X\b\u0005\u0001\u0005\u0000\u0003\u0002"+ + "\u0004\u0006\u0006\u0000\u0002\u0004\u0006\b\n\u0000\u0000b\u0000\u000e"+ + "\u0001\u0000\u0000\u0000\u0002\u0018\u0001\u0000\u0000\u0000\u0004+\u0001"+ + "\u0000\u0000\u0000\u0006=\u0001\u0000\u0000\u0000\bS\u0001\u0000\u0000"+ + "\u0000\nW\u0001\u0000\u0000\u0000\f\u000f\u0003\u0002\u0001\u0000\r\u000f"+ + "\u0001\u0000\u0000\u0000\u000e\f\u0001\u0000\u0000\u0000\u000e\r\u0001"+ + "\u0000\u0000\u0000\u000f\u0001\u0001\u0000\u0000\u0000\u0010\u0011\u0006"+ + "\u0001\uffff\uffff\u0000\u0011\u0012\u0005\u0001\u0000\u0000\u0012\u0013"+ + "\u0003\u0002\u0001\u0000\u0013\u0014\u0005\u0002\u0000\u0000\u0014\u0019"+ + "\u0001\u0000\u0000\u0000\u0015\u0016\u0005\u0003\u0000\u0000\u0016\u0019"+ + "\u0003\u0002\u0001\u0004\u0017\u0019\u0003\u0004\u0002\u0000\u0018\u0010"+ + "\u0001\u0000\u0000\u0000\u0018\u0015\u0001\u0000\u0000\u0000\u0018\u0017"+ + "\u0001\u0000\u0000\u0000\u0019\"\u0001\u0000\u0000\u0000\u001a\u001b\n"+ + "\u0003\u0000\u0000\u001b\u001c\u0005\u0007\u0000\u0000\u001c!\u0003\u0002"+ + "\u0001\u0004\u001d\u001e\n\u0002\u0000\u0000\u001e\u001f\u0005\u0004\u0000"+ + "\u0000\u001f!\u0003\u0002\u0001\u0003 \u001a\u0001\u0000\u0000\u0000 "+ + "\u001d\u0001\u0000\u0000\u0000!$\u0001\u0000\u0000\u0000\" \u0001\u0000"+ + "\u0000\u0000\"#\u0001\u0000\u0000\u0000#\u0003\u0001\u0000\u0000\u0000"+ + "$\"\u0001\u0000\u0000\u0000%&\u0006\u0002\uffff\uffff\u0000&\'\u0005\u0001"+ + "\u0000\u0000\'(\u0003\u0004\u0002\u0000()\u0005\u0002\u0000\u0000),\u0001"+ + "\u0000\u0000\u0000*,\u0003\u0006\u0003\u0000+%\u0001\u0000\u0000\u0000"+ + "+*\u0001\u0000\u0000\u0000,2\u0001\u0000\u0000\u0000-.\n\u0002\u0000\u0000"+ + "./\u0005\b\u0000\u0000/1\u0003\u0004\u0002\u00030-\u0001\u0000\u0000\u0000"+ + "14\u0001\u0000\u0000\u000020\u0001\u0000\u0000\u000023\u0001\u0000\u0000"+ + "\u00003\u0005\u0001\u0000\u0000\u000042\u0001\u0000\u0000\u000056\u0006"+ + "\u0003\uffff\uffff\u00006>\u0003\b\u0004\u000078\u0005\u0003\u0000\u0000"+ + "8>\u0003\u0006\u0003\u00029:\u0005\u0001\u0000\u0000:;\u0003\u0006\u0003"+ + "\u0000;<\u0005\u0002\u0000\u0000<>\u0001\u0000\u0000\u0000=5\u0001\u0000"+ + "\u0000\u0000=7\u0001\u0000\u0000\u0000=9\u0001\u0000\u0000\u0000>G\u0001"+ + "\u0000\u0000\u0000?@\n\u0004\u0000\u0000@A\u0005\t\u0000\u0000AF\u0003"+ + "\u0006\u0003\u0005BC\n\u0003\u0000\u0000CD\u0005\u0005\u0000\u0000DF\u0003"+ + "\u0006\u0003\u0004E?\u0001\u0000\u0000\u0000EB\u0001\u0000\u0000\u0000"+ + "FI\u0001\u0000\u0000\u0000GE\u0001\u0000\u0000\u0000GH\u0001\u0000\u0000"+ + "\u0000H\u0007\u0001\u0000\u0000\u0000IG\u0001\u0000\u0000\u0000JK\u0005"+ + "\u0001\u0000\u0000KL\u0003\b\u0004\u0000LM\u0005\u0002\u0000\u0000MT\u0001"+ + "\u0000\u0000\u0000NT\u0003\n\u0005\u0000OT\u0005\f\u0000\u0000PQ\u0005"+ + "\f\u0000\u0000QR\u0005\u0006\u0000\u0000RT\u0005\f\u0000\u0000SJ\u0001"+ + "\u0000\u0000\u0000SN\u0001\u0000\u0000\u0000SO\u0001\u0000\u0000\u0000"+ + "SP\u0001\u0000\u0000\u0000T\t\u0001\u0000\u0000\u0000UX\u0005\n\u0000"+ + "\u0000VX\u0005\r\u0000\u0000WU\u0001\u0000\u0000\u0000WV\u0001\u0000\u0000"+ + "\u0000X\u000b\u0001\u0000\u0000\u0000\u000b\u000e\u0018 \"+2=EGSW"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/latte/src/main/java/refinements/RefinementsLanguageVisitor.java b/latte/src/main/java/refinements/RefinementsLanguageVisitor.java index 4150f3a..e83650c 100644 --- a/latte/src/main/java/refinements/RefinementsLanguageVisitor.java +++ b/latte/src/main/java/refinements/RefinementsLanguageVisitor.java @@ -37,6 +37,13 @@ public interface RefinementsLanguageVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitPredExp(RefinementsLanguageParser.PredExpContext ctx); + /** + * Visit a parse tree produced by the {@code predImplies} + * labeled alternative in {@link RefinementsLanguageParser#pred}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPredImplies(RefinementsLanguageParser.PredImpliesContext ctx); /** * Visit a parse tree produced by the {@code predLogic} * labeled alternative in {@link RefinementsLanguageParser#pred}. diff --git a/latte/src/main/java/smt/RefinementsToZ3Translator.java b/latte/src/main/java/smt/RefinementsToZ3Translator.java index 2a41038..9aa64a9 100644 --- a/latte/src/main/java/smt/RefinementsToZ3Translator.java +++ b/latte/src/main/java/smt/RefinementsToZ3Translator.java @@ -174,4 +174,15 @@ public Expr visitPredLogic(RefinementsLanguageParser.PredLogicContext ctx) { } } + @Override + public Expr visitPredImplies(RefinementsLanguageParser.PredImpliesContext ctx) { + Expr left = visit(ctx.pred(0)); + Expr right = visit(ctx.pred(1)); + + if (!(left instanceof BoolExpr) || !(right instanceof BoolExpr)) { + throw new IllegalArgumentException("Implication requires boolean expressions."); + } + + return z3Context.mkImplies((BoolExpr) left, (BoolExpr) right); + } } \ No newline at end of file diff --git a/latte/src/main/java/smt/SimpleTranslatorTest.java b/latte/src/main/java/smt/SimpleTranslatorTest.java index a5c5326..ff14d27 100644 --- a/latte/src/main/java/smt/SimpleTranslatorTest.java +++ b/latte/src/main/java/smt/SimpleTranslatorTest.java @@ -25,7 +25,7 @@ public static void main(String[] args) { testStep3_Arithmetic(); testStep4_Comparisons(); testStep5_LogicalOperations(); - // testStep6_Implications(); + testStep6_Implications(); // testStep7_ComplexExpressions(); } @@ -80,7 +80,7 @@ public static void testStep6_Implications() { System.out.println("\n🔸 STEP 6: Testing Implications"); System.out.println("Implement: visitImplication"); - testExpression("x == 0 -> x > -1", "Should create implication"); + //testExpression("x == 0 -> x > -1", "Should create implication"); testExpression("x > 5 -> x > 0", "Should create implication"); } From 5a34085d60539c459fc92e5192cd920b9b9b5ec5 Mon Sep 17 00:00:00 2001 From: Antonio Almeida Date: Thu, 26 Jun 2025 16:43:46 +0100 Subject: [PATCH 13/14] Added visit*Group to support complex grouped expressions --- .../java/smt/RefinementsToZ3Translator.java | 20 +++++++++++++++++++ .../main/java/smt/SimpleTranslatorTest.java | 4 ++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/latte/src/main/java/smt/RefinementsToZ3Translator.java b/latte/src/main/java/smt/RefinementsToZ3Translator.java index 9aa64a9..1b6744b 100644 --- a/latte/src/main/java/smt/RefinementsToZ3Translator.java +++ b/latte/src/main/java/smt/RefinementsToZ3Translator.java @@ -185,4 +185,24 @@ public Expr visitPredImplies(RefinementsLanguageParser.PredImpliesContext ctx) { return z3Context.mkImplies((BoolExpr) left, (BoolExpr) right); } + + @Override + public Expr visitExpGroup(RefinementsLanguageParser.ExpGroupContext ctx) { + return visit(ctx.exp()); + } + + @Override + public Expr visitPredGroup(RefinementsLanguageParser.PredGroupContext ctx) { + return visit(ctx.pred()); + } + + @Override + public Expr visitOpGroup(RefinementsLanguageParser.OpGroupContext ctx) { + return visit(ctx.operand()); + } + + @Override + public Expr visitLitGroup(RefinementsLanguageParser.LitGroupContext ctx) { + return visit(ctx.leafs()); + } } \ No newline at end of file diff --git a/latte/src/main/java/smt/SimpleTranslatorTest.java b/latte/src/main/java/smt/SimpleTranslatorTest.java index ff14d27..4e37a3d 100644 --- a/latte/src/main/java/smt/SimpleTranslatorTest.java +++ b/latte/src/main/java/smt/SimpleTranslatorTest.java @@ -26,7 +26,7 @@ public static void main(String[] args) { testStep4_Comparisons(); testStep5_LogicalOperations(); testStep6_Implications(); - // testStep7_ComplexExpressions(); + testStep7_ComplexExpressions(); } public static void testStep1_Literals() { @@ -89,7 +89,7 @@ public static void testStep7_ComplexExpressions() { System.out.println("All methods should work together"); testExpression("(x > 0 && y > 0) -> (x + y > 0)", "Complex implication"); - testExpression("x == 0 -> (x > -1 && x < 1)", "Implication with AND"); + //testExpression("x == 0 -> (x > -1 && x < 1)", "Implication with AND"); testExpression("(x + y == 10) && (x > y)", "Conjunction of constraints"); } From 0f3b55ee8d9f9befef3f210df03da1220686ce21 Mon Sep 17 00:00:00 2001 From: Antonio Almeida Date: Thu, 26 Jun 2025 16:49:48 +0100 Subject: [PATCH 14/14] fixed tests with unary minus --- latte/src/main/java/smt/SimpleTranslatorTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/latte/src/main/java/smt/SimpleTranslatorTest.java b/latte/src/main/java/smt/SimpleTranslatorTest.java index 4e37a3d..5675228 100644 --- a/latte/src/main/java/smt/SimpleTranslatorTest.java +++ b/latte/src/main/java/smt/SimpleTranslatorTest.java @@ -80,7 +80,7 @@ public static void testStep6_Implications() { System.out.println("\n🔸 STEP 6: Testing Implications"); System.out.println("Implement: visitImplication"); - //testExpression("x == 0 -> x > -1", "Should create implication"); + testExpression("x == 0 -> x <= 1", "Should create implication"); testExpression("x > 5 -> x > 0", "Should create implication"); } @@ -89,7 +89,7 @@ public static void testStep7_ComplexExpressions() { System.out.println("All methods should work together"); testExpression("(x > 0 && y > 0) -> (x + y > 0)", "Complex implication"); - //testExpression("x == 0 -> (x > -1 && x < 1)", "Implication with AND"); + testExpression("x == 0 -> (x > (0 - 1) && x < 1)", "Implication with AND"); testExpression("(x + y == 10) && (x > y)", "Conjunction of constraints"); }