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);
}
}