From 767fd4d544de90a981074166e52762adc009d4b9 Mon Sep 17 00:00:00 2001 From: yegor256 Date: Sun, 15 Nov 2020 23:28:30 +0300 Subject: [PATCH] #99 antlr4, build is clean --- pom.xml | 6 +-- .../Xembly.g => antlr4/org/xembly/Xembly.g4} | 22 ++-------- src/main/aspect/README.txt | 1 - src/main/java/org/xembly/SyntaxException.java | 2 +- src/main/java/org/xembly/Verbs.java | 43 +++++++++++++------ 5 files changed, 36 insertions(+), 38 deletions(-) rename src/main/{antlr3/org/xembly/Xembly.g => antlr4/org/xembly/Xembly.g4} (94%) delete mode 100644 src/main/aspect/README.txt diff --git a/pom.xml b/pom.xml index 5947a31d..f3ed2803 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,7 @@ OF THE POSSIBILITY OF SUCH DAMAGE. com.jcabi parent - 0.50.5 + 0.51.0 com.jcabi.incubator xembly @@ -92,10 +92,6 @@ OF THE POSSIBILITY OF SUCH DAMAGE. org.projectlombok lombok - - org.antlr - antlr-runtime - org.mockito mockito-core diff --git a/src/main/antlr3/org/xembly/Xembly.g b/src/main/antlr4/org/xembly/Xembly.g4 similarity index 94% rename from src/main/antlr3/org/xembly/Xembly.g rename to src/main/antlr4/org/xembly/Xembly.g4 index cbc07f1b..04671d08 100644 --- a/src/main/antlr3/org/xembly/Xembly.g +++ b/src/main/antlr4/org/xembly/Xembly.g4 @@ -29,28 +29,14 @@ */ grammar Xembly; -@header { - package org.xembly; +@lexer::header { import java.util.Collection; import java.util.LinkedList; } -@lexer::header { - package org.xembly; -} - -@lexer::members { - @Override - public void emitErrorMessage(String msg) { - throw new ParsingException(msg); - } -} - -@parser::members { - @Override - public void emitErrorMessage(String msg) { - throw new ParsingException(msg); - } +@parser::header { + import java.util.Collection; + import java.util.LinkedList; } directives returns [Collection ret] diff --git a/src/main/aspect/README.txt b/src/main/aspect/README.txt deleted file mode 100644 index b4e6e3c2..00000000 --- a/src/main/aspect/README.txt +++ /dev/null @@ -1 +0,0 @@ -This directory is an indicator of AspectJ usage in the module. diff --git a/src/main/java/org/xembly/SyntaxException.java b/src/main/java/org/xembly/SyntaxException.java index 08491c16..293ed762 100644 --- a/src/main/java/org/xembly/SyntaxException.java +++ b/src/main/java/org/xembly/SyntaxException.java @@ -34,7 +34,7 @@ * * @since 0.3 */ -public final class SyntaxException extends Exception { +public final class SyntaxException extends RuntimeException { /** * Serialization marker. diff --git a/src/main/java/org/xembly/Verbs.java b/src/main/java/org/xembly/Verbs.java index 1bbe2cac..dd32745a 100644 --- a/src/main/java/org/xembly/Verbs.java +++ b/src/main/java/org/xembly/Verbs.java @@ -30,11 +30,12 @@ package org.xembly; import java.util.Collection; -import org.antlr.runtime.ANTLRStringStream; -import org.antlr.runtime.CharStream; -import org.antlr.runtime.CommonTokenStream; -import org.antlr.runtime.RecognitionException; -import org.antlr.runtime.TokenStream; +import org.antlr.v4.runtime.ANTLRErrorListener; +import org.antlr.v4.runtime.BaseErrorListener; +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.RecognitionException; +import org.antlr.v4.runtime.Recognizer; /** * Directives in plain text. @@ -59,16 +60,32 @@ final class Verbs { /** * Parse script. * @return Collection of directives - * @throws SyntaxException If can't parse */ - public Collection directives() throws SyntaxException { - final CharStream input = new ANTLRStringStream(this.text); - final XemblyLexer lexer = new XemblyLexer(input); - final TokenStream tokens = new CommonTokenStream(lexer); - final XemblyParser parser = new XemblyParser(tokens); + public Collection directives() { + final ANTLRErrorListener errors = new BaseErrorListener() { + // @checkstyle ParameterNumberCheck (10 lines) + @Override + public void syntaxError(final Recognizer recognizer, + final Object symbol, final int line, + final int position, final String msg, + final RecognitionException error) { + throw new SyntaxException(Verbs.this.text, error); + } + }; + final XemblyLexer lexer = new XemblyLexer( + CharStreams.fromString(this.text) + ); + lexer.removeErrorListeners(); + lexer.addErrorListener(errors); + final XemblyParser parser = + new XemblyParser( + new CommonTokenStream(lexer) + ); + parser.removeErrorListeners(); + parser.addErrorListener(errors); try { - return parser.directives(); - } catch (final RecognitionException | ParsingException ex) { + return parser.directives().ret; + } catch (final ParsingException ex) { throw new SyntaxException(this.text, ex); } }