From 65daa8cce08433b81a3ccd1b4f4be2ca3d2de2fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=CC=88rg=20Prante?= Date: Wed, 13 May 2020 15:54:26 +0200 Subject: [PATCH] update to Gradle 4.6 --- .travis.yml | 13 +-- build.gradle | 35 +------ gradle.properties | 5 + gradle/publish.gradle | 71 +------------ gradle/sonarqube.gradle | 42 -------- gradle/wrapper/gradle-wrapper.jar | Bin 52928 -> 55616 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 45 +++++--- gradlew.bat | 18 +++- src/{site => docs}/resources/Calc.errs | 0 src/{site => docs}/resources/Calc.jacc | 0 src/{site => docs}/resources/Layer2.jacc | 0 src/{site => docs}/resources/MoreCalc.errs | 0 src/{site => docs}/resources/Unary.jacc | 0 src/{site => docs}/resources/dang.ex | 0 src/{site => docs}/resources/dang.jacc | 0 src/{site => docs}/resources/example1 | 0 src/{site => docs}/resources/example2 | 0 src/{site => docs}/resources/jacc.pdf | Bin src/{site => docs}/resources/simpleCalc.jacc | 0 src/main/java/org/xbib/jacc/Jacc.java | 99 ++++++++++-------- src/main/java/org/xbib/jacc/JaccJob.java | 94 +++++------------ src/main/java/org/xbib/jacc/JaccLexer.java | 5 +- src/main/java/org/xbib/jacc/JaccProd.java | 14 +-- src/main/java/org/xbib/jacc/JaccResolver.java | 10 +- src/main/java/org/xbib/jacc/JaccSettings.java | 18 +++- src/main/java/org/xbib/jacc/JaccSymbol.java | 8 +- src/main/java/org/xbib/jacc/JaccSymbols.java | 4 + src/main/java/org/xbib/jacc/JaccTables.java | 3 + src/main/java/org/xbib/jacc/JaccTokens.java | 32 ++++++ src/main/java/org/xbib/jacc/MachineType.java | 3 +- .../java/org/xbib/jacc/NamedJaccSymbols.java | 3 - src/main/java/org/xbib/jacc/ParserOutput.java | 15 ++- src/main/java/org/xbib/jacc/TextOutput.java | 3 - src/main/java/org/xbib/jacc/TokensOutput.java | 3 - .../java/org/xbib/jacc/compiler/Lexer.java | 5 - .../org/xbib/jacc/compiler/SourceLexer.java | 11 +- src/test/java/org/xbib/jacc/JaccTest.java | 72 ------------- .../org/xbib/jacc/helper/package-info.java | 4 - .../java/org/xbib/jacc/test/JaccMainTest.java | 12 +++ .../java/org/xbib/jacc/test/JaccTest.java | 87 +++++++++++++++ .../jacc/{helper => test}/StreamMatcher.java | 21 +--- .../xbib/jacc/{ => test}/package-info.java | 2 +- src/test/resources/org/xbib/jacc/example1.out | 1 - 44 files changed, 337 insertions(+), 424 deletions(-) create mode 100644 gradle.properties delete mode 100644 gradle/sonarqube.gradle rename src/{site => docs}/resources/Calc.errs (100%) rename src/{site => docs}/resources/Calc.jacc (100%) rename src/{site => docs}/resources/Layer2.jacc (100%) rename src/{site => docs}/resources/MoreCalc.errs (100%) rename src/{site => docs}/resources/Unary.jacc (100%) rename src/{site => docs}/resources/dang.ex (100%) rename src/{site => docs}/resources/dang.jacc (100%) rename src/{site => docs}/resources/example1 (100%) rename src/{site => docs}/resources/example2 (100%) rename src/{site => docs}/resources/jacc.pdf (100%) rename src/{site => docs}/resources/simpleCalc.jacc (100%) delete mode 100644 src/test/java/org/xbib/jacc/JaccTest.java delete mode 100644 src/test/java/org/xbib/jacc/helper/package-info.java create mode 100644 src/test/java/org/xbib/jacc/test/JaccMainTest.java create mode 100644 src/test/java/org/xbib/jacc/test/JaccTest.java rename src/test/java/org/xbib/jacc/{helper => test}/StreamMatcher.java (76%) rename src/test/java/org/xbib/jacc/{ => test}/package-info.java (56%) diff --git a/.travis.yml b/.travis.yml index 0699641..94d2a22 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,3 @@ language: java -sudo: required -jdk: - - oraclejdk8 -cache: - directories: - - $HOME/.m2 -after_success: - - ./gradlew sonarqube -Dsonar.host.url=https://sonarqube.com -Dsonar.login=$SONAR_TOKEN -env: - global: - secure: n1Ai4q/yMLn/Pg5pA4lTavoJoe7mQYB1PSKnZAqwbgyla94ySzK6iyBCBiNs/foMPisB/x+DHvmUXTsjvquw9Ay48ZITCV3xhcWzD0eZM2TMoG19CpRAEe8L8LNuYiti9k89ijDdUGZ5ifsvQNTGNHksouayAuApC3PrTUejJfR6SYrp1ZsQTbsMlr+4XU3p7QknK5rGgOwATIMP28F+bVnB05WJtlJA3b0SeucCurn3wJ4FGBQXRYmdlT7bQhNE4QgZM1VzcUFD/K0TBxzzq/otb/lNRSifyoekktDmJwQnaT9uQ4R8R6KdQ2Kb38Rvgjur+TKm5i1G8qS2+6LnIxQJG1aw3JvKK6W0wWCgnAVVRrXaCLday9NuY59tuh1mfjQ10UcsMNKcTdcKEMrLow506wSETcXc7L/LEnneWQyJJeV4vhPqR7KJfsBbeqgz3yIfsCn1GZVWFlfegzYCN52YTl0Y0uRD2Z+TnzQu+Bf4DzaWXLge1rz31xkhyeNNspub4h024+XqBjcMm6M9mlMzmmK8t2DIwPy/BlQbFBUyhrxziuR/5/2NEDPyHltvWkRb4AUIa25WJqkV0gTBegbMadZ9DyOo6Ea7aoVFBae2WGR08F1kzABsWrd1S7UJmWxW35iyMEtoAIayXphIK98qO5aCutwZ+3iOQazxbAs= +jdk: + - openjdk11 diff --git a/build.gradle b/build.gradle index 299a224..8ff53dd 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,3 @@ -plugins { - id "org.sonarqube" version '2.2' -} ext { user = 'xbib' @@ -11,45 +8,19 @@ ext { scmDeveloperConnection = 'scm:git:git://github.com/' + user + '/' + name + '.git' } -group = 'org.xbib' -version = '2.1.0' - -apply plugin: 'java' -apply plugin: 'maven' -apply plugin: 'signing' -apply plugin: 'findbugs' -apply plugin: 'pmd' -apply plugin: 'checkstyle' -apply plugin: 'jacoco' - -sourceCompatibility = JavaVersion.VERSION_1_8 -targetCompatibility = JavaVersion.VERSION_1_8 +apply plugin: 'java-library' repositories { mavenCentral() } -configurations { - wagon -} - dependencies { - testCompile 'junit:junit:4.12' - wagon 'org.apache.maven.wagon:wagon-ssh-external:2.10' -} - - -[compileJava, compileTestJava]*.options*.encoding = 'UTF-8' -tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:all" << "-profile" << "compact1" + testImplementation "junit:junit:${project.property('junit.version')}" } test { testLogging { - showStandardStreams = false + showStandardStreams = true exceptionFormat = 'full' } } - -apply from: 'gradle/publish.gradle' -apply from: 'gradle/sonarqube.gradle' diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..ed50e49 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,5 @@ +group = org.xbib +name = jacc +version = 2.2.0 + +junit.version = 4.13 \ No newline at end of file diff --git a/gradle/publish.gradle b/gradle/publish.gradle index 4ec7113..31de0f2 100644 --- a/gradle/publish.gradle +++ b/gradle/publish.gradle @@ -1,19 +1,4 @@ -task xbibUpload(type: Upload) { - configuration = configurations.archives - uploadDescriptor = true - repositories { - if (project.hasProperty("xbibUsername")) { - mavenDeployer { - configuration = configurations.wagon - repository(url: 'scpexe://xbib.org/repository') { - authentication(userName: xbibUsername, privateKey: xbibPrivateKey) - } - } - } - } -} - task sonaTypeUpload(type: Upload) { configuration = configurations.archives uploadDescriptor = true @@ -28,10 +13,13 @@ task sonaTypeUpload(type: Upload) { authentication(userName: ossrhUsername, password: ossrhPassword) } pom.project { - name name + groupId project.group + artifactId project.name + version project.version + name project.name description description packaging 'jar' - inceptionYear '2012' + inceptionYear '2016' url scmUrl organization { name 'xbib' @@ -61,52 +49,3 @@ task sonaTypeUpload(type: Upload) { } } } - - -task hbzUpload(type: Upload) { - configuration = configurations.archives - uploadDescriptor = true - repositories { - if (project.hasProperty('hbzUserName')) { - mavenDeployer { - configuration = configurations.wagon - beforeDeployment { MavenDeployment deployment -> - signing.signPom(deployment) - } - repository(url: uri(hbzUrl)) { - authentication(userName: hbzUserName, privateKey: hbzPrivateKey) - } - pom.project { - name name - description description - packaging 'jar' - inceptionYear '2012' - url scmUrl - organization { - name 'xbib' - url 'http://xbib.org' - } - developers { - developer { - id 'jprante' - name 'Jörg Prante' - email 'joergprante@gmail.com' - url 'https://github.com/jprante' - } - } - scm { - url scmUrl - connection scmConnection - developerConnection scmDeveloperConnection - } - licenses { - license { - name 'BSD 3-Clause License' - url 'https://opensource.org/licenses/BSD-3-Clause' - } - } - } - } - } - } -} diff --git a/gradle/sonarqube.gradle b/gradle/sonarqube.gradle deleted file mode 100644 index d864fe9..0000000 --- a/gradle/sonarqube.gradle +++ /dev/null @@ -1,42 +0,0 @@ -tasks.withType(Checkstyle) { - ignoreFailures = true - reports { - xml.enabled = true - html.enabled = true - } -} -tasks.withType(Pmd) { - ignoreFailures = true - reports { - xml.enabled = true - html.enabled = true - } -} -tasks.withType(FindBugs) { - ignoreFailures = true - reports { - xml.enabled = true - html.enabled = false - } -} -jacocoTestReport { - reports { - xml.enabled true - csv.enabled false - xml.destination "${buildDir}/reports/jacoco-xml" - html.destination "${buildDir}/reports/jacoco-html" - } -} - -sonarqube { - properties { - property "sonar.projectName", "${project.group} ${project.name}" - property "sonar.sourceEncoding", "UTF-8" - property "sonar.language", "java" - property "sonar.sources", "src/main/java" - property "sonar.tests", "src/test/java" - property "sonar.scm.provider", "git" - property "sonar.java.coveragePlugin", "jacoco" - property "sonar.junit.reportsPath", "build/test-results/test/" - } -} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 6ffa237849ef3607e39c3b334a92a65367962071..5c2d1cf016b3885f6930543d57b744ea8c220a1a 100644 GIT binary patch literal 55616 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 args.length) { usage("Missing filename for -e option"); } - jacc.setErrorDiagnostics(Files.newInputStream(Paths.get(args[++i]))); + jacc.setErrorDiagnostics(Files.newBufferedReader(Paths.get(args[++i]))); break; case 'r': if (i + 1 >= args.length) { usage("Missing filename for -r option"); } - jacc.setParserInputs(Files.newInputStream(Paths.get(args[++i]))); + jacc.setParserInputs(Files.newBufferedReader(Paths.get(args[++i]))); break; case 'd': if (i + 1 >= args.length) { @@ -180,9 +191,8 @@ public class Jacc { } j++; } - } - if (!arg.endsWith(jacc.getSuffix())) { - usage("Input file must have \"" + jacc.getSuffix() + "\" suffix"); + } else if (!arg.endsWith(jacc.getSuffix())) { + usage("Input file must have \"" + jacc.getSuffix() + "\" suffix: " + arg); } else { jacc.setInputStream(Files.newInputStream(Paths.get(arg))); } @@ -195,38 +205,41 @@ public class Jacc { } public void execute() throws IOException { - Writer writer = new BufferedWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8)); - ConsoleHandler consoleHandler = new ConsoleHandler(); - if (dir == null) { - dir = "."; - } - if (!dir.endsWith("/")) { - dir = dir + "/"; - } - final JaccJob job = new JaccJob(consoleHandler, writer, jaccSettings); - job.parseGrammarStream(inputStream); - job.buildTables(); - jaccSettings.fillBlanks(className); - if (errorDiagnostics != null) { - job.readErrorExamples(errorDiagnostics); - } - if (consoleHandler.getNumFailures() == 0) { - if (enableParserOutput) { - (new ParserOutput(consoleHandler, job)).write(dir + jaccSettings.getClassName() + ".java"); + try (Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8); + Writer writer = new BufferedWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8))) { + ConsoleHandler consoleHandler = new ConsoleHandler(); + if (dir == null) { + dir = "."; } - if (enableTokenOutput) { - (new TokensOutput(consoleHandler, job)).write(dir + jaccSettings.getInterfaceName() + ".java"); + if (!dir.endsWith("/")) { + dir = dir + "/"; } - if (enableVerboseMachineDescription) { - (new TextOutput(consoleHandler, job, includeCalculations)).write(dir + jaccSettings.getClassName() + ".output"); + final JaccJob job = new JaccJob(consoleHandler, writer, jaccSettings); + job.parseGrammarStream(reader); + job.buildTables(); + jaccSettings.fillBlanks(className); + if (errorDiagnostics != null) { + job.readErrorExamples(errorDiagnostics); + errorDiagnostics.close(); } - if (parserInputs != null) { - job.readRunExample(parserInputs, includeStateNumbers); + if (consoleHandler.getNumFailures() == 0) { + if (enableParserOutput) { + (new ParserOutput(consoleHandler, job)).write(dir + jaccSettings.getClassName() + ".java"); + } + if (enableTokenOutput) { + (new TokensOutput(consoleHandler, job)).write(dir + jaccSettings.getInterfaceName() + ".java"); + } + if (enableVerboseMachineDescription) { + (new TextOutput(consoleHandler, job, includeCalculations)).write(dir + jaccSettings.getClassName() + ".output"); + } + if (parserInputs != null) { + job.readRunExample(parserInputs, includeStateNumbers); + parserInputs.close(); + } + } else { + writer.write("There were failures.\n"); } - } else { - writer.write("There were failures.\n"); } - writer.close(); } private static void usage(String s) { diff --git a/src/main/java/org/xbib/jacc/JaccJob.java b/src/main/java/org/xbib/jacc/JaccJob.java index 71c9752..f0cb120 100644 --- a/src/main/java/org/xbib/jacc/JaccJob.java +++ b/src/main/java/org/xbib/jacc/JaccJob.java @@ -11,32 +11,28 @@ import org.xbib.jacc.grammar.Grammar; import org.xbib.jacc.grammar.LookaheadMachine; import org.xbib.jacc.grammar.Parser; -import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; import java.io.Reader; import java.io.Writer; -import java.nio.charset.StandardCharsets; /** * */ class JaccJob extends Phase { - private JaccSettings jaccSettings; + private final JaccSettings jaccSettings; - private JaccParser parser; + private final JaccParser parser; + + private final Writer writer; private JaccTables tables; private JaccResolver resolver; - private Writer out; - - JaccJob(Handler handler, Writer out, JaccSettings jaccSettings) { + JaccJob(Handler handler, Writer writer, JaccSettings jaccSettings) { super(handler); - this.out = out; + this.writer = writer; this.jaccSettings = jaccSettings; this.parser = new JaccParser(handler, jaccSettings); } @@ -53,62 +49,24 @@ class JaccJob extends Phase { return resolver; } - void parseGrammarStream(InputStream inputStream) throws IOException { - JaccLexer jacclexer = lexerFromInputStream(inputStream); - if (jacclexer != null) { + void parseGrammarStream(Reader reader) throws IOException { + try (Reader reader1 = reader; JaccLexer jacclexer = new JaccLexer(getHandler(), new JavaSource(getHandler(), reader1))) { + jacclexer.nextToken(); parser.parse(jacclexer); - jacclexer.close(); } } - private JaccLexer lexerFromFile(String s) throws IOException { - JaccLexer jacclexer; - Reader filereader = new InputStreamReader(new FileInputStream(s), StandardCharsets.UTF_8); - jacclexer = new JaccLexer(getHandler(), new JavaSource(getHandler(), filereader)); - jacclexer.nextToken(); - return jacclexer; - } - - private JaccLexer lexerFromInputStream(InputStream inputStream) throws IOException { - JaccLexer jacclexer; - Reader filereader = new InputStreamReader(inputStream, StandardCharsets.UTF_8); - jacclexer = new JaccLexer(getHandler(), new JavaSource(getHandler(), filereader)); - jacclexer.nextToken(); - return jacclexer; - } - - void readErrorExamples(String s) throws IOException { - out.write("Reading error examples from \"" + s + "\""); - JaccLexer jacclexer = lexerFromFile(s); - if (jacclexer != null) { + void readErrorExamples(Reader reader) throws IOException { + try (Reader reader1 = reader; JaccLexer jacclexer = new JaccLexer(getHandler(), new JavaSource(getHandler(), reader1))) { + jacclexer.nextToken(); parser.parseErrorExamples(jacclexer, this); - jacclexer.close(); } } - void readErrorExamples(InputStream inputStream) throws IOException { - JaccLexer jacclexer = lexerFromInputStream(inputStream); - if (jacclexer != null) { - parser.parseErrorExamples(jacclexer, this); - jacclexer.close(); - } - } - - void readRunExample(String s, boolean flag) throws IOException { - out.write("Running example from \"" + s + "\"]\n"); - JaccLexer jacclexer = lexerFromFile(s); - if (jacclexer != null) { + void readRunExample(Reader reader, boolean flag) throws IOException { + try (Reader reader1 = reader; JaccLexer jacclexer = new JaccLexer(getHandler(), new JavaSource(getHandler(), reader1))) { + jacclexer.nextToken(); runExample(parser.parseSymbols(jacclexer), flag); - jacclexer.close(); - } - } - - void readRunExample(InputStream inputStream, boolean flag) throws IOException { - out.write("Running example from input stream\n"); - JaccLexer jacclexer = lexerFromInputStream(inputStream); - if (jacclexer != null) { - runExample(parser.parseSymbols(jacclexer), flag); - jacclexer.close(); } } @@ -148,28 +106,28 @@ class JaccJob extends Phase { private void runExample(int[] ai, boolean flag) throws IOException { Grammar grammar = parser.getGrammar(); Parser parser1 = new Parser(tables, ai); - out.write("start "); + writer.write("start "); do { - out.write(" : "); - parser1.display(out, flag); + writer.write(" : "); + parser1.display(writer, flag); switch (parser1.step()) { case 0: - out.write("Accept!\n"); + writer.write("Accept!\n"); return; case 1: - out.write("error in state "); - out.write(parser1.getState()); - out.write(", next symbol "); - out.write(grammar.getSymbol(parser1.getNextSymbol()).toString()); + writer.write("error in state "); + writer.write(parser1.getState()); + writer.write(", next symbol "); + writer.write(grammar.getSymbol(parser1.getNextSymbol()).toString()); return; case 3: - out.write("goto "); + writer.write("goto "); break; case 2: - out.write("shift "); + writer.write("shift "); break; case 4: - out.write("reduce"); + writer.write("reduce"); break; default: break; diff --git a/src/main/java/org/xbib/jacc/JaccLexer.java b/src/main/java/org/xbib/jacc/JaccLexer.java index 130ba40..04d2746 100644 --- a/src/main/java/org/xbib/jacc/JaccLexer.java +++ b/src/main/java/org/xbib/jacc/JaccLexer.java @@ -8,9 +8,6 @@ import org.xbib.jacc.compiler.Warning; import java.io.IOException; -/** - * - */ class JaccLexer extends SourceLexer implements JaccTokens { private int lastLiteral; @@ -285,7 +282,7 @@ class JaccLexer extends SourceLexer implements JaccTokens { } sb.append('\n'); if (line != null) { - sb.append(line.substring(0, j)); + sb.append(line, 0, j); } return sb.toString(); } diff --git a/src/main/java/org/xbib/jacc/JaccProd.java b/src/main/java/org/xbib/jacc/JaccProd.java index 8d8443e..101f03f 100644 --- a/src/main/java/org/xbib/jacc/JaccProd.java +++ b/src/main/java/org/xbib/jacc/JaccProd.java @@ -3,15 +3,15 @@ package org.xbib.jacc; import org.xbib.jacc.compiler.Position; import org.xbib.jacc.grammar.Grammar; -/** - * - */ class JaccProd extends Grammar.Prod { - private Fixity fixity; - private JaccSymbol[] prodSyms; - private Position actPos; - private String action; + private final Fixity fixity; + + private final JaccSymbol[] prodSyms; + + private final Position actPos; + + private final String action; JaccProd(Fixity fixity, JaccSymbol[] jaccsymbol, Position position, String s, int i) { super(new int[jaccsymbol.length], i); diff --git a/src/main/java/org/xbib/jacc/JaccResolver.java b/src/main/java/org/xbib/jacc/JaccResolver.java index de79b69..40ae287 100644 --- a/src/main/java/org/xbib/jacc/JaccResolver.java +++ b/src/main/java/org/xbib/jacc/JaccResolver.java @@ -7,15 +7,15 @@ import org.xbib.jacc.grammar.Resolver; import org.xbib.jacc.grammar.Tables; import org.xbib.jacc.util.IntSet; -/** - * - */ class JaccResolver implements Resolver { - private LookaheadMachine machine; + private final LookaheadMachine machine; + private int numSRConflicts; + private int numRRConflicts; - private Conflicts[] conflicts; + + private final Conflicts[] conflicts; JaccResolver(LookaheadMachine lookaheadmachine) { numSRConflicts = 0; diff --git a/src/main/java/org/xbib/jacc/JaccSettings.java b/src/main/java/org/xbib/jacc/JaccSettings.java index 7b62b6e..37a7b5f 100644 --- a/src/main/java/org/xbib/jacc/JaccSettings.java +++ b/src/main/java/org/xbib/jacc/JaccSettings.java @@ -6,23 +6,31 @@ import org.xbib.jacc.grammar.LR0Machine; import org.xbib.jacc.grammar.LookaheadMachine; import org.xbib.jacc.grammar.SLRMachine; -/** - * - */ class JaccSettings { private MachineType machineType; + private String packageName; + private String className; + private String interfaceName; + private String extendsName; + private String implementsNames; + private String typeName; + private String getToken; + private String nextToken; + private String getSemantic; - private StringBuilder preTextBuffer; - private StringBuilder postTextBuffer; + + private final StringBuilder preTextBuffer; + + private final StringBuilder postTextBuffer; JaccSettings() { this.machineType = MachineType.LALR1; diff --git a/src/main/java/org/xbib/jacc/JaccSymbol.java b/src/main/java/org/xbib/jacc/JaccSymbol.java index f37611b..119b456 100644 --- a/src/main/java/org/xbib/jacc/JaccSymbol.java +++ b/src/main/java/org/xbib/jacc/JaccSymbol.java @@ -2,16 +2,18 @@ package org.xbib.jacc; import org.xbib.jacc.grammar.Grammar; -/** - * - */ class JaccSymbol extends Grammar.Symbol { private int num; + private int tokenNo; + private JaccProd[] jaccProds; + private int pused; + private Fixity fixity; + private String type; JaccSymbol(String s, int i) { diff --git a/src/main/java/org/xbib/jacc/JaccSymbols.java b/src/main/java/org/xbib/jacc/JaccSymbols.java index c9dc35f..5aaa3b8 100644 --- a/src/main/java/org/xbib/jacc/JaccSymbols.java +++ b/src/main/java/org/xbib/jacc/JaccSymbols.java @@ -1,7 +1,9 @@ package org.xbib.jacc; abstract class JaccSymbols { + Node root; + int size; JaccSymbols() { @@ -33,7 +35,9 @@ abstract class JaccSymbols { static class Node { Node left; + JaccSymbol data; + Node right; Node(JaccSymbol data) { diff --git a/src/main/java/org/xbib/jacc/JaccTables.java b/src/main/java/org/xbib/jacc/JaccTables.java index 294d7d6..cf73c34 100644 --- a/src/main/java/org/xbib/jacc/JaccTables.java +++ b/src/main/java/org/xbib/jacc/JaccTables.java @@ -13,8 +13,11 @@ import java.io.Writer; class JaccTables extends Tables { private String[] errors; + private int numErrors; + private int[][] index; + private int[] defaultRow; JaccTables(LookaheadMachine lookaheadmachine, Resolver resolver) { diff --git a/src/main/java/org/xbib/jacc/JaccTokens.java b/src/main/java/org/xbib/jacc/JaccTokens.java index fd0f93b..b60db9a 100644 --- a/src/main/java/org/xbib/jacc/JaccTokens.java +++ b/src/main/java/org/xbib/jacc/JaccTokens.java @@ -1,36 +1,68 @@ package org.xbib.jacc; interface JaccTokens { + int ERROR = -1; + int ENDINPUT = 0; + int MARK = 1; + int CODE = 2; + int IDENT = 3; + int CHARLIT = 4; + int STRLIT = 5; + int INTLIT = 6; + int ACTION = 7; + int TOKEN = 8; + int TYPE = 9; + int PREC = 10; + int LEFT = 11; + int RIGHT = 12; + int NONASSOC = 13; + int START = 14; + int PACKAGE = 15; + int CLASS = 16; + int INTERFACE = 17; + int EXTENDS = 18; + int IMPLEMENTS = 19; + int SEMANTIC = 20; + int GETTOKEN = 21; + int NEXTTOKEN = 22; + int COLON = 58; + int SEMI = 59; + int BAR = 124; + int TOPEN = 60; + int TCLOSE = 62; + int BOPEN = 91; + int BCLOSE = 93; + int DOT = 46; } diff --git a/src/main/java/org/xbib/jacc/MachineType.java b/src/main/java/org/xbib/jacc/MachineType.java index 31fac95..bee43dd 100644 --- a/src/main/java/org/xbib/jacc/MachineType.java +++ b/src/main/java/org/xbib/jacc/MachineType.java @@ -1,7 +1,6 @@ package org.xbib.jacc; -/** - */ public enum MachineType { + LR0, SLR1, LALR1 } diff --git a/src/main/java/org/xbib/jacc/NamedJaccSymbols.java b/src/main/java/org/xbib/jacc/NamedJaccSymbols.java index d448b39..9e447c9 100644 --- a/src/main/java/org/xbib/jacc/NamedJaccSymbols.java +++ b/src/main/java/org/xbib/jacc/NamedJaccSymbols.java @@ -1,8 +1,5 @@ package org.xbib.jacc; -/** - * - */ class NamedJaccSymbols extends JaccSymbols { JaccSymbol find(String s) { diff --git a/src/main/java/org/xbib/jacc/ParserOutput.java b/src/main/java/org/xbib/jacc/ParserOutput.java index f992646..b9ff3eb 100644 --- a/src/main/java/org/xbib/jacc/ParserOutput.java +++ b/src/main/java/org/xbib/jacc/ParserOutput.java @@ -7,23 +7,32 @@ import org.xbib.jacc.grammar.Grammar; import java.io.IOException; import java.io.Writer; -/** - * - */ class ParserOutput extends AbstractOutput { private int yyaccept; + private int yyabort; + private int stackOverflow; + private int errorHandler; + private int userErrorHandler; + private int[] stNumSwitches; + private int[][] ntGoto; + private int[][] ntGotoSrc; + private int[] ntDefault; + private int[] ntDistinct; + private int errTok; + private boolean errMsgs; + private boolean errUsed; ParserOutput(Handler handler, JaccJob jaccjob) { diff --git a/src/main/java/org/xbib/jacc/TextOutput.java b/src/main/java/org/xbib/jacc/TextOutput.java index 58bca37..b0ab69f 100644 --- a/src/main/java/org/xbib/jacc/TextOutput.java +++ b/src/main/java/org/xbib/jacc/TextOutput.java @@ -6,9 +6,6 @@ import org.xbib.jacc.util.IntSet; import java.io.IOException; import java.io.Writer; -/** - * - */ class TextOutput extends AbstractOutput { private boolean wantFirst; diff --git a/src/main/java/org/xbib/jacc/TokensOutput.java b/src/main/java/org/xbib/jacc/TokensOutput.java index 8a2ef98..05c8b9e 100644 --- a/src/main/java/org/xbib/jacc/TokensOutput.java +++ b/src/main/java/org/xbib/jacc/TokensOutput.java @@ -6,9 +6,6 @@ import org.xbib.jacc.grammar.Grammar; import java.io.IOException; import java.io.Writer; -/** - * - */ class TokensOutput extends AbstractOutput { TokensOutput(Handler handler, JaccJob jaccjob) { diff --git a/src/main/java/org/xbib/jacc/compiler/Lexer.java b/src/main/java/org/xbib/jacc/compiler/Lexer.java index 800162f..38d1ea9 100644 --- a/src/main/java/org/xbib/jacc/compiler/Lexer.java +++ b/src/main/java/org/xbib/jacc/compiler/Lexer.java @@ -2,9 +2,6 @@ package org.xbib.jacc.compiler; import java.io.IOException; -/** - * - */ public abstract class Lexer extends Phase { protected int token; @@ -35,6 +32,4 @@ public abstract class Lexer extends Phase { return false; } } - - public abstract void close() throws IOException; } diff --git a/src/main/java/org/xbib/jacc/compiler/SourceLexer.java b/src/main/java/org/xbib/jacc/compiler/SourceLexer.java index 118ca13..7c4fc68 100644 --- a/src/main/java/org/xbib/jacc/compiler/SourceLexer.java +++ b/src/main/java/org/xbib/jacc/compiler/SourceLexer.java @@ -2,16 +2,17 @@ package org.xbib.jacc.compiler; import java.io.IOException; -/** - * - */ -public abstract class SourceLexer extends Lexer { +public abstract class SourceLexer extends Lexer implements AutoCloseable { protected String line; + protected int col; + protected int c; + private Source source; - private SourcePosition pos; + + private final SourcePosition pos; public SourceLexer(Handler handler, Source source) throws IOException { super(handler); diff --git a/src/test/java/org/xbib/jacc/JaccTest.java b/src/test/java/org/xbib/jacc/JaccTest.java deleted file mode 100644 index 4fbc31b..0000000 --- a/src/test/java/org/xbib/jacc/JaccTest.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.xbib.jacc; - -import org.junit.Test; -import org.xbib.jacc.helper.StreamMatcher; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Paths; - -/** - */ -public class JaccTest { - - @Test - public void calc() throws IOException { - Jacc jacc = new Jacc(); - jacc.setName("Calc"); - jacc.setInputStream(getResource("Calc.jacc")); - jacc.setErrorDiagnostics(getResource("Calc.errs")); - jacc.setDir("build/"); - jacc.setEnableVerboseMachineDescription(true); - jacc.execute(); - StreamMatcher.assertStream("CalcParser.java", - getResource("CalcParser.java"), - Files.newInputStream(Paths.get("build/CalcParser.java"))); - StreamMatcher.assertStream("CalcTokens.java", - getResource("CalcTokens.java"), - Files.newInputStream(Paths.get("build/CalcTokens.java"))); - StreamMatcher.assertStream("CalcParser.output", - getResource("CalcParser.output"), - Files.newInputStream(Paths.get("build/CalcParser.output"))); - } - - @Test - public void traceCalc() throws IOException { - ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); - Jacc jacc = new Jacc(); - jacc.setName("Calc"); - jacc.setInputStream(getResource("Calc.jacc")); - jacc.setParserInputs(getResource("example1")); - jacc.setEnableParserOutput(false); - jacc.setEnableTokenOutput(false); - jacc.setOutputStream(byteArrayOutputStream); - jacc.setDir("build/"); - jacc.execute(); - StreamMatcher.assertStream("example1.out", - getResource("example1.out"), - new ByteArrayInputStream(byteArrayOutputStream.toByteArray()) - ); - } - - @Test - public void simpleCalc() throws IOException { - Jacc jacc = new Jacc(); - jacc.setName("simpleCalc"); - jacc.setInputStream(getResource("simpleCalc.jacc")); - jacc.setMachineType(MachineType.SLR1); - jacc.setDir("build/"); - jacc.execute(); - StreamMatcher.assertStream("Calc.java", - getResource("Calc.java"), - Files.newInputStream(Paths.get("build/Calc.java"))); - } - - private InputStream getResource(String resource) throws IOException { - return getClass().getClassLoader().getResource("org/xbib/jacc/" + resource).openStream(); - } - -} diff --git a/src/test/java/org/xbib/jacc/helper/package-info.java b/src/test/java/org/xbib/jacc/helper/package-info.java deleted file mode 100644 index d19bfe8..0000000 --- a/src/test/java/org/xbib/jacc/helper/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -/** - * Helper classes for testing. - */ -package org.xbib.jacc.helper; diff --git a/src/test/java/org/xbib/jacc/test/JaccMainTest.java b/src/test/java/org/xbib/jacc/test/JaccMainTest.java new file mode 100644 index 0000000..5d26455 --- /dev/null +++ b/src/test/java/org/xbib/jacc/test/JaccMainTest.java @@ -0,0 +1,12 @@ +package org.xbib.jacc.test; + +import org.junit.Test; +import org.xbib.jacc.Jacc; + +public class JaccMainTest { + + @Test + public void jaccMain() throws Exception { + Jacc.main(new String[] {"-d", "build/", "src/test/resources/org/xbib/jacc/Calc.jacc"}); + } +} diff --git a/src/test/java/org/xbib/jacc/test/JaccTest.java b/src/test/java/org/xbib/jacc/test/JaccTest.java new file mode 100644 index 0000000..6f715dd --- /dev/null +++ b/src/test/java/org/xbib/jacc/test/JaccTest.java @@ -0,0 +1,87 @@ +package org.xbib.jacc.test; + +import org.junit.Test; +import org.xbib.jacc.Jacc; +import org.xbib.jacc.MachineType; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class JaccTest { + + @Test + public void calc() throws IOException { + try (InputStream inputStream1 = getInputStream("Calc.jacc"); + InputStream inputStream2 = getInputStream("Calc.errs"); + InputStream inputStream3 = getInputStream("CalcParser.java"); + InputStream inputStream5 = getInputStream("CalcTokens.java"); + InputStream inputStream7 = getInputStream("CalcParser.output")) { + Jacc jacc = new Jacc(); + jacc.setName("Calc"); + jacc.setInputStream(inputStream1); + jacc.setErrorDiagnostics(new InputStreamReader(inputStream2, StandardCharsets.UTF_8)); + jacc.setDir("build/"); + jacc.setEnableVerboseMachineDescription(true); + jacc.execute(); + try (InputStream inputStream4 = Files.newInputStream(Paths.get("build/CalcParser.java")); + InputStream inputStream6 = Files.newInputStream(Paths.get("build/CalcTokens.java")); + InputStream inputStream8 = Files.newInputStream(Paths.get("build/CalcParser.output"))) { + StreamMatcher.assertStream("CalcParser.java", + inputStream3, inputStream4); + StreamMatcher.assertStream("CalcTokens.java", + inputStream5, inputStream6); + StreamMatcher.assertStream("CalcParser.output", + inputStream7, inputStream8); + } + } + } + + @Test + public void traceCalc() throws IOException { + try (InputStream inputStream1 = getInputStream("Calc.jacc"); + InputStream inputStream2 = getInputStream("example1"); + InputStream inputStream3 = getInputStream("example1.out")) { + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + Jacc jacc = new Jacc(); + jacc.setName("Calc"); + jacc.setInputStream(inputStream1); + jacc.setParserInputs(new InputStreamReader(inputStream2, StandardCharsets.UTF_8)); + jacc.setEnableParserOutput(false); + jacc.setEnableTokenOutput(false); + jacc.setOutputStream(byteArrayOutputStream); + jacc.setDir("build/"); + jacc.execute(); + StreamMatcher.assertStream("example1.out", + inputStream3, + new ByteArrayInputStream(byteArrayOutputStream.toByteArray()) + ); + } + } + + @Test + public void simpleCalc() throws IOException { + try (InputStream inputStream1 = getInputStream("simpleCalc.jacc"); + InputStream inputStream2 = getInputStream("Calc.java")) { + Jacc jacc = new Jacc(); + jacc.setName("simpleCalc"); + jacc.setInputStream(inputStream1); + jacc.setMachineType(MachineType.SLR1); + jacc.setDir("build/"); + jacc.execute(); + StreamMatcher.assertStream("Calc.java", + inputStream2, + Files.newInputStream(Paths.get("build/Calc.java"))); + } + } + + private static InputStream getInputStream(String resource) throws IOException { + return JaccTest.class.getClassLoader().getResource("org/xbib/jacc/" + resource).openStream(); + } + +} diff --git a/src/test/java/org/xbib/jacc/helper/StreamMatcher.java b/src/test/java/org/xbib/jacc/test/StreamMatcher.java similarity index 76% rename from src/test/java/org/xbib/jacc/helper/StreamMatcher.java rename to src/test/java/org/xbib/jacc/test/StreamMatcher.java index 5beb441..08a2576 100644 --- a/src/test/java/org/xbib/jacc/helper/StreamMatcher.java +++ b/src/test/java/org/xbib/jacc/test/StreamMatcher.java @@ -1,20 +1,4 @@ -/* - Copyright 2016 Jörg Prante - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - */ -package org.xbib.jacc.helper; +package org.xbib.jacc.test; import org.junit.Assert; @@ -26,9 +10,6 @@ import java.nio.channels.Channels; import java.nio.channels.ReadableByteChannel; import java.nio.charset.StandardCharsets; -/** - * - */ public class StreamMatcher extends Assert { public static void assertStream(String name, InputStream expected, String actual) throws IOException { diff --git a/src/test/java/org/xbib/jacc/package-info.java b/src/test/java/org/xbib/jacc/test/package-info.java similarity index 56% rename from src/test/java/org/xbib/jacc/package-info.java rename to src/test/java/org/xbib/jacc/test/package-info.java index f8f080f..bd2b36b 100644 --- a/src/test/java/org/xbib/jacc/package-info.java +++ b/src/test/java/org/xbib/jacc/test/package-info.java @@ -1,4 +1,4 @@ /** * Classes for testing jacc. */ -package org.xbib.jacc; +package org.xbib.jacc.test; diff --git a/src/test/resources/org/xbib/jacc/example1.out b/src/test/resources/org/xbib/jacc/example1.out index f096663..2773fd3 100644 --- a/src/test/resources/org/xbib/jacc/example1.out +++ b/src/test/resources/org/xbib/jacc/example1.out @@ -1,4 +1,3 @@ -Running example from input stream start : _ INTEGER ... shift : INTEGER _ '+' ... reduce : _ expr '+' ...