From 2359b1ec480ea71ff7a16cdc43e34fb1f740957b Mon Sep 17 00:00:00 2001
From: maxonfjvipon
Date: Wed, 29 Nov 2023 12:35:52 +0300
Subject: [PATCH 01/12] feat(#2642): created UnphiMojo
---
.../main/java/org/eolang/maven/UnphiMojo.java | 118 ++++++++++++++++++
1 file changed, 118 insertions(+)
create mode 100644 eo-maven-plugin/src/main/java/org/eolang/maven/UnphiMojo.java
diff --git a/eo-maven-plugin/src/main/java/org/eolang/maven/UnphiMojo.java b/eo-maven-plugin/src/main/java/org/eolang/maven/UnphiMojo.java
new file mode 100644
index 0000000000..ed5cbf560a
--- /dev/null
+++ b/eo-maven-plugin/src/main/java/org/eolang/maven/UnphiMojo.java
@@ -0,0 +1,118 @@
+/*
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2016-2023 Objectionary.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+package org.eolang.maven;
+
+import com.jcabi.log.Logger;
+import com.jcabi.xml.XMLDocument;
+import com.jcabi.xml.XSLDocument;
+import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.cactoos.Text;
+import org.cactoos.experimental.Threads;
+import org.cactoos.io.ResourceOf;
+import org.cactoos.iterable.Mapped;
+import org.cactoos.number.SumOf;
+import org.cactoos.text.Sticky;
+import org.cactoos.text.TextOf;
+import org.eolang.maven.util.HmBase;
+import org.eolang.maven.util.Home;
+import org.eolang.maven.util.Walk;
+
+/**
+ * Read PHI files and parse them to the XMIR.
+ * @since 0.34.0
+ */
+@Mojo(
+ name = "phi-to-xmir",
+ defaultPhase = LifecyclePhase.PROCESS_SOURCES,
+ threadSafe = true
+)
+public final class UnphiMojo extends SafeMojo {
+ /**
+ * The directory where to take xmir files for translation from.
+ * @checkstyle MemberNameCheck (10 lines)
+ */
+ @Parameter(
+ property = "unphiInputDir",
+ required = true,
+ defaultValue = "${project.build.directory}/eo/2-optimize"
+ )
+ private File phiInputDir;
+
+ /**
+ * The directory where to save phi files to.
+ * @checkstyle MemberNameCheck (10 lines)
+ */
+ @Parameter(
+ property = "unphiOutputDir",
+ required = true,
+ defaultValue = "${project.build.directory}/eo/phi"
+ )
+ private File phiOutputDir;
+
+ @Override
+ public void exec() {
+ final Home home = new HmBase(this.phiOutputDir);
+ final int count = new SumOf(
+ new Threads<>(
+ Runtime.getRuntime().availableProcessors(),
+ new Mapped<>(
+ xmir -> () -> {
+ final Path relative = Paths.get(
+ this.phiInputDir.toPath().relativize(xmir).toString().replace(
+ String.format(".%s", TranspileMojo.EXT),
+ String.format(".%s", UnphiMojo.EXT)
+ )
+ );
+ home.save(UnphiMojo.translated(new TextOf(xmir)), relative);
+ Logger.info(
+ this,
+ "Translated to phi: %s -> %s",
+ xmir, this.phiOutputDir.toPath().resolve(relative)
+ );
+ return 1;
+ },
+ new Walk(this.phiInputDir.toPath())
+ )
+ )
+ ).intValue();
+ Logger.info(this, "Translated %d xmir files to phi", count);
+ }
+
+ /**
+ * Translate given xmir to phi calculus expression.
+ * @param xmir Text of xmir
+ * @return Translated xmir
+ * @throws Exception If fail to translate
+ */
+ private static String translated(final Text xmir) throws Exception {
+ return new XSLDocument(UnphiMojo.TRANSLATION.asString()).applyTo(
+ new XMLDocument(xmir.asString())
+ );
+ }
+}
From 803bd2e11bde308c5f9e6ad99165e6d0b15f0218 Mon Sep 17 00:00:00 2001
From: maxonfjvipon
Date: Wed, 29 Nov 2023 12:46:22 +0300
Subject: [PATCH 02/12] feat(#2642): directories
---
.../main/java/org/eolang/maven/UnphiMojo.java | 34 ++++++-------------
1 file changed, 11 insertions(+), 23 deletions(-)
diff --git a/eo-maven-plugin/src/main/java/org/eolang/maven/UnphiMojo.java b/eo-maven-plugin/src/main/java/org/eolang/maven/UnphiMojo.java
index ed5cbf560a..bee08b5895 100644
--- a/eo-maven-plugin/src/main/java/org/eolang/maven/UnphiMojo.java
+++ b/eo-maven-plugin/src/main/java/org/eolang/maven/UnphiMojo.java
@@ -54,37 +54,37 @@
)
public final class UnphiMojo extends SafeMojo {
/**
- * The directory where to take xmir files for translation from.
+ * The directory where to take phi files for parsing from.
* @checkstyle MemberNameCheck (10 lines)
*/
@Parameter(
property = "unphiInputDir",
required = true,
- defaultValue = "${project.build.directory}/eo/2-optimize"
+ defaultValue = "${project.build.directory}/eo/phi"
)
- private File phiInputDir;
+ private File unphiInputDir;
/**
- * The directory where to save phi files to.
+ * The directory where to save xmir files to.
* @checkstyle MemberNameCheck (10 lines)
*/
@Parameter(
property = "unphiOutputDir",
required = true,
- defaultValue = "${project.build.directory}/eo/phi"
+ defaultValue = "${project.build.directory}/eo/1-parse"
)
- private File phiOutputDir;
+ private File unphiOutputDir;
@Override
public void exec() {
- final Home home = new HmBase(this.phiOutputDir);
+ final Home home = new HmBase(this.unphiOutputDir);
final int count = new SumOf(
new Threads<>(
Runtime.getRuntime().availableProcessors(),
new Mapped<>(
xmir -> () -> {
final Path relative = Paths.get(
- this.phiInputDir.toPath().relativize(xmir).toString().replace(
+ this.unphiInputDir.toPath().relativize(xmir).toString().replace(
String.format(".%s", TranspileMojo.EXT),
String.format(".%s", UnphiMojo.EXT)
)
@@ -93,26 +93,14 @@ public void exec() {
Logger.info(
this,
"Translated to phi: %s -> %s",
- xmir, this.phiOutputDir.toPath().resolve(relative)
+ xmir, this.unphiOutputDir.toPath().resolve(relative)
);
return 1;
},
- new Walk(this.phiInputDir.toPath())
+ new Walk(this.unphiInputDir.toPath())
)
)
).intValue();
- Logger.info(this, "Translated %d xmir files to phi", count);
- }
-
- /**
- * Translate given xmir to phi calculus expression.
- * @param xmir Text of xmir
- * @return Translated xmir
- * @throws Exception If fail to translate
- */
- private static String translated(final Text xmir) throws Exception {
- return new XSLDocument(UnphiMojo.TRANSLATION.asString()).applyTo(
- new XMLDocument(xmir.asString())
- );
+ Logger.info(this, "Parsed %d phi files to xmir", count);
}
}
From ee81b26f411d94dec0c79f4b878c74beab837641 Mon Sep 17 00:00:00 2001
From: maxonfjvipon
Date: Thu, 30 Nov 2023 14:21:16 +0300
Subject: [PATCH 03/12] feat(#2642): grammar + extensions
---
.../main/java/org/eolang/maven/UnphiMojo.java | 18 +-
.../src/main/antlr4/org/eolang/parser/Phi.g4 | 160 ++++++++++++++++++
2 files changed, 171 insertions(+), 7 deletions(-)
create mode 100644 eo-parser/src/main/antlr4/org/eolang/parser/Phi.g4
diff --git a/eo-maven-plugin/src/main/java/org/eolang/maven/UnphiMojo.java b/eo-maven-plugin/src/main/java/org/eolang/maven/UnphiMojo.java
index bee08b5895..0a25c3d3e8 100644
--- a/eo-maven-plugin/src/main/java/org/eolang/maven/UnphiMojo.java
+++ b/eo-maven-plugin/src/main/java/org/eolang/maven/UnphiMojo.java
@@ -82,18 +82,18 @@ public void exec() {
new Threads<>(
Runtime.getRuntime().availableProcessors(),
new Mapped<>(
- xmir -> () -> {
+ phi -> () -> {
final Path relative = Paths.get(
- this.unphiInputDir.toPath().relativize(xmir).toString().replace(
- String.format(".%s", TranspileMojo.EXT),
- String.format(".%s", UnphiMojo.EXT)
+ this.unphiInputDir.toPath().relativize(phi).toString().replace(
+ String.format(".%s", PhiMojo.EXT),
+ String.format(".%s", TranspileMojo.EXT)
)
);
- home.save(UnphiMojo.translated(new TextOf(xmir)), relative);
+ home.save(UnphiMojo.parsed(new TextOf(phi)), relative);
Logger.info(
this,
- "Translated to phi: %s -> %s",
- xmir, this.unphiOutputDir.toPath().resolve(relative)
+ "Parsed to xmir: %s -> %s",
+ phi, this.unphiOutputDir.toPath().resolve(relative)
);
return 1;
},
@@ -103,4 +103,8 @@ public void exec() {
).intValue();
Logger.info(this, "Parsed %d phi files to xmir", count);
}
+
+ public static String parsed(final Text phi) {
+ new
+ }
}
diff --git a/eo-parser/src/main/antlr4/org/eolang/parser/Phi.g4 b/eo-parser/src/main/antlr4/org/eolang/parser/Phi.g4
new file mode 100644
index 0000000000..d61199e8f0
--- /dev/null
+++ b/eo-parser/src/main/antlr4/org/eolang/parser/Phi.g4
@@ -0,0 +1,160 @@
+grammar Phi;
+
+program
+ : LCB bindings RCB
+ ;
+
+object
+ : formation
+ | application
+ | dispatch
+ | termination
+ ;
+
+formation
+ : LSB bindings RSB
+ ;
+
+bindings
+ : binding?
+ | binding (COMMA SPACE binding)*
+ ;
+
+binding
+ : alphaBinding
+ | emptyBinding
+ | deltaBidning
+ | lambdaBidning
+ ;
+
+alphaBinding
+ : attribute SPACE ARROW SPACE object
+ ;
+
+attribute
+ : PHI
+ | RHO
+ | SIGMA
+ | VTX
+ | LABEL
+ | alpha
+ ;
+
+alpha
+ : ALPHA INDEX
+ ;
+
+emptyBinding
+ : attribute SPACE ARROW SPACE EMPTY
+ ;
+
+deltaBidning
+ : DELTA SPACE DASHED_ARROW SPACE BYTES
+ ;
+
+lambdaBidning
+ : LAMBDA SPACE DASHED_ARROW SPACE FUNCTION
+ ;
+
+FUNCTION
+ : [A-Z] ~[ \r\n\t,.|':;!\-?\][}{)(⟧⟦]*
+ ;
+
+application
+ : (formation | dispatch | termination) bnds
+ ;
+
+bnds: (LB bindings RB)+
+ ;
+
+dispatch
+ : (formation | termination) bnds? attrs
+ | dispatch bnds attrs
+ | HOME attrs
+ | XI attrs
+ ;
+
+attrs
+ : (DOT attribute)+
+ ;
+
+termination
+ : ERROR
+ ;
+
+LCB : '{'
+ ;
+RCB : '}'
+ ;
+LSB : '⟦'
+ ;
+RSB : '⟧'
+ ;
+LB : '('
+ ;
+RB : ')'
+ ;
+DOT : '.'
+ ;
+COMMA
+ : ','
+ ;
+SPACE
+ : ' '
+ ;
+ARROW
+ : '↦'
+ ;
+DASHED_ARROW
+ : '⤍'
+ ;
+ALPHA
+ : 'α'
+ ;
+EMPTY
+ : '∅'
+ ;
+PHI : 'φ'
+ ;
+RHO : 'ρ'
+ ;
+SIGMA
+ : 'σ'
+ ;
+VTX : 'ν'
+ ;
+DELTA
+ : 'Δ'
+ ;
+XI : 'ξ'
+ ;
+LAMBDA
+ : 'λ'
+ ;
+HOME: 'Φ'
+ ;
+ERROR
+ : '⊥'
+ ;
+MINUS
+ : '-'
+ ;
+
+INDEX
+ : [0-9]
+ | [1-9][0-9]*
+ ;
+
+LABEL
+ : [a-z] ~[ \r\n\t,.|':;!?\][}{)(⟧⟦]*
+ ;
+
+fragment BYTE
+ : [0-9A-F][0-9A-F]
+ ;
+
+BYTES
+ : MINUS MINUS
+ | BYTE MINUS
+ | BYTE (MINUS BYTE)+
+ ;
\ No newline at end of file
From 14320f3c92f2c3fee0b37ed7ad3cbf56a030ab8f Mon Sep 17 00:00:00 2001
From: maxonfjvipon
Date: Fri, 1 Dec 2023 15:56:47 +0300
Subject: [PATCH 04/12] feat(#2642): lexer + listener
---
.../org/eolang/parser/{Program.g4 => Eo.g4} | 2 +-
.../{EoLexer.java => EoIndentLexer.java} | 16 +-
.../main/java/org/eolang/parser/Syntax.java | 6 +-
.../{XeListener.java => XeEoListener.java} | 282 +++++++++---------
.../java/org/eolang/parser/XePhiListener.java | 224 ++++++++++++++
...oLexerTest.java => EoIndentLexerTest.java} | 22 +-
6 files changed, 388 insertions(+), 164 deletions(-)
rename eo-parser/src/main/antlr4/org/eolang/parser/{Program.g4 => Eo.g4} (99%)
rename eo-parser/src/main/java/org/eolang/parser/{EoLexer.java => EoIndentLexer.java} (89%)
rename eo-parser/src/main/java/org/eolang/parser/{XeListener.java => XeEoListener.java} (65%)
create mode 100644 eo-parser/src/main/java/org/eolang/parser/XePhiListener.java
rename eo-parser/src/test/java/org/eolang/parser/{EoLexerTest.java => EoIndentLexerTest.java} (85%)
diff --git a/eo-parser/src/main/antlr4/org/eolang/parser/Program.g4 b/eo-parser/src/main/antlr4/org/eolang/parser/Eo.g4
similarity index 99%
rename from eo-parser/src/main/antlr4/org/eolang/parser/Program.g4
rename to eo-parser/src/main/antlr4/org/eolang/parser/Eo.g4
index 16101f320c..e4c178dccf 100644
--- a/eo-parser/src/main/antlr4/org/eolang/parser/Program.g4
+++ b/eo-parser/src/main/antlr4/org/eolang/parser/Eo.g4
@@ -1,4 +1,4 @@
-grammar Program;
+grammar Eo;
tokens { TAB, UNTAB }
diff --git a/eo-parser/src/main/java/org/eolang/parser/EoLexer.java b/eo-parser/src/main/java/org/eolang/parser/EoIndentLexer.java
similarity index 89%
rename from eo-parser/src/main/java/org/eolang/parser/EoLexer.java
rename to eo-parser/src/main/java/org/eolang/parser/EoIndentLexer.java
index a0995eae50..6de33f038a 100644
--- a/eo-parser/src/main/java/org/eolang/parser/EoLexer.java
+++ b/eo-parser/src/main/java/org/eolang/parser/EoIndentLexer.java
@@ -39,7 +39,7 @@
*
* @since 1.0
*/
-public final class EoLexer extends ProgramLexer {
+public final class EoIndentLexer extends EoLexer {
/**
* Generated tokes.
*/
@@ -55,7 +55,7 @@ public final class EoLexer extends ProgramLexer {
* @param txt Source code.
* @throws IOException If fails.
*/
- public EoLexer(final Text txt) throws IOException {
+ public EoIndentLexer(final Text txt) throws IOException {
this(CharStreams.fromStream(new InputStreamOf(txt)));
}
@@ -63,7 +63,7 @@ public EoLexer(final Text txt) throws IOException {
* Ctor.
* @param stream Char stream.
*/
- private EoLexer(final CharStream stream) {
+ private EoIndentLexer(final CharStream stream) {
super(stream);
this.indent = new LinkedList<>(
Collections.singletonList(0)
@@ -84,8 +84,8 @@ public Token nextToken() {
*/
private void lookAhead() {
final Token token = super.nextToken();
- if (token.getType() == ProgramParser.EOL
- || token.getType() == ProgramParser.EOP) {
+ if (token.getType() == EoParser.EOL
+ || token.getType() == EoParser.EOP) {
final int tabs = this.getText().replaceAll("[\r\n]", "").length() / 2;
final int last = this.indent.peekLast();
final int shift = tabs - last;
@@ -105,7 +105,7 @@ private void lookAhead() {
*/
private void emitIndent(final int shift) {
for (int idx = 0; idx < shift; ++idx) {
- this.emitToken(ProgramParser.TAB);
+ this.emitToken(EoParser.TAB);
}
}
@@ -115,8 +115,8 @@ private void emitIndent(final int shift) {
*/
private void emitDedent(final int shift) {
for (int idx = 0; idx < shift; ++idx) {
- this.emitToken(ProgramParser.UNTAB);
- this.emitToken(ProgramParser.EOL);
+ this.emitToken(EoParser.UNTAB);
+ this.emitToken(EoParser.EOL);
}
}
diff --git a/eo-parser/src/main/java/org/eolang/parser/Syntax.java b/eo-parser/src/main/java/org/eolang/parser/Syntax.java
index 0a9d3e7a6d..a8fbc51a94 100644
--- a/eo-parser/src/main/java/org/eolang/parser/Syntax.java
+++ b/eo-parser/src/main/java/org/eolang/parser/Syntax.java
@@ -106,15 +106,15 @@ public Syntax(
public void parse() throws IOException {
final List lines = this.lines();
final ParsingErrors spy = new ParsingErrors(lines);
- final ProgramLexer lexer = new EoLexer(this.normalize());
+ final EoLexer lexer = new EoIndentLexer(this.normalize());
lexer.removeErrorListeners();
lexer.addErrorListener(spy);
- final ProgramParser parser = new ProgramParser(
+ final EoParser parser = new EoParser(
new CommonTokenStream(lexer)
);
parser.removeErrorListeners();
parser.addErrorListener(spy);
- final XeListener xel = new XeListener(this.name);
+ final XeEoListener xel = new XeEoListener(this.name);
new ParseTreeWalker().walk(xel, parser.program());
final XML dom = new XMLDocument(
new Xembler(
diff --git a/eo-parser/src/main/java/org/eolang/parser/XeListener.java b/eo-parser/src/main/java/org/eolang/parser/XeEoListener.java
similarity index 65%
rename from eo-parser/src/main/java/org/eolang/parser/XeListener.java
rename to eo-parser/src/main/java/org/eolang/parser/XeEoListener.java
index f5fdb2c346..10f7fac50b 100644
--- a/eo-parser/src/main/java/org/eolang/parser/XeListener.java
+++ b/eo-parser/src/main/java/org/eolang/parser/XeEoListener.java
@@ -42,7 +42,7 @@
import org.xembly.Directives;
/**
- * The listener for ANTLR4 walker.
+ * The EO grammar listener for ANTLR4 walker.
*
* @checkstyle CyclomaticComplexityCheck (500 lines)
* @checkstyle ClassFanOutComplexityCheck (500 lines)
@@ -55,7 +55,7 @@
"PMD.ExcessivePublicCount",
"PMD.ExcessiveClassLength"
})
-public final class XeListener implements ProgramListener, Iterable {
+public final class XeEoListener implements EoListener, Iterable {
/**
* The name of it.
@@ -82,7 +82,7 @@ public final class XeListener implements ProgramListener, Iterable {
*
* @param name The name of it
*/
- public XeListener(final String name) {
+ public XeEoListener(final String name) {
this.name = name;
this.dirs = new Directives();
this.objects = new Objects.ObjXembly();
@@ -90,7 +90,7 @@ public XeListener(final String name) {
}
@Override
- public void enterProgram(final ProgramParser.ProgramContext ctx) {
+ public void enterProgram(final EoParser.ProgramContext ctx) {
this.dirs.add("program")
.attr("name", this.name)
.attr("version", Manifests.read("EO-Version"))
@@ -102,7 +102,7 @@ public void enterProgram(final ProgramParser.ProgramContext ctx) {
DateTimeFormatter.ISO_INSTANT
)
)
- .add("listing").set(XeListener.sourceText(ctx)).up()
+ .add("listing").set(XeEoListener.sourceText(ctx)).up()
.add("errors").up()
.add("sheets").up()
.add("license").up()
@@ -110,14 +110,14 @@ public void enterProgram(final ProgramParser.ProgramContext ctx) {
}
@Override
- public void exitProgram(final ProgramParser.ProgramContext ctx) {
+ public void exitProgram(final EoParser.ProgramContext ctx) {
this.dirs
.attr("ms", (System.nanoTime() - this.start) / (1000L * 1000L))
.up();
}
@Override
- public void enterLicense(final ProgramParser.LicenseContext ctx) {
+ public void enterLicense(final EoParser.LicenseContext ctx) {
this.dirs.addIf("license").set(
new Joined(
"\n",
@@ -130,12 +130,12 @@ public void enterLicense(final ProgramParser.LicenseContext ctx) {
}
@Override
- public void exitLicense(final ProgramParser.LicenseContext ctx) {
+ public void exitLicense(final EoParser.LicenseContext ctx) {
// Nothing here
}
@Override
- public void enterMetas(final ProgramParser.MetasContext ctx) {
+ public void enterMetas(final EoParser.MetasContext ctx) {
this.dirs.addIf("metas");
for (final TerminalNode node : ctx.META()) {
final String[] pair = node.getText().split(" ", 2);
@@ -157,54 +157,54 @@ public void enterMetas(final ProgramParser.MetasContext ctx) {
}
@Override
- public void exitMetas(final ProgramParser.MetasContext ctx) {
+ public void exitMetas(final EoParser.MetasContext ctx) {
// Nothing here
}
@Override
- public void enterObjects(final ProgramParser.ObjectsContext ctx) {
+ public void enterObjects(final EoParser.ObjectsContext ctx) {
this.dirs.add("objects");
}
@Override
- public void exitObjects(final ProgramParser.ObjectsContext ctx) {
+ public void exitObjects(final EoParser.ObjectsContext ctx) {
this.dirs.append(this.objects);
this.dirs.up();
}
@Override
- public void enterObject(final ProgramParser.ObjectContext ctx) {
+ public void enterObject(final EoParser.ObjectContext ctx) {
// Nothing here
}
@Override
- public void exitObject(final ProgramParser.ObjectContext ctx) {
+ public void exitObject(final EoParser.ObjectContext ctx) {
// Nothing here
}
@Override
- public void enterJust(final ProgramParser.JustContext ctx) {
+ public void enterJust(final EoParser.JustContext ctx) {
// Nothing here
}
@Override
- public void exitJust(final ProgramParser.JustContext ctx) {
+ public void exitJust(final EoParser.JustContext ctx) {
// Nothing here
}
@Override
- public void enterJustNamed(final ProgramParser.JustNamedContext ctx) {
+ public void enterJustNamed(final EoParser.JustNamedContext ctx) {
// Nothing here
}
@Override
- public void exitJustNamed(final ProgramParser.JustNamedContext ctx) {
+ public void exitJustNamed(final EoParser.JustNamedContext ctx) {
// Nothing here
}
@Override
@SuppressWarnings("PMD.ConfusingTernary")
- public void enterAtom(final ProgramParser.AtomContext ctx) {
+ public void enterAtom(final EoParser.AtomContext ctx) {
this.startObject(ctx);
if (ctx.type().NAME() != null) {
this.objects.prop("atom", ctx.type().NAME().getText());
@@ -215,117 +215,117 @@ public void enterAtom(final ProgramParser.AtomContext ctx) {
}
@Override
- public void exitAtom(final ProgramParser.AtomContext ctx) {
+ public void exitAtom(final EoParser.AtomContext ctx) {
// Nothing here
}
@Override
- public void enterAbstraction(final ProgramParser.AbstractionContext ctx) {
+ public void enterAbstraction(final EoParser.AbstractionContext ctx) {
this.startObject(ctx).prop("abstract").leave();
}
@Override
- public void exitAbstraction(final ProgramParser.AbstractionContext ctx) {
+ public void exitAbstraction(final EoParser.AbstractionContext ctx) {
// Nothing here
}
@Override
- public void enterInners(final ProgramParser.InnersContext ctx) {
+ public void enterInners(final EoParser.InnersContext ctx) {
this.objects.enter();
}
@Override
- public void exitInners(final ProgramParser.InnersContext ctx) {
+ public void exitInners(final EoParser.InnersContext ctx) {
this.objects.leave();
}
@Override
- public void enterAttributes(final ProgramParser.AttributesContext ctx) {
+ public void enterAttributes(final EoParser.AttributesContext ctx) {
this.objects.enter();
}
@Override
- public void exitAttributes(final ProgramParser.AttributesContext ctx) {
+ public void exitAttributes(final EoParser.AttributesContext ctx) {
this.objects.leave();
}
@Override
- public void enterAttribute(final ProgramParser.AttributeContext ctx) {
+ public void enterAttribute(final EoParser.AttributeContext ctx) {
this.startObject(ctx).prop("name", ctx.NAME().getText());
}
@Override
- public void exitAttribute(final ProgramParser.AttributeContext ctx) {
+ public void exitAttribute(final EoParser.AttributeContext ctx) {
this.objects.leave();
}
@Override
- public void enterType(final ProgramParser.TypeContext ctx) {
+ public void enterType(final EoParser.TypeContext ctx) {
// Nothing here
}
@Override
- public void exitType(final ProgramParser.TypeContext ctx) {
+ public void exitType(final EoParser.TypeContext ctx) {
// Nothing here
}
@Override
- public void enterApplication(final ProgramParser.ApplicationContext ctx) {
+ public void enterApplication(final EoParser.ApplicationContext ctx) {
// Nothing here
}
@Override
- public void exitApplication(final ProgramParser.ApplicationContext ctx) {
+ public void exitApplication(final EoParser.ApplicationContext ctx) {
// Nothing here
}
@Override
- public void enterHapplicationExtended(final ProgramParser.HapplicationExtendedContext ctx) {
+ public void enterHapplicationExtended(final EoParser.HapplicationExtendedContext ctx) {
// Nothing here
}
@Override
- public void exitHapplicationExtended(final ProgramParser.HapplicationExtendedContext ctx) {
+ public void exitHapplicationExtended(final EoParser.HapplicationExtendedContext ctx) {
// Nothing here
}
@Override
- public void enterHapplication(final ProgramParser.HapplicationContext ctx) {
+ public void enterHapplication(final EoParser.HapplicationContext ctx) {
// Nothing here
}
@Override
- public void exitHapplication(final ProgramParser.HapplicationContext ctx) {
+ public void exitHapplication(final EoParser.HapplicationContext ctx) {
// Nothing here
}
@Override
- public void enterHapplicationHead(final ProgramParser.HapplicationHeadContext ctx) {
+ public void enterHapplicationHead(final EoParser.HapplicationHeadContext ctx) {
// Nothing here
}
@Override
- public void exitHapplicationHead(final ProgramParser.HapplicationHeadContext ctx) {
+ public void exitHapplicationHead(final EoParser.HapplicationHeadContext ctx) {
// Nothing here
}
@Override
public void enterHapplicationHeadExtended(
- final ProgramParser.HapplicationHeadExtendedContext ctx
+ final EoParser.HapplicationHeadExtendedContext ctx
) {
// Nothing here
}
@Override
public void exitHapplicationHeadExtended(
- final ProgramParser.HapplicationHeadExtendedContext ctx
+ final EoParser.HapplicationHeadExtendedContext ctx
) {
// Nothing here
}
@Override
@SuppressWarnings("PMD.ConfusingTernary")
- public void enterApplicable(final ProgramParser.ApplicableContext ctx) {
+ public void enterApplicable(final EoParser.ApplicableContext ctx) {
if (ctx.reversed() == null) {
this.startObject(ctx);
final String base;
@@ -350,345 +350,345 @@ public void enterApplicable(final ProgramParser.ApplicableContext ctx) {
}
@Override
- public void exitApplicable(final ProgramParser.ApplicableContext ctx) {
+ public void exitApplicable(final EoParser.ApplicableContext ctx) {
// Nothing here
}
@Override
- public void enterHapplicationTail(final ProgramParser.HapplicationTailContext ctx) {
+ public void enterHapplicationTail(final EoParser.HapplicationTailContext ctx) {
this.objects.enter();
}
@Override
- public void exitHapplicationTail(final ProgramParser.HapplicationTailContext ctx) {
+ public void exitHapplicationTail(final EoParser.HapplicationTailContext ctx) {
this.objects.leave();
}
@Override
- public void enterHapplicationArg(final ProgramParser.HapplicationArgContext ctx) {
+ public void enterHapplicationArg(final EoParser.HapplicationArgContext ctx) {
// Nothing here
}
@Override
- public void exitHapplicationArg(final ProgramParser.HapplicationArgContext ctx) {
+ public void exitHapplicationArg(final EoParser.HapplicationArgContext ctx) {
// Nothing here
}
@Override
public void enterHapplicationTailExtended(
- final ProgramParser.HapplicationTailExtendedContext ctx
+ final EoParser.HapplicationTailExtendedContext ctx
) {
this.objects.enter();
}
@Override
public void exitHapplicationTailExtended(
- final ProgramParser.HapplicationTailExtendedContext ctx
+ final EoParser.HapplicationTailExtendedContext ctx
) {
this.objects.leave();
}
@Override
public void enterHapplicationArgExtended(
- final ProgramParser.HapplicationArgExtendedContext ctx
+ final EoParser.HapplicationArgExtendedContext ctx
) {
// Nothing here
}
@Override
public void exitHapplicationArgExtended(
- final ProgramParser.HapplicationArgExtendedContext ctx
+ final EoParser.HapplicationArgExtendedContext ctx
) {
// Nothing here
}
@Override
- public void enterVapplication(final ProgramParser.VapplicationContext ctx) {
+ public void enterVapplication(final EoParser.VapplicationContext ctx) {
// Nothing here
}
@Override
- public void exitVapplication(final ProgramParser.VapplicationContext ctx) {
+ public void exitVapplication(final EoParser.VapplicationContext ctx) {
// Nothing here
}
@Override
- public void enterVapplicationHead(final ProgramParser.VapplicationHeadContext ctx) {
+ public void enterVapplicationHead(final EoParser.VapplicationHeadContext ctx) {
// Nothing here
}
@Override
- public void exitVapplicationHead(final ProgramParser.VapplicationHeadContext ctx) {
+ public void exitVapplicationHead(final EoParser.VapplicationHeadContext ctx) {
// Nothing here
}
@Override
- public void enterVapplicationHeadNamed(final ProgramParser.VapplicationHeadNamedContext ctx) {
+ public void enterVapplicationHeadNamed(final EoParser.VapplicationHeadNamedContext ctx) {
// Nothing here
}
@Override
- public void exitVapplicationHeadNamed(final ProgramParser.VapplicationHeadNamedContext ctx) {
+ public void exitVapplicationHeadNamed(final EoParser.VapplicationHeadNamedContext ctx) {
// Nothing here
}
@Override
- public void enterVapplicationArgs(final ProgramParser.VapplicationArgsContext ctx) {
+ public void enterVapplicationArgs(final EoParser.VapplicationArgsContext ctx) {
this.objects.enter();
}
@Override
- public void exitVapplicationArgs(final ProgramParser.VapplicationArgsContext ctx) {
+ public void exitVapplicationArgs(final EoParser.VapplicationArgsContext ctx) {
this.objects.leave();
}
@Override
public void enterVapplicationArgHapplication(
- final ProgramParser.VapplicationArgHapplicationContext ctx
+ final EoParser.VapplicationArgHapplicationContext ctx
) {
// Nothing here
}
@Override
public void exitVapplicationArgHapplication(
- final ProgramParser.VapplicationArgHapplicationContext ctx
+ final EoParser.VapplicationArgHapplicationContext ctx
) {
// Nothing here
}
@Override
public void enterVapplicationHeadAs(
- final ProgramParser.VapplicationHeadAsContext ctx
+ final EoParser.VapplicationHeadAsContext ctx
) {
// Nothing here
}
@Override
- public void exitVapplicationHeadAs(final ProgramParser.VapplicationHeadAsContext ctx) {
+ public void exitVapplicationHeadAs(final EoParser.VapplicationHeadAsContext ctx) {
// Nothing here
}
@Override
- public void enterVapplicationArgVanonym(final ProgramParser.VapplicationArgVanonymContext ctx) {
+ public void enterVapplicationArgVanonym(final EoParser.VapplicationArgVanonymContext ctx) {
this.startObject(ctx).prop("abstract").leave();
}
@Override
- public void exitVapplicationArgVanonym(final ProgramParser.VapplicationArgVanonymContext ctx) {
+ public void exitVapplicationArgVanonym(final EoParser.VapplicationArgVanonymContext ctx) {
// Nothing here
}
@Override
- public void enterVapplicationArgHanonym(final ProgramParser.VapplicationArgHanonymContext ctx) {
+ public void enterVapplicationArgHanonym(final EoParser.VapplicationArgHanonymContext ctx) {
// Nothing here
}
@Override
- public void exitVapplicationArgHanonym(final ProgramParser.VapplicationArgHanonymContext ctx) {
+ public void exitVapplicationArgHanonym(final EoParser.VapplicationArgHanonymContext ctx) {
// Nothing here
}
@Override
- public void enterHanonym(final ProgramParser.HanonymContext ctx) {
+ public void enterHanonym(final EoParser.HanonymContext ctx) {
this.startObject(ctx).prop("abstract").leave();
}
@Override
- public void exitHanonym(final ProgramParser.HanonymContext ctx) {
+ public void exitHanonym(final EoParser.HanonymContext ctx) {
// Nothing here
}
@Override
- public void enterHanonymInner(final ProgramParser.HanonymInnerContext ctx) {
+ public void enterHanonymInner(final EoParser.HanonymInnerContext ctx) {
this.objects.enter();
}
@Override
- public void exitHanonymInner(final ProgramParser.HanonymInnerContext ctx) {
+ public void exitHanonymInner(final EoParser.HanonymInnerContext ctx) {
this.objects.leave();
}
@Override
- public void enterAbstractees(final ProgramParser.AbstracteesContext ctx) {
+ public void enterAbstractees(final EoParser.AbstracteesContext ctx) {
this.objects.enter();
}
@Override
- public void exitAbstractees(final ProgramParser.AbstracteesContext ctx) {
+ public void exitAbstractees(final EoParser.AbstracteesContext ctx) {
this.objects.leave();
}
@Override
- public void enterInnerabstract(final ProgramParser.InnerabstractContext ctx) {
+ public void enterInnerabstract(final EoParser.InnerabstractContext ctx) {
this.startObject(ctx).prop("abstract").leave();
}
@Override
- public void exitInnerabstract(final ProgramParser.InnerabstractContext ctx) {
+ public void exitInnerabstract(final EoParser.InnerabstractContext ctx) {
// Nothing here
}
@Override
- public void enterAhead(final ProgramParser.AheadContext ctx) {
+ public void enterAhead(final EoParser.AheadContext ctx) {
// Nothing here
}
@Override
- public void exitAhead(final ProgramParser.AheadContext ctx) {
+ public void exitAhead(final EoParser.AheadContext ctx) {
// Nothing here
}
@Override
- public void enterMethod(final ProgramParser.MethodContext ctx) {
+ public void enterMethod(final EoParser.MethodContext ctx) {
// Nothing here
}
@Override
- public void exitMethod(final ProgramParser.MethodContext ctx) {
+ public void exitMethod(final EoParser.MethodContext ctx) {
// Nothing here
}
@Override
- public void enterMethodNamed(final ProgramParser.MethodNamedContext ctx) {
+ public void enterMethodNamed(final EoParser.MethodNamedContext ctx) {
// Nothing here
}
@Override
- public void exitMethodNamed(final ProgramParser.MethodNamedContext ctx) {
+ public void exitMethodNamed(final EoParser.MethodNamedContext ctx) {
// Nothing here
}
@Override
- public void enterMethodAs(final ProgramParser.MethodAsContext ctx) {
+ public void enterMethodAs(final EoParser.MethodAsContext ctx) {
// Nothing here
}
@Override
- public void exitMethodAs(final ProgramParser.MethodAsContext ctx) {
+ public void exitMethodAs(final EoParser.MethodAsContext ctx) {
// Nothing here
}
@Override
- public void enterHmethod(final ProgramParser.HmethodContext ctx) {
+ public void enterHmethod(final EoParser.HmethodContext ctx) {
// Nothing here
}
@Override
- public void exitHmethod(final ProgramParser.HmethodContext ctx) {
+ public void exitHmethod(final EoParser.HmethodContext ctx) {
// Nothing here
}
@Override
- public void enterHmethodExtended(final ProgramParser.HmethodExtendedContext ctx) {
+ public void enterHmethodExtended(final EoParser.HmethodExtendedContext ctx) {
// Nothing here
}
@Override
- public void exitHmethodExtended(final ProgramParser.HmethodExtendedContext ctx) {
+ public void exitHmethodExtended(final EoParser.HmethodExtendedContext ctx) {
// Nothing here
}
@Override
- public void enterHmethodVersioned(final ProgramParser.HmethodVersionedContext ctx) {
+ public void enterHmethodVersioned(final EoParser.HmethodVersionedContext ctx) {
// Nothing here
}
@Override
- public void exitHmethodVersioned(final ProgramParser.HmethodVersionedContext ctx) {
+ public void exitHmethodVersioned(final EoParser.HmethodVersionedContext ctx) {
// Nothing here
}
@Override
public void enterHmethodExtendedVersioned(
- final ProgramParser.HmethodExtendedVersionedContext ctx
+ final EoParser.HmethodExtendedVersionedContext ctx
) {
// Nothing here
}
@Override
public void exitHmethodExtendedVersioned(
- final ProgramParser.HmethodExtendedVersionedContext ctx
+ final EoParser.HmethodExtendedVersionedContext ctx
) {
// Nothing here
}
@Override
- public void enterHmethodHead(final ProgramParser.HmethodHeadContext ctx) {
+ public void enterHmethodHead(final EoParser.HmethodHeadContext ctx) {
// Nothing here
}
@Override
- public void exitHmethodHead(final ProgramParser.HmethodHeadContext ctx) {
+ public void exitHmethodHead(final EoParser.HmethodHeadContext ctx) {
// Nothing here
}
@Override
- public void enterHmethodHeadExtended(final ProgramParser.HmethodHeadExtendedContext ctx) {
+ public void enterHmethodHeadExtended(final EoParser.HmethodHeadExtendedContext ctx) {
// Nothing here
}
@Override
- public void exitHmethodHeadExtended(final ProgramParser.HmethodHeadExtendedContext ctx) {
+ public void exitHmethodHeadExtended(final EoParser.HmethodHeadExtendedContext ctx) {
// Nothing here
}
@Override
- public void enterVmethod(final ProgramParser.VmethodContext ctx) {
+ public void enterVmethod(final EoParser.VmethodContext ctx) {
// Nothing here
}
@Override
- public void exitVmethod(final ProgramParser.VmethodContext ctx) {
+ public void exitVmethod(final EoParser.VmethodContext ctx) {
// Nothing here
}
@Override
- public void enterVmethodVersioned(final ProgramParser.VmethodVersionedContext ctx) {
+ public void enterVmethodVersioned(final EoParser.VmethodVersionedContext ctx) {
// Nothing here
}
@Override
- public void exitVmethodVersioned(final ProgramParser.VmethodVersionedContext ctx) {
+ public void exitVmethodVersioned(final EoParser.VmethodVersionedContext ctx) {
// Nothing here
}
@Override
- public void enterVmethodHead(final ProgramParser.VmethodHeadContext ctx) {
+ public void enterVmethodHead(final EoParser.VmethodHeadContext ctx) {
// Nothing here
}
@Override
- public void exitVmethodHead(final ProgramParser.VmethodHeadContext ctx) {
+ public void exitVmethodHead(final EoParser.VmethodHeadContext ctx) {
// Nothing here
}
@Override
- public void enterVmethodTail(final ProgramParser.VmethodTailContext ctx) {
+ public void enterVmethodTail(final EoParser.VmethodTailContext ctx) {
// Nothing here
}
@Override
- public void exitVmethodTail(final ProgramParser.VmethodTailContext ctx) {
+ public void exitVmethodTail(final EoParser.VmethodTailContext ctx) {
// Nothing here
}
@Override
- public void enterVmethodTailVersioned(final ProgramParser.VmethodTailVersionedContext ctx) {
+ public void enterVmethodTailVersioned(final EoParser.VmethodTailVersionedContext ctx) {
// Nothing here
}
@Override
- public void exitVmethodTailVersioned(final ProgramParser.VmethodTailVersionedContext ctx) {
+ public void exitVmethodTailVersioned(final EoParser.VmethodTailVersionedContext ctx) {
// Nothing here
}
@Override
- public void enterMethodTail(final ProgramParser.MethodTailContext ctx) {
+ public void enterMethodTail(final EoParser.MethodTailContext ctx) {
// Nothing here
}
@Override
- public void exitMethodTail(final ProgramParser.MethodTailContext ctx) {
+ public void exitMethodTail(final EoParser.MethodTailContext ctx) {
this.objects
.enter()
.prop("method")
@@ -698,20 +698,20 @@ public void exitMethodTail(final ProgramParser.MethodTailContext ctx) {
}
@Override
- public void enterMethodTailVersioned(final ProgramParser.MethodTailVersionedContext ctx) {
+ public void enterMethodTailVersioned(final EoParser.MethodTailVersionedContext ctx) {
this.startObject(ctx)
.prop("base", String.format(".%s", ctx.NAME().getText()))
.prop("method");
}
@Override
- public void exitMethodTailVersioned(final ProgramParser.MethodTailVersionedContext ctx) {
+ public void exitMethodTailVersioned(final EoParser.MethodTailVersionedContext ctx) {
this.objects.leave();
}
@Override
@SuppressWarnings("PMD.ConfusingTernary")
- public void enterBeginner(final ProgramParser.BeginnerContext ctx) {
+ public void enterBeginner(final EoParser.BeginnerContext ctx) {
this.startObject(ctx);
if (ctx.data() == null) {
final String base;
@@ -734,13 +734,13 @@ public void enterBeginner(final ProgramParser.BeginnerContext ctx) {
}
@Override
- public void exitBeginner(final ProgramParser.BeginnerContext ctx) {
+ public void exitBeginner(final EoParser.BeginnerContext ctx) {
this.objects.leave();
}
@Override
@SuppressWarnings("PMD.ConfusingTernary")
- public void enterFinisher(final ProgramParser.FinisherContext ctx) {
+ public void enterFinisher(final EoParser.FinisherContext ctx) {
this.startObject(ctx);
final String base;
if (ctx.NAME() != null) {
@@ -762,49 +762,49 @@ public void enterFinisher(final ProgramParser.FinisherContext ctx) {
}
@Override
- public void exitFinisher(final ProgramParser.FinisherContext ctx) {
+ public void exitFinisher(final EoParser.FinisherContext ctx) {
this.objects.leave();
}
@Override
- public void enterFinisherCopied(final ProgramParser.FinisherCopiedContext ctx) {
+ public void enterFinisherCopied(final EoParser.FinisherCopiedContext ctx) {
// Nothing here
}
@Override
- public void exitFinisherCopied(final ProgramParser.FinisherCopiedContext ctx) {
+ public void exitFinisherCopied(final EoParser.FinisherCopiedContext ctx) {
if (ctx.COPY() != null) {
this.objects.enter().prop("copy").leave();
}
}
@Override
- public void enterVersioned(final ProgramParser.VersionedContext ctx) {
+ public void enterVersioned(final EoParser.VersionedContext ctx) {
this.startObject(ctx).prop("base", ctx.NAME().getText());
}
@Override
- public void exitVersioned(final ProgramParser.VersionedContext ctx) {
+ public void exitVersioned(final EoParser.VersionedContext ctx) {
this.objects.leave();
}
@Override
- public void enterReversed(final ProgramParser.ReversedContext ctx) {
+ public void enterReversed(final EoParser.ReversedContext ctx) {
// Nothing here
}
@Override
- public void exitReversed(final ProgramParser.ReversedContext ctx) {
+ public void exitReversed(final EoParser.ReversedContext ctx) {
this.objects.enter().xprop("base", "concat('.',@base)").leave();
}
@Override
- public void enterOname(final ProgramParser.OnameContext ctx) {
+ public void enterOname(final EoParser.OnameContext ctx) {
// Nothing here
}
@Override
- public void exitOname(final ProgramParser.OnameContext ctx) {
+ public void exitOname(final EoParser.OnameContext ctx) {
if (ctx.CONST() != null) {
this.objects.enter().prop("const").leave();
}
@@ -812,7 +812,7 @@ public void exitOname(final ProgramParser.OnameContext ctx) {
@Override
@SuppressWarnings("PMD.ConfusingTernary")
- public void enterSuffix(final ProgramParser.SuffixContext ctx) {
+ public void enterSuffix(final EoParser.SuffixContext ctx) {
this.objects.enter();
if (ctx.AT() != null) {
this.objects.prop("name", ctx.AT().getText());
@@ -822,44 +822,44 @@ public void enterSuffix(final ProgramParser.SuffixContext ctx) {
}
@Override
- public void exitSuffix(final ProgramParser.SuffixContext ctx) {
+ public void exitSuffix(final EoParser.SuffixContext ctx) {
this.objects.leave();
}
@Override
- public void enterScope(final ProgramParser.ScopeContext ctx) {
+ public void enterScope(final EoParser.ScopeContext ctx) {
// Nothing here
}
@Override
- public void exitScope(final ProgramParser.ScopeContext ctx) {
+ public void exitScope(final EoParser.ScopeContext ctx) {
// Nothing here
}
@Override
- public void enterScopeExtended(final ProgramParser.ScopeExtendedContext ctx) {
+ public void enterScopeExtended(final EoParser.ScopeExtendedContext ctx) {
// Nothing here
}
@Override
- public void exitScopeExtended(final ProgramParser.ScopeExtendedContext ctx) {
+ public void exitScopeExtended(final EoParser.ScopeExtendedContext ctx) {
// Nothing here
}
@Override
- public void enterVersion(final ProgramParser.VersionContext ctx) {
+ public void enterVersion(final EoParser.VersionContext ctx) {
if (ctx.VER() != null) {
this.objects.prop("ver", ctx.VER().getText());
}
}
@Override
- public void exitVersion(final ProgramParser.VersionContext ctx) {
+ public void exitVersion(final EoParser.VersionContext ctx) {
// Nothing here
}
@Override
- public void enterAs(final ProgramParser.AsContext ctx) {
+ public void enterAs(final EoParser.AsContext ctx) {
this.objects.enter();
final String has;
if (ctx.RHO() == null) {
@@ -871,13 +871,13 @@ public void enterAs(final ProgramParser.AsContext ctx) {
}
@Override
- public void exitAs(final ProgramParser.AsContext ctx) {
+ public void exitAs(final EoParser.AsContext ctx) {
this.objects.leave();
}
@Override
@SuppressWarnings("PMD.ConfusingTernary")
- public void enterData(final ProgramParser.DataContext ctx) {
+ public void enterData(final EoParser.DataContext ctx) {
final String type;
final String data;
final String base;
@@ -890,14 +890,14 @@ public void enterData(final ProgramParser.DataContext ctx) {
type = "bytes";
base = "bool";
if (Boolean.parseBoolean(text)) {
- data = XeListener.bytesToHex((byte) 0x01);
+ data = XeEoListener.bytesToHex((byte) 0x01);
} else {
- data = XeListener.bytesToHex((byte) 0x00);
+ data = XeEoListener.bytesToHex((byte) 0x00);
}
} else if (ctx.FLOAT() != null) {
type = "bytes";
base = "float";
- data = XeListener.bytesToHex(
+ data = XeEoListener.bytesToHex(
ByteBuffer
.allocate(Long.BYTES)
.putDouble(Double.parseDouble(text))
@@ -906,7 +906,7 @@ public void enterData(final ProgramParser.DataContext ctx) {
} else if (ctx.INT() != null) {
type = "bytes";
base = "int";
- data = XeListener.bytesToHex(
+ data = XeEoListener.bytesToHex(
ByteBuffer
.allocate(Long.BYTES)
.putLong(Long.parseLong(text))
@@ -915,7 +915,7 @@ public void enterData(final ProgramParser.DataContext ctx) {
} else if (ctx.HEX() != null) {
type = "bytes";
base = "int";
- data = XeListener.bytesToHex(
+ data = XeEoListener.bytesToHex(
ByteBuffer
.allocate(Long.BYTES)
.putLong(Long.parseLong(text.substring(2), 16))
@@ -924,7 +924,7 @@ public void enterData(final ProgramParser.DataContext ctx) {
} else if (ctx.STRING() != null) {
type = "bytes";
base = "string";
- data = XeListener.bytesToHex(
+ data = XeEoListener.bytesToHex(
StringEscapeUtils.unescapeJava(
text.substring(1, text.length() - 1)
).getBytes(StandardCharsets.UTF_8)
@@ -933,9 +933,9 @@ public void enterData(final ProgramParser.DataContext ctx) {
type = "bytes";
base = "string";
final int indent = ctx.getStart().getCharPositionInLine();
- data = XeListener.bytesToHex(
+ data = XeEoListener.bytesToHex(
StringEscapeUtils.unescapeJava(
- XeListener.trimMargin(text, indent)
+ XeEoListener.trimMargin(text, indent)
).getBytes(StandardCharsets.UTF_8)
);
} else {
@@ -954,7 +954,7 @@ public void enterData(final ProgramParser.DataContext ctx) {
}
@Override
- public void exitData(final ProgramParser.DataContext ctx) {
+ public void exitData(final EoParser.DataContext ctx) {
// Nothing here
}
@@ -1007,7 +1007,7 @@ private Objects startObject(final ParserRuleContext ctx) {
* @param ctx Program context.
* @return Original code.
*/
- private static String sourceText(final ProgramParser.ProgramContext ctx) {
+ private static String sourceText(final EoParser.ProgramContext ctx) {
return ctx.getStart().getInputStream().getText(
new Interval(
ctx.getStart().getStartIndex(),
diff --git a/eo-parser/src/main/java/org/eolang/parser/XePhiListener.java b/eo-parser/src/main/java/org/eolang/parser/XePhiListener.java
new file mode 100644
index 0000000000..01a2495f59
--- /dev/null
+++ b/eo-parser/src/main/java/org/eolang/parser/XePhiListener.java
@@ -0,0 +1,224 @@
+/*
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2016-2023 Objectionary.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+package org.eolang.parser;
+
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.tree.ErrorNode;
+import org.antlr.v4.runtime.tree.TerminalNode;
+
+/**
+ * The phi-calculus grammar listener for ANTLR4 walker.
+ *
+ * @checkstyle CyclomaticComplexityCheck (500 lines)
+ * @checkstyle ClassFanOutComplexityCheck (500 lines)
+ * @checkstyle MethodCountCheck (1300 lines)
+ * @since 0.34.0
+ */
+@SuppressWarnings({
+ "PMD.TooManyMethods",
+ "PMD.AvoidDuplicateLiterals",
+ "PMD.ExcessivePublicCount",
+ "PMD.ExcessiveClassLength"
+})
+public final class XePhiListener implements PhiListener {
+ @Override
+ public void enterProgram(PhiParser.ProgramContext ctx) {
+
+ }
+
+ @Override
+ public void exitProgram(PhiParser.ProgramContext ctx) {
+
+ }
+
+ @Override
+ public void enterObject(PhiParser.ObjectContext ctx) {
+
+ }
+
+ @Override
+ public void exitObject(PhiParser.ObjectContext ctx) {
+
+ }
+
+ @Override
+ public void enterFormation(PhiParser.FormationContext ctx) {
+
+ }
+
+ @Override
+ public void exitFormation(PhiParser.FormationContext ctx) {
+
+ }
+
+ @Override
+ public void enterBindings(PhiParser.BindingsContext ctx) {
+
+ }
+
+ @Override
+ public void exitBindings(PhiParser.BindingsContext ctx) {
+
+ }
+
+ @Override
+ public void enterBinding(PhiParser.BindingContext ctx) {
+
+ }
+
+ @Override
+ public void exitBinding(PhiParser.BindingContext ctx) {
+
+ }
+
+ @Override
+ public void enterAlphaBinding(PhiParser.AlphaBindingContext ctx) {
+
+ }
+
+ @Override
+ public void exitAlphaBinding(PhiParser.AlphaBindingContext ctx) {
+
+ }
+
+ @Override
+ public void enterAttribute(PhiParser.AttributeContext ctx) {
+
+ }
+
+ @Override
+ public void exitAttribute(PhiParser.AttributeContext ctx) {
+
+ }
+
+ @Override
+ public void enterAlpha(PhiParser.AlphaContext ctx) {
+
+ }
+
+ @Override
+ public void exitAlpha(PhiParser.AlphaContext ctx) {
+
+ }
+
+ @Override
+ public void enterEmptyBinding(PhiParser.EmptyBindingContext ctx) {
+
+ }
+
+ @Override
+ public void exitEmptyBinding(PhiParser.EmptyBindingContext ctx) {
+
+ }
+
+ @Override
+ public void enterDeltaBidning(PhiParser.DeltaBidningContext ctx) {
+
+ }
+
+ @Override
+ public void exitDeltaBidning(PhiParser.DeltaBidningContext ctx) {
+
+ }
+
+ @Override
+ public void enterLambdaBidning(PhiParser.LambdaBidningContext ctx) {
+
+ }
+
+ @Override
+ public void exitLambdaBidning(PhiParser.LambdaBidningContext ctx) {
+
+ }
+
+ @Override
+ public void enterApplication(PhiParser.ApplicationContext ctx) {
+
+ }
+
+ @Override
+ public void exitApplication(PhiParser.ApplicationContext ctx) {
+
+ }
+
+ @Override
+ public void enterBnds(PhiParser.BndsContext ctx) {
+
+ }
+
+ @Override
+ public void exitBnds(PhiParser.BndsContext ctx) {
+
+ }
+
+ @Override
+ public void enterDispatch(PhiParser.DispatchContext ctx) {
+
+ }
+
+ @Override
+ public void exitDispatch(PhiParser.DispatchContext ctx) {
+
+ }
+
+ @Override
+ public void enterAttrs(PhiParser.AttrsContext ctx) {
+
+ }
+
+ @Override
+ public void exitAttrs(PhiParser.AttrsContext ctx) {
+
+ }
+
+ @Override
+ public void enterTermination(PhiParser.TerminationContext ctx) {
+
+ }
+
+ @Override
+ public void exitTermination(PhiParser.TerminationContext ctx) {
+
+ }
+
+ @Override
+ public void visitTerminal(TerminalNode terminalNode) {
+
+ }
+
+ @Override
+ public void visitErrorNode(ErrorNode errorNode) {
+
+ }
+
+ @Override
+ public void enterEveryRule(ParserRuleContext parserRuleContext) {
+
+ }
+
+ @Override
+ public void exitEveryRule(ParserRuleContext parserRuleContext) {
+
+ }
+}
\ No newline at end of file
diff --git a/eo-parser/src/test/java/org/eolang/parser/EoLexerTest.java b/eo-parser/src/test/java/org/eolang/parser/EoIndentLexerTest.java
similarity index 85%
rename from eo-parser/src/test/java/org/eolang/parser/EoLexerTest.java
rename to eo-parser/src/test/java/org/eolang/parser/EoIndentLexerTest.java
index 15d2986c92..8288450018 100644
--- a/eo-parser/src/test/java/org/eolang/parser/EoLexerTest.java
+++ b/eo-parser/src/test/java/org/eolang/parser/EoIndentLexerTest.java
@@ -30,28 +30,28 @@
import org.junit.jupiter.api.Test;
/**
- * Test for {@link EoLexer}.
+ * Test for {@link EoIndentLexer}.
*
* @since 1.0
*/
-final class EoLexerTest {
+final class EoIndentLexerTest {
@Test
void emitsTab() throws IOException {
- final EoLexer lexer = new EoLexer(
+ final EoIndentLexer lexer = new EoIndentLexer(
new TextOf("\n ")
);
lexer.nextToken();
MatcherAssert.assertThat(
lexer.nextToken().getType(),
Matchers.is(
- ProgramParser.TAB
+ EoParser.TAB
)
);
}
@Test
void ensuresGrammarFile() throws IOException {
- final EoLexer lexer = new EoLexer(
+ final EoIndentLexer lexer = new EoIndentLexer(
new TextOf("")
);
MatcherAssert.assertThat(
@@ -64,21 +64,21 @@ void ensuresGrammarFile() throws IOException {
@Test
void emitsTabWhenEmptyLine() throws IOException {
- final EoLexer lexer = new EoLexer(
+ final EoIndentLexer lexer = new EoIndentLexer(
new TextOf("\n\n ")
);
lexer.nextToken();
MatcherAssert.assertThat(
lexer.nextToken().getType(),
Matchers.is(
- ProgramParser.TAB
+ EoParser.TAB
)
);
}
@Test
void emitsUntab() throws IOException {
- final EoLexer lexer = new EoLexer(
+ final EoIndentLexer lexer = new EoIndentLexer(
new TextOf("\n \n")
);
lexer.nextToken();
@@ -87,20 +87,20 @@ void emitsUntab() throws IOException {
MatcherAssert.assertThat(
lexer.nextToken().getType(),
Matchers.is(
- ProgramParser.UNTAB
+ EoParser.UNTAB
)
);
}
@Test
void readsEmptyString() throws IOException {
- final EoLexer lexer = new EoLexer(
+ final EoIndentLexer lexer = new EoIndentLexer(
new TextOf("")
);
MatcherAssert.assertThat(
lexer.nextToken().getType(),
Matchers.is(
- ProgramParser.EOF
+ EoParser.EOF
)
);
}
From e06b88d5ed961698b4e366e0294eb44d76085735 Mon Sep 17 00:00:00 2001
From: maxonfjvipon
Date: Tue, 5 Dec 2023 13:00:33 +0300
Subject: [PATCH 05/12] feat(#2642): grammar + listeners
---
.../src/main/antlr4/org/eolang/parser/Phi.g4 | 21 +-
.../java/org/eolang/parser/XeEoListener.java | 276 ++++++++--------
.../java/org/eolang/parser/XePhiListener.java | 311 ++++++++++++++----
.../java/EOorg/EOeolang/EOio/EOstdout.java | 7 +-
4 files changed, 404 insertions(+), 211 deletions(-)
diff --git a/eo-parser/src/main/antlr4/org/eolang/parser/Phi.g4 b/eo-parser/src/main/antlr4/org/eolang/parser/Phi.g4
index d61199e8f0..0761656ab8 100644
--- a/eo-parser/src/main/antlr4/org/eolang/parser/Phi.g4
+++ b/eo-parser/src/main/antlr4/org/eolang/parser/Phi.g4
@@ -68,14 +68,23 @@ bnds: (LB bindings RB)+
;
dispatch
- : (formation | termination) bnds? attrs
- | dispatch bnds attrs
- | HOME attrs
- | XI attrs
+ : (formation | termination) bnds? attr+ disp
+ | HOME attr+ disp
+ | XI attr+ disp
;
-attrs
- : (DOT attribute)+
+disp:
+ | dispBnds attr+ disp
+ ;
+
+// The rule was separately because it's used as
+// marker where it's needed to enter the object
+// in order to make application right
+dispBnds
+ : bnds
+ ;
+
+attr: DOT attribute
;
termination
diff --git a/eo-parser/src/main/java/org/eolang/parser/XeEoListener.java b/eo-parser/src/main/java/org/eolang/parser/XeEoListener.java
index aa3468dc9c..10f7fac50b 100644
--- a/eo-parser/src/main/java/org/eolang/parser/XeEoListener.java
+++ b/eo-parser/src/main/java/org/eolang/parser/XeEoListener.java
@@ -90,7 +90,7 @@ public XeEoListener(final String name) {
}
@Override
- public void enterProgram(final ProgramParser.ProgramContext ctx) {
+ public void enterProgram(final EoParser.ProgramContext ctx) {
this.dirs.add("program")
.attr("name", this.name)
.attr("version", Manifests.read("EO-Version"))
@@ -102,7 +102,7 @@ public void enterProgram(final ProgramParser.ProgramContext ctx) {
DateTimeFormatter.ISO_INSTANT
)
)
- .add("listing").set(XeListener.sourceText(ctx)).up()
+ .add("listing").set(XeEoListener.sourceText(ctx)).up()
.add("errors").up()
.add("sheets").up()
.add("license").up()
@@ -110,14 +110,14 @@ public void enterProgram(final ProgramParser.ProgramContext ctx) {
}
@Override
- public void exitProgram(final ProgramParser.ProgramContext ctx) {
+ public void exitProgram(final EoParser.ProgramContext ctx) {
this.dirs
.attr("ms", (System.nanoTime() - this.start) / (1000L * 1000L))
.up();
}
@Override
- public void enterLicense(final ProgramParser.LicenseContext ctx) {
+ public void enterLicense(final EoParser.LicenseContext ctx) {
this.dirs.addIf("license").set(
new Joined(
"\n",
@@ -130,12 +130,12 @@ public void enterLicense(final ProgramParser.LicenseContext ctx) {
}
@Override
- public void exitLicense(final ProgramParser.LicenseContext ctx) {
+ public void exitLicense(final EoParser.LicenseContext ctx) {
// Nothing here
}
@Override
- public void enterMetas(final ProgramParser.MetasContext ctx) {
+ public void enterMetas(final EoParser.MetasContext ctx) {
this.dirs.addIf("metas");
for (final TerminalNode node : ctx.META()) {
final String[] pair = node.getText().split(" ", 2);
@@ -157,54 +157,54 @@ public void enterMetas(final ProgramParser.MetasContext ctx) {
}
@Override
- public void exitMetas(final ProgramParser.MetasContext ctx) {
+ public void exitMetas(final EoParser.MetasContext ctx) {
// Nothing here
}
@Override
- public void enterObjects(final ProgramParser.ObjectsContext ctx) {
+ public void enterObjects(final EoParser.ObjectsContext ctx) {
this.dirs.add("objects");
}
@Override
- public void exitObjects(final ProgramParser.ObjectsContext ctx) {
+ public void exitObjects(final EoParser.ObjectsContext ctx) {
this.dirs.append(this.objects);
this.dirs.up();
}
@Override
- public void enterObject(final ProgramParser.ObjectContext ctx) {
+ public void enterObject(final EoParser.ObjectContext ctx) {
// Nothing here
}
@Override
- public void exitObject(final ProgramParser.ObjectContext ctx) {
+ public void exitObject(final EoParser.ObjectContext ctx) {
// Nothing here
}
@Override
- public void enterJust(final ProgramParser.JustContext ctx) {
+ public void enterJust(final EoParser.JustContext ctx) {
// Nothing here
}
@Override
- public void exitJust(final ProgramParser.JustContext ctx) {
+ public void exitJust(final EoParser.JustContext ctx) {
// Nothing here
}
@Override
- public void enterJustNamed(final ProgramParser.JustNamedContext ctx) {
+ public void enterJustNamed(final EoParser.JustNamedContext ctx) {
// Nothing here
}
@Override
- public void exitJustNamed(final ProgramParser.JustNamedContext ctx) {
+ public void exitJustNamed(final EoParser.JustNamedContext ctx) {
// Nothing here
}
@Override
@SuppressWarnings("PMD.ConfusingTernary")
- public void enterAtom(final ProgramParser.AtomContext ctx) {
+ public void enterAtom(final EoParser.AtomContext ctx) {
this.startObject(ctx);
if (ctx.type().NAME() != null) {
this.objects.prop("atom", ctx.type().NAME().getText());
@@ -215,117 +215,117 @@ public void enterAtom(final ProgramParser.AtomContext ctx) {
}
@Override
- public void exitAtom(final ProgramParser.AtomContext ctx) {
+ public void exitAtom(final EoParser.AtomContext ctx) {
// Nothing here
}
@Override
- public void enterAbstraction(final ProgramParser.AbstractionContext ctx) {
+ public void enterAbstraction(final EoParser.AbstractionContext ctx) {
this.startObject(ctx).prop("abstract").leave();
}
@Override
- public void exitAbstraction(final ProgramParser.AbstractionContext ctx) {
+ public void exitAbstraction(final EoParser.AbstractionContext ctx) {
// Nothing here
}
@Override
- public void enterInners(final ProgramParser.InnersContext ctx) {
+ public void enterInners(final EoParser.InnersContext ctx) {
this.objects.enter();
}
@Override
- public void exitInners(final ProgramParser.InnersContext ctx) {
+ public void exitInners(final EoParser.InnersContext ctx) {
this.objects.leave();
}
@Override
- public void enterAttributes(final ProgramParser.AttributesContext ctx) {
+ public void enterAttributes(final EoParser.AttributesContext ctx) {
this.objects.enter();
}
@Override
- public void exitAttributes(final ProgramParser.AttributesContext ctx) {
+ public void exitAttributes(final EoParser.AttributesContext ctx) {
this.objects.leave();
}
@Override
- public void enterAttribute(final ProgramParser.AttributeContext ctx) {
+ public void enterAttribute(final EoParser.AttributeContext ctx) {
this.startObject(ctx).prop("name", ctx.NAME().getText());
}
@Override
- public void exitAttribute(final ProgramParser.AttributeContext ctx) {
+ public void exitAttribute(final EoParser.AttributeContext ctx) {
this.objects.leave();
}
@Override
- public void enterType(final ProgramParser.TypeContext ctx) {
+ public void enterType(final EoParser.TypeContext ctx) {
// Nothing here
}
@Override
- public void exitType(final ProgramParser.TypeContext ctx) {
+ public void exitType(final EoParser.TypeContext ctx) {
// Nothing here
}
@Override
- public void enterApplication(final ProgramParser.ApplicationContext ctx) {
+ public void enterApplication(final EoParser.ApplicationContext ctx) {
// Nothing here
}
@Override
- public void exitApplication(final ProgramParser.ApplicationContext ctx) {
+ public void exitApplication(final EoParser.ApplicationContext ctx) {
// Nothing here
}
@Override
- public void enterHapplicationExtended(final ProgramParser.HapplicationExtendedContext ctx) {
+ public void enterHapplicationExtended(final EoParser.HapplicationExtendedContext ctx) {
// Nothing here
}
@Override
- public void exitHapplicationExtended(final ProgramParser.HapplicationExtendedContext ctx) {
+ public void exitHapplicationExtended(final EoParser.HapplicationExtendedContext ctx) {
// Nothing here
}
@Override
- public void enterHapplication(final ProgramParser.HapplicationContext ctx) {
+ public void enterHapplication(final EoParser.HapplicationContext ctx) {
// Nothing here
}
@Override
- public void exitHapplication(final ProgramParser.HapplicationContext ctx) {
+ public void exitHapplication(final EoParser.HapplicationContext ctx) {
// Nothing here
}
@Override
- public void enterHapplicationHead(final ProgramParser.HapplicationHeadContext ctx) {
+ public void enterHapplicationHead(final EoParser.HapplicationHeadContext ctx) {
// Nothing here
}
@Override
- public void exitHapplicationHead(final ProgramParser.HapplicationHeadContext ctx) {
+ public void exitHapplicationHead(final EoParser.HapplicationHeadContext ctx) {
// Nothing here
}
@Override
public void enterHapplicationHeadExtended(
- final ProgramParser.HapplicationHeadExtendedContext ctx
+ final EoParser.HapplicationHeadExtendedContext ctx
) {
// Nothing here
}
@Override
public void exitHapplicationHeadExtended(
- final ProgramParser.HapplicationHeadExtendedContext ctx
+ final EoParser.HapplicationHeadExtendedContext ctx
) {
// Nothing here
}
@Override
@SuppressWarnings("PMD.ConfusingTernary")
- public void enterApplicable(final ProgramParser.ApplicableContext ctx) {
+ public void enterApplicable(final EoParser.ApplicableContext ctx) {
if (ctx.reversed() == null) {
this.startObject(ctx);
final String base;
@@ -350,345 +350,345 @@ public void enterApplicable(final ProgramParser.ApplicableContext ctx) {
}
@Override
- public void exitApplicable(final ProgramParser.ApplicableContext ctx) {
+ public void exitApplicable(final EoParser.ApplicableContext ctx) {
// Nothing here
}
@Override
- public void enterHapplicationTail(final ProgramParser.HapplicationTailContext ctx) {
+ public void enterHapplicationTail(final EoParser.HapplicationTailContext ctx) {
this.objects.enter();
}
@Override
- public void exitHapplicationTail(final ProgramParser.HapplicationTailContext ctx) {
+ public void exitHapplicationTail(final EoParser.HapplicationTailContext ctx) {
this.objects.leave();
}
@Override
- public void enterHapplicationArg(final ProgramParser.HapplicationArgContext ctx) {
+ public void enterHapplicationArg(final EoParser.HapplicationArgContext ctx) {
// Nothing here
}
@Override
- public void exitHapplicationArg(final ProgramParser.HapplicationArgContext ctx) {
+ public void exitHapplicationArg(final EoParser.HapplicationArgContext ctx) {
// Nothing here
}
@Override
public void enterHapplicationTailExtended(
- final ProgramParser.HapplicationTailExtendedContext ctx
+ final EoParser.HapplicationTailExtendedContext ctx
) {
this.objects.enter();
}
@Override
public void exitHapplicationTailExtended(
- final ProgramParser.HapplicationTailExtendedContext ctx
+ final EoParser.HapplicationTailExtendedContext ctx
) {
this.objects.leave();
}
@Override
public void enterHapplicationArgExtended(
- final ProgramParser.HapplicationArgExtendedContext ctx
+ final EoParser.HapplicationArgExtendedContext ctx
) {
// Nothing here
}
@Override
public void exitHapplicationArgExtended(
- final ProgramParser.HapplicationArgExtendedContext ctx
+ final EoParser.HapplicationArgExtendedContext ctx
) {
// Nothing here
}
@Override
- public void enterVapplication(final ProgramParser.VapplicationContext ctx) {
+ public void enterVapplication(final EoParser.VapplicationContext ctx) {
// Nothing here
}
@Override
- public void exitVapplication(final ProgramParser.VapplicationContext ctx) {
+ public void exitVapplication(final EoParser.VapplicationContext ctx) {
// Nothing here
}
@Override
- public void enterVapplicationHead(final ProgramParser.VapplicationHeadContext ctx) {
+ public void enterVapplicationHead(final EoParser.VapplicationHeadContext ctx) {
// Nothing here
}
@Override
- public void exitVapplicationHead(final ProgramParser.VapplicationHeadContext ctx) {
+ public void exitVapplicationHead(final EoParser.VapplicationHeadContext ctx) {
// Nothing here
}
@Override
- public void enterVapplicationHeadNamed(final ProgramParser.VapplicationHeadNamedContext ctx) {
+ public void enterVapplicationHeadNamed(final EoParser.VapplicationHeadNamedContext ctx) {
// Nothing here
}
@Override
- public void exitVapplicationHeadNamed(final ProgramParser.VapplicationHeadNamedContext ctx) {
+ public void exitVapplicationHeadNamed(final EoParser.VapplicationHeadNamedContext ctx) {
// Nothing here
}
@Override
- public void enterVapplicationArgs(final ProgramParser.VapplicationArgsContext ctx) {
+ public void enterVapplicationArgs(final EoParser.VapplicationArgsContext ctx) {
this.objects.enter();
}
@Override
- public void exitVapplicationArgs(final ProgramParser.VapplicationArgsContext ctx) {
+ public void exitVapplicationArgs(final EoParser.VapplicationArgsContext ctx) {
this.objects.leave();
}
@Override
public void enterVapplicationArgHapplication(
- final ProgramParser.VapplicationArgHapplicationContext ctx
+ final EoParser.VapplicationArgHapplicationContext ctx
) {
// Nothing here
}
@Override
public void exitVapplicationArgHapplication(
- final ProgramParser.VapplicationArgHapplicationContext ctx
+ final EoParser.VapplicationArgHapplicationContext ctx
) {
// Nothing here
}
@Override
public void enterVapplicationHeadAs(
- final ProgramParser.VapplicationHeadAsContext ctx
+ final EoParser.VapplicationHeadAsContext ctx
) {
// Nothing here
}
@Override
- public void exitVapplicationHeadAs(final ProgramParser.VapplicationHeadAsContext ctx) {
+ public void exitVapplicationHeadAs(final EoParser.VapplicationHeadAsContext ctx) {
// Nothing here
}
@Override
- public void enterVapplicationArgVanonym(final ProgramParser.VapplicationArgVanonymContext ctx) {
+ public void enterVapplicationArgVanonym(final EoParser.VapplicationArgVanonymContext ctx) {
this.startObject(ctx).prop("abstract").leave();
}
@Override
- public void exitVapplicationArgVanonym(final ProgramParser.VapplicationArgVanonymContext ctx) {
+ public void exitVapplicationArgVanonym(final EoParser.VapplicationArgVanonymContext ctx) {
// Nothing here
}
@Override
- public void enterVapplicationArgHanonym(final ProgramParser.VapplicationArgHanonymContext ctx) {
+ public void enterVapplicationArgHanonym(final EoParser.VapplicationArgHanonymContext ctx) {
// Nothing here
}
@Override
- public void exitVapplicationArgHanonym(final ProgramParser.VapplicationArgHanonymContext ctx) {
+ public void exitVapplicationArgHanonym(final EoParser.VapplicationArgHanonymContext ctx) {
// Nothing here
}
@Override
- public void enterHanonym(final ProgramParser.HanonymContext ctx) {
+ public void enterHanonym(final EoParser.HanonymContext ctx) {
this.startObject(ctx).prop("abstract").leave();
}
@Override
- public void exitHanonym(final ProgramParser.HanonymContext ctx) {
+ public void exitHanonym(final EoParser.HanonymContext ctx) {
// Nothing here
}
@Override
- public void enterHanonymInner(final ProgramParser.HanonymInnerContext ctx) {
+ public void enterHanonymInner(final EoParser.HanonymInnerContext ctx) {
this.objects.enter();
}
@Override
- public void exitHanonymInner(final ProgramParser.HanonymInnerContext ctx) {
+ public void exitHanonymInner(final EoParser.HanonymInnerContext ctx) {
this.objects.leave();
}
@Override
- public void enterAbstractees(final ProgramParser.AbstracteesContext ctx) {
+ public void enterAbstractees(final EoParser.AbstracteesContext ctx) {
this.objects.enter();
}
@Override
- public void exitAbstractees(final ProgramParser.AbstracteesContext ctx) {
+ public void exitAbstractees(final EoParser.AbstracteesContext ctx) {
this.objects.leave();
}
@Override
- public void enterInnerabstract(final ProgramParser.InnerabstractContext ctx) {
+ public void enterInnerabstract(final EoParser.InnerabstractContext ctx) {
this.startObject(ctx).prop("abstract").leave();
}
@Override
- public void exitInnerabstract(final ProgramParser.InnerabstractContext ctx) {
+ public void exitInnerabstract(final EoParser.InnerabstractContext ctx) {
// Nothing here
}
@Override
- public void enterAhead(final ProgramParser.AheadContext ctx) {
+ public void enterAhead(final EoParser.AheadContext ctx) {
// Nothing here
}
@Override
- public void exitAhead(final ProgramParser.AheadContext ctx) {
+ public void exitAhead(final EoParser.AheadContext ctx) {
// Nothing here
}
@Override
- public void enterMethod(final ProgramParser.MethodContext ctx) {
+ public void enterMethod(final EoParser.MethodContext ctx) {
// Nothing here
}
@Override
- public void exitMethod(final ProgramParser.MethodContext ctx) {
+ public void exitMethod(final EoParser.MethodContext ctx) {
// Nothing here
}
@Override
- public void enterMethodNamed(final ProgramParser.MethodNamedContext ctx) {
+ public void enterMethodNamed(final EoParser.MethodNamedContext ctx) {
// Nothing here
}
@Override
- public void exitMethodNamed(final ProgramParser.MethodNamedContext ctx) {
+ public void exitMethodNamed(final EoParser.MethodNamedContext ctx) {
// Nothing here
}
@Override
- public void enterMethodAs(final ProgramParser.MethodAsContext ctx) {
+ public void enterMethodAs(final EoParser.MethodAsContext ctx) {
// Nothing here
}
@Override
- public void exitMethodAs(final ProgramParser.MethodAsContext ctx) {
+ public void exitMethodAs(final EoParser.MethodAsContext ctx) {
// Nothing here
}
@Override
- public void enterHmethod(final ProgramParser.HmethodContext ctx) {
+ public void enterHmethod(final EoParser.HmethodContext ctx) {
// Nothing here
}
@Override
- public void exitHmethod(final ProgramParser.HmethodContext ctx) {
+ public void exitHmethod(final EoParser.HmethodContext ctx) {
// Nothing here
}
@Override
- public void enterHmethodExtended(final ProgramParser.HmethodExtendedContext ctx) {
+ public void enterHmethodExtended(final EoParser.HmethodExtendedContext ctx) {
// Nothing here
}
@Override
- public void exitHmethodExtended(final ProgramParser.HmethodExtendedContext ctx) {
+ public void exitHmethodExtended(final EoParser.HmethodExtendedContext ctx) {
// Nothing here
}
@Override
- public void enterHmethodVersioned(final ProgramParser.HmethodVersionedContext ctx) {
+ public void enterHmethodVersioned(final EoParser.HmethodVersionedContext ctx) {
// Nothing here
}
@Override
- public void exitHmethodVersioned(final ProgramParser.HmethodVersionedContext ctx) {
+ public void exitHmethodVersioned(final EoParser.HmethodVersionedContext ctx) {
// Nothing here
}
@Override
public void enterHmethodExtendedVersioned(
- final ProgramParser.HmethodExtendedVersionedContext ctx
+ final EoParser.HmethodExtendedVersionedContext ctx
) {
// Nothing here
}
@Override
public void exitHmethodExtendedVersioned(
- final ProgramParser.HmethodExtendedVersionedContext ctx
+ final EoParser.HmethodExtendedVersionedContext ctx
) {
// Nothing here
}
@Override
- public void enterHmethodHead(final ProgramParser.HmethodHeadContext ctx) {
+ public void enterHmethodHead(final EoParser.HmethodHeadContext ctx) {
// Nothing here
}
@Override
- public void exitHmethodHead(final ProgramParser.HmethodHeadContext ctx) {
+ public void exitHmethodHead(final EoParser.HmethodHeadContext ctx) {
// Nothing here
}
@Override
- public void enterHmethodHeadExtended(final ProgramParser.HmethodHeadExtendedContext ctx) {
+ public void enterHmethodHeadExtended(final EoParser.HmethodHeadExtendedContext ctx) {
// Nothing here
}
@Override
- public void exitHmethodHeadExtended(final ProgramParser.HmethodHeadExtendedContext ctx) {
+ public void exitHmethodHeadExtended(final EoParser.HmethodHeadExtendedContext ctx) {
// Nothing here
}
@Override
- public void enterVmethod(final ProgramParser.VmethodContext ctx) {
+ public void enterVmethod(final EoParser.VmethodContext ctx) {
// Nothing here
}
@Override
- public void exitVmethod(final ProgramParser.VmethodContext ctx) {
+ public void exitVmethod(final EoParser.VmethodContext ctx) {
// Nothing here
}
@Override
- public void enterVmethodVersioned(final ProgramParser.VmethodVersionedContext ctx) {
+ public void enterVmethodVersioned(final EoParser.VmethodVersionedContext ctx) {
// Nothing here
}
@Override
- public void exitVmethodVersioned(final ProgramParser.VmethodVersionedContext ctx) {
+ public void exitVmethodVersioned(final EoParser.VmethodVersionedContext ctx) {
// Nothing here
}
@Override
- public void enterVmethodHead(final ProgramParser.VmethodHeadContext ctx) {
+ public void enterVmethodHead(final EoParser.VmethodHeadContext ctx) {
// Nothing here
}
@Override
- public void exitVmethodHead(final ProgramParser.VmethodHeadContext ctx) {
+ public void exitVmethodHead(final EoParser.VmethodHeadContext ctx) {
// Nothing here
}
@Override
- public void enterVmethodTail(final ProgramParser.VmethodTailContext ctx) {
+ public void enterVmethodTail(final EoParser.VmethodTailContext ctx) {
// Nothing here
}
@Override
- public void exitVmethodTail(final ProgramParser.VmethodTailContext ctx) {
+ public void exitVmethodTail(final EoParser.VmethodTailContext ctx) {
// Nothing here
}
@Override
- public void enterVmethodTailVersioned(final ProgramParser.VmethodTailVersionedContext ctx) {
+ public void enterVmethodTailVersioned(final EoParser.VmethodTailVersionedContext ctx) {
// Nothing here
}
@Override
- public void exitVmethodTailVersioned(final ProgramParser.VmethodTailVersionedContext ctx) {
+ public void exitVmethodTailVersioned(final EoParser.VmethodTailVersionedContext ctx) {
// Nothing here
}
@Override
- public void enterMethodTail(final ProgramParser.MethodTailContext ctx) {
+ public void enterMethodTail(final EoParser.MethodTailContext ctx) {
// Nothing here
}
@Override
- public void exitMethodTail(final ProgramParser.MethodTailContext ctx) {
+ public void exitMethodTail(final EoParser.MethodTailContext ctx) {
this.objects
.enter()
.prop("method")
@@ -698,20 +698,20 @@ public void exitMethodTail(final ProgramParser.MethodTailContext ctx) {
}
@Override
- public void enterMethodTailVersioned(final ProgramParser.MethodTailVersionedContext ctx) {
+ public void enterMethodTailVersioned(final EoParser.MethodTailVersionedContext ctx) {
this.startObject(ctx)
.prop("base", String.format(".%s", ctx.NAME().getText()))
.prop("method");
}
@Override
- public void exitMethodTailVersioned(final ProgramParser.MethodTailVersionedContext ctx) {
+ public void exitMethodTailVersioned(final EoParser.MethodTailVersionedContext ctx) {
this.objects.leave();
}
@Override
@SuppressWarnings("PMD.ConfusingTernary")
- public void enterBeginner(final ProgramParser.BeginnerContext ctx) {
+ public void enterBeginner(final EoParser.BeginnerContext ctx) {
this.startObject(ctx);
if (ctx.data() == null) {
final String base;
@@ -734,13 +734,13 @@ public void enterBeginner(final ProgramParser.BeginnerContext ctx) {
}
@Override
- public void exitBeginner(final ProgramParser.BeginnerContext ctx) {
+ public void exitBeginner(final EoParser.BeginnerContext ctx) {
this.objects.leave();
}
@Override
@SuppressWarnings("PMD.ConfusingTernary")
- public void enterFinisher(final ProgramParser.FinisherContext ctx) {
+ public void enterFinisher(final EoParser.FinisherContext ctx) {
this.startObject(ctx);
final String base;
if (ctx.NAME() != null) {
@@ -762,49 +762,49 @@ public void enterFinisher(final ProgramParser.FinisherContext ctx) {
}
@Override
- public void exitFinisher(final ProgramParser.FinisherContext ctx) {
+ public void exitFinisher(final EoParser.FinisherContext ctx) {
this.objects.leave();
}
@Override
- public void enterFinisherCopied(final ProgramParser.FinisherCopiedContext ctx) {
+ public void enterFinisherCopied(final EoParser.FinisherCopiedContext ctx) {
// Nothing here
}
@Override
- public void exitFinisherCopied(final ProgramParser.FinisherCopiedContext ctx) {
+ public void exitFinisherCopied(final EoParser.FinisherCopiedContext ctx) {
if (ctx.COPY() != null) {
this.objects.enter().prop("copy").leave();
}
}
@Override
- public void enterVersioned(final ProgramParser.VersionedContext ctx) {
+ public void enterVersioned(final EoParser.VersionedContext ctx) {
this.startObject(ctx).prop("base", ctx.NAME().getText());
}
@Override
- public void exitVersioned(final ProgramParser.VersionedContext ctx) {
+ public void exitVersioned(final EoParser.VersionedContext ctx) {
this.objects.leave();
}
@Override
- public void enterReversed(final ProgramParser.ReversedContext ctx) {
+ public void enterReversed(final EoParser.ReversedContext ctx) {
// Nothing here
}
@Override
- public void exitReversed(final ProgramParser.ReversedContext ctx) {
+ public void exitReversed(final EoParser.ReversedContext ctx) {
this.objects.enter().xprop("base", "concat('.',@base)").leave();
}
@Override
- public void enterOname(final ProgramParser.OnameContext ctx) {
+ public void enterOname(final EoParser.OnameContext ctx) {
// Nothing here
}
@Override
- public void exitOname(final ProgramParser.OnameContext ctx) {
+ public void exitOname(final EoParser.OnameContext ctx) {
if (ctx.CONST() != null) {
this.objects.enter().prop("const").leave();
}
@@ -812,7 +812,7 @@ public void exitOname(final ProgramParser.OnameContext ctx) {
@Override
@SuppressWarnings("PMD.ConfusingTernary")
- public void enterSuffix(final ProgramParser.SuffixContext ctx) {
+ public void enterSuffix(final EoParser.SuffixContext ctx) {
this.objects.enter();
if (ctx.AT() != null) {
this.objects.prop("name", ctx.AT().getText());
@@ -822,44 +822,44 @@ public void enterSuffix(final ProgramParser.SuffixContext ctx) {
}
@Override
- public void exitSuffix(final ProgramParser.SuffixContext ctx) {
+ public void exitSuffix(final EoParser.SuffixContext ctx) {
this.objects.leave();
}
@Override
- public void enterScope(final ProgramParser.ScopeContext ctx) {
+ public void enterScope(final EoParser.ScopeContext ctx) {
// Nothing here
}
@Override
- public void exitScope(final ProgramParser.ScopeContext ctx) {
+ public void exitScope(final EoParser.ScopeContext ctx) {
// Nothing here
}
@Override
- public void enterScopeExtended(final ProgramParser.ScopeExtendedContext ctx) {
+ public void enterScopeExtended(final EoParser.ScopeExtendedContext ctx) {
// Nothing here
}
@Override
- public void exitScopeExtended(final ProgramParser.ScopeExtendedContext ctx) {
+ public void exitScopeExtended(final EoParser.ScopeExtendedContext ctx) {
// Nothing here
}
@Override
- public void enterVersion(final ProgramParser.VersionContext ctx) {
+ public void enterVersion(final EoParser.VersionContext ctx) {
if (ctx.VER() != null) {
this.objects.prop("ver", ctx.VER().getText());
}
}
@Override
- public void exitVersion(final ProgramParser.VersionContext ctx) {
+ public void exitVersion(final EoParser.VersionContext ctx) {
// Nothing here
}
@Override
- public void enterAs(final ProgramParser.AsContext ctx) {
+ public void enterAs(final EoParser.AsContext ctx) {
this.objects.enter();
final String has;
if (ctx.RHO() == null) {
@@ -871,13 +871,13 @@ public void enterAs(final ProgramParser.AsContext ctx) {
}
@Override
- public void exitAs(final ProgramParser.AsContext ctx) {
+ public void exitAs(final EoParser.AsContext ctx) {
this.objects.leave();
}
@Override
@SuppressWarnings("PMD.ConfusingTernary")
- public void enterData(final ProgramParser.DataContext ctx) {
+ public void enterData(final EoParser.DataContext ctx) {
final String type;
final String data;
final String base;
@@ -890,14 +890,14 @@ public void enterData(final ProgramParser.DataContext ctx) {
type = "bytes";
base = "bool";
if (Boolean.parseBoolean(text)) {
- data = XeListener.bytesToHex((byte) 0x01);
+ data = XeEoListener.bytesToHex((byte) 0x01);
} else {
- data = XeListener.bytesToHex((byte) 0x00);
+ data = XeEoListener.bytesToHex((byte) 0x00);
}
} else if (ctx.FLOAT() != null) {
type = "bytes";
base = "float";
- data = XeListener.bytesToHex(
+ data = XeEoListener.bytesToHex(
ByteBuffer
.allocate(Long.BYTES)
.putDouble(Double.parseDouble(text))
@@ -906,7 +906,7 @@ public void enterData(final ProgramParser.DataContext ctx) {
} else if (ctx.INT() != null) {
type = "bytes";
base = "int";
- data = XeListener.bytesToHex(
+ data = XeEoListener.bytesToHex(
ByteBuffer
.allocate(Long.BYTES)
.putLong(Long.parseLong(text))
@@ -915,7 +915,7 @@ public void enterData(final ProgramParser.DataContext ctx) {
} else if (ctx.HEX() != null) {
type = "bytes";
base = "int";
- data = XeListener.bytesToHex(
+ data = XeEoListener.bytesToHex(
ByteBuffer
.allocate(Long.BYTES)
.putLong(Long.parseLong(text.substring(2), 16))
@@ -924,7 +924,7 @@ public void enterData(final ProgramParser.DataContext ctx) {
} else if (ctx.STRING() != null) {
type = "bytes";
base = "string";
- data = XeListener.bytesToHex(
+ data = XeEoListener.bytesToHex(
StringEscapeUtils.unescapeJava(
text.substring(1, text.length() - 1)
).getBytes(StandardCharsets.UTF_8)
@@ -933,9 +933,9 @@ public void enterData(final ProgramParser.DataContext ctx) {
type = "bytes";
base = "string";
final int indent = ctx.getStart().getCharPositionInLine();
- data = XeListener.bytesToHex(
+ data = XeEoListener.bytesToHex(
StringEscapeUtils.unescapeJava(
- XeListener.trimMargin(text, indent)
+ XeEoListener.trimMargin(text, indent)
).getBytes(StandardCharsets.UTF_8)
);
} else {
@@ -954,7 +954,7 @@ public void enterData(final ProgramParser.DataContext ctx) {
}
@Override
- public void exitData(final ProgramParser.DataContext ctx) {
+ public void exitData(final EoParser.DataContext ctx) {
// Nothing here
}
@@ -1007,7 +1007,7 @@ private Objects startObject(final ParserRuleContext ctx) {
* @param ctx Program context.
* @return Original code.
*/
- private static String sourceText(final ProgramParser.ProgramContext ctx) {
+ private static String sourceText(final EoParser.ProgramContext ctx) {
return ctx.getStart().getInputStream().getText(
new Interval(
ctx.getStart().getStartIndex(),
diff --git a/eo-parser/src/main/java/org/eolang/parser/XePhiListener.java b/eo-parser/src/main/java/org/eolang/parser/XePhiListener.java
index 01a2495f59..716525d9d4 100644
--- a/eo-parser/src/main/java/org/eolang/parser/XePhiListener.java
+++ b/eo-parser/src/main/java/org/eolang/parser/XePhiListener.java
@@ -23,182 +23,323 @@
*/
package org.eolang.parser;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayDeque;
+import java.util.Collection;
+import java.util.Deque;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Optional;
+import java.util.Stack;
+import java.util.stream.Collectors;
import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.misc.Interval;
import org.antlr.v4.runtime.tree.ErrorNode;
import org.antlr.v4.runtime.tree.TerminalNode;
+import org.cactoos.list.ListOf;
+import org.xembly.Directive;
+import org.xembly.Directives;
-/**
- * The phi-calculus grammar listener for ANTLR4 walker.
- *
- * @checkstyle CyclomaticComplexityCheck (500 lines)
- * @checkstyle ClassFanOutComplexityCheck (500 lines)
- * @checkstyle MethodCountCheck (1300 lines)
- * @since 0.34.0
- */
-@SuppressWarnings({
- "PMD.TooManyMethods",
- "PMD.AvoidDuplicateLiterals",
- "PMD.ExcessivePublicCount",
- "PMD.ExcessiveClassLength"
-})
-public final class XePhiListener implements PhiListener {
- @Override
- public void enterProgram(PhiParser.ProgramContext ctx) {
+public final class XePhiListener implements PhiListener, Iterable {
+ /**
+ * Package lambda.
+ */
+ private static final String LAMBDA_PACKAGE = "Package";
- }
+ /**
+ * Xembly directives we are building (mutable).
+ */
+ private final Directives dirs;
- @Override
- public void exitProgram(PhiParser.ProgramContext ctx) {
+ /**
+ * Attributes stack.
+ */
+ private final Stack attributes;
- }
+ /**
+ * XMIR properties.
+ */
+ private final Stack properties;
- @Override
- public void enterObject(PhiParser.ObjectContext ctx) {
+ /**
+ * Objects.
+ */
+ private final Deque objects;
- }
+ /**
+ * Package.
+ */
+ private final Collection pckg;
- @Override
- public void exitObject(PhiParser.ObjectContext ctx) {
+ /**
+ * When we start.
+ */
+ private long start;
+ /**
+ * Ctor.
+ */
+ public XePhiListener() {
+ this.dirs = new Directives();
+ this.objects = new ArrayDeque<>();
+ this.attributes = new Stack<>();
+ this.properties = new Stack<>();
+ this.pckg = new ListOf<>();
}
@Override
- public void enterFormation(PhiParser.FormationContext ctx) {
-
+ public void enterProgram(final PhiParser.ProgramContext ctx) {
+ this.start = System.nanoTime();
+ this.objects.add(new Objects.ObjXembly());
+ this.dirs.add("program")
+// .attr("version", Manifests.read("EO-Version"))
+// .attr("revision", Manifests.read("EO-Revision"))
+// .attr("dob", Manifests.read("EO-Dob"))
+ .attr(
+ "time",
+ ZonedDateTime.now(ZoneOffset.UTC).format(DateTimeFormatter.ISO_INSTANT)
+ )
+ .add("listing").set(XePhiListener.sourceText(ctx)).up();
+ this.properties.push("name");
}
@Override
- public void exitFormation(PhiParser.FormationContext ctx) {
-
+ public void exitProgram(final PhiParser.ProgramContext ctx) {
+ this.properties.pop();
+ if (!this.pckg.isEmpty()) {
+ final String tail = String.join(".", this.pckg);
+ this.dirs.add("metas")
+ .add("meta")
+ .add("head").set("package").up()
+ .add("tail").set(tail).up()
+ .add("part").set(tail).up()
+ .up().up();
+ }
+ this.dirs.add("objects").append(this.objects.pollLast());
}
@Override
- public void enterBindings(PhiParser.BindingsContext ctx) {
-
+ public void enterObject(final PhiParser.ObjectContext ctx) {
}
@Override
- public void exitBindings(PhiParser.BindingsContext ctx) {
-
+ public void exitObject(final PhiParser.ObjectContext ctx) {
}
@Override
- public void enterBinding(PhiParser.BindingContext ctx) {
-
+ public void enterFormation(final PhiParser.FormationContext ctx) {
+ this.properties.push("name");
}
@Override
- public void exitBinding(PhiParser.BindingContext ctx) {
-
+ public void exitFormation(final PhiParser.FormationContext ctx) {
+ this.properties.pop();
+ if (!XePhiListener.hasLambdaPackage(ctx.bindings())) {
+ final String pop = this.attributes.pop();
+ System.out.printf("pop %s\n", pop);
+ this.objects()
+ .prop("abstract")
+ .prop("name", pop);
+ }
}
@Override
- public void enterAlphaBinding(PhiParser.AlphaBindingContext ctx) {
-
+ public void enterBindings(final PhiParser.BindingsContext ctx) {
+ if (XePhiListener.hasLambdaPackage(ctx)) {
+ this.pckg.add(this.attributes.peek());
+ this.objects.add(new Objects.ObjXembly());
+ }
}
@Override
- public void exitAlphaBinding(PhiParser.AlphaBindingContext ctx) {
+ public void exitBindings(final PhiParser.BindingsContext ctx) {
+ if (XePhiListener.hasLambdaPackage(ctx)) {
+ this.objects.poll();
+ }
+ }
+ @Override
+ public void enterBinding(final PhiParser.BindingContext ctx) {
+ if (ctx.alphaBinding() != null || ctx.emptyBinding() != null) {
+ this.objects().start();
+ }
}
@Override
- public void enterAttribute(PhiParser.AttributeContext ctx) {
+ public void exitBinding(final PhiParser.BindingContext ctx) {
+ if (ctx.alphaBinding() != null || ctx.emptyBinding() != null) {
+ if (this.objects.size() > this.pckg.size()) {
+ this.objects().leave();
+ }
+ }
+ }
+ @Override
+ public void enterAlphaBinding(final PhiParser.AlphaBindingContext ctx) {
}
@Override
- public void exitAttribute(PhiParser.AttributeContext ctx) {
+ public void exitAlphaBinding(final PhiParser.AlphaBindingContext ctx) {
}
@Override
- public void enterAlpha(PhiParser.AlphaContext ctx) {
-
+ public void enterAttribute(final PhiParser.AttributeContext ctx) {
+ final String attr;
+ if (ctx.PHI() != null) {
+ attr = "@";
+ } else if (ctx.RHO() != null) {
+ attr = "^";
+ } else if (ctx.SIGMA() != null) {
+ attr = "&";
+ } else if (ctx.VTX() != null) {
+ attr = "<";
+ } else if (ctx.LABEL() != null) {
+ attr = ctx.LABEL().getText();
+ } else if (ctx.alpha() != null) {
+ attr = ctx.alpha().INDEX().getText();
+ } else {
+ attr = "";
+ }
+ this.attributes.push(attr);
+ System.out.printf("push %s\n", attr);
}
@Override
- public void exitAlpha(PhiParser.AlphaContext ctx) {
+ public void exitAttribute(final PhiParser.AttributeContext ctx) {
}
@Override
- public void enterEmptyBinding(PhiParser.EmptyBindingContext ctx) {
+ public void enterAlpha(final PhiParser.AlphaContext ctx) {
}
@Override
- public void exitEmptyBinding(PhiParser.EmptyBindingContext ctx) {
+ public void exitAlpha(final PhiParser.AlphaContext ctx) {
}
@Override
- public void enterDeltaBidning(PhiParser.DeltaBidningContext ctx) {
-
+ public void enterEmptyBinding(final PhiParser.EmptyBindingContext ctx) {
}
@Override
- public void exitDeltaBidning(PhiParser.DeltaBidningContext ctx) {
+ public void exitEmptyBinding(final PhiParser.EmptyBindingContext ctx) {
+ final String pop = this.attributes.pop();
+ System.out.printf("pop %s\n", pop);
+ this.objects().prop("name", pop);
+ }
+ @Override
+ public void enterDeltaBidning(final PhiParser.DeltaBidningContext ctx) {
+ if (!ctx.BYTES().getText().equals("--")) {
+ this.objects().data(
+ ctx.BYTES().getText()
+ .replaceAll("-", " ")
+ .trim()
+ );
+ }
}
@Override
- public void enterLambdaBidning(PhiParser.LambdaBidningContext ctx) {
+ public void exitDeltaBidning(final PhiParser.DeltaBidningContext ctx) {
}
@Override
- public void exitLambdaBidning(PhiParser.LambdaBidningContext ctx) {
-
+ public void enterLambdaBidning(final PhiParser.LambdaBidningContext ctx) {
+ if (!ctx.FUNCTION().getText().equals(XePhiListener.LAMBDA_PACKAGE)) {
+ this.objects().prop("atom");
+ }
}
@Override
- public void enterApplication(PhiParser.ApplicationContext ctx) {
+ public void exitLambdaBidning(final PhiParser.LambdaBidningContext ctx) {
}
@Override
- public void exitApplication(PhiParser.ApplicationContext ctx) {
+ public void enterApplication(final PhiParser.ApplicationContext ctx) {
}
@Override
- public void enterBnds(PhiParser.BndsContext ctx) {
+ public void exitApplication(final PhiParser.ApplicationContext ctx) {
}
@Override
- public void exitBnds(PhiParser.BndsContext ctx) {
+ public void enterBnds(final PhiParser.BndsContext ctx) {
+ this.properties.push("as");
+ }
+ @Override
+ public void exitBnds(final PhiParser.BndsContext ctx) {
+ this.properties.pop();
}
@Override
- public void enterDispatch(PhiParser.DispatchContext ctx) {
+ public void enterDispatch(final PhiParser.DispatchContext ctx) {
+ if (ctx.HOME() != null) {
+ this.objects().prop("base", "Q").leave();
+ } else if (ctx.XI() != null) {
+ this.objects().prop("base", "$").leave();
+ }
+ }
+ @Override
+ public void exitDispatch(final PhiParser.DispatchContext ctx) {
+ this.objects().enter();
+ final String pop = this.attributes.pop();
+ System.out.printf("poped %s\n", pop);
+ if (!pop.isEmpty()) {
+ this.objects().prop(this.properties.peek(), pop);
+ }
}
@Override
- public void exitDispatch(PhiParser.DispatchContext ctx) {
+ public void enterDisp(PhiParser.DispContext ctx) {
+ }
+ @Override
+ public void exitDisp(PhiParser.DispContext ctx) {
}
@Override
- public void enterAttrs(PhiParser.AttrsContext ctx) {
+ public void enterDispBnds(PhiParser.DispBndsContext ctx) {
+ this.objects().enter();
+ }
+ @Override
+ public void exitDispBnds(PhiParser.DispBndsContext ctx) {
+ this.objects().leave();
}
@Override
- public void exitAttrs(PhiParser.AttrsContext ctx) {
+ public void enterAttr(final PhiParser.AttrContext ctx) {
+ this.objects().start();
+ }
+ @Override
+ public void exitAttr(final PhiParser.AttrContext ctx) {
+ final String pop = this.attributes.pop();
+ System.out.printf("poped %s\n", pop);
+ this.objects()
+ .prop("method")
+ .prop("base", String.format(".%s", pop))
+ .leave();
}
@Override
- public void enterTermination(PhiParser.TerminationContext ctx) {
+ public void enterTermination(final PhiParser.TerminationContext ctx) {
}
@Override
- public void exitTermination(PhiParser.TerminationContext ctx) {
+ public void exitTermination(final PhiParser.TerminationContext ctx) {
}
@@ -221,4 +362,46 @@ public void enterEveryRule(ParserRuleContext parserRuleContext) {
public void exitEveryRule(ParserRuleContext parserRuleContext) {
}
+
+ @Override
+ public Iterator iterator() {
+ return this.dirs.iterator();
+ }
+
+ private Objects objects() {
+ return this.objects.getLast();
+ }
+
+ private static boolean hasLambdaPackage(final PhiParser.BindingsContext ctx) {
+ return ctx.binding()
+ .stream()
+ .anyMatch(context -> context.lambdaBidning() != null
+ && context.lambdaBidning().FUNCTION().getText().equals(XePhiListener.LAMBDA_PACKAGE));
+ }
+
+// /**
+// * Start object.
+// * @param ctx Context.
+// * @return Started object.
+// */
+// private Objects startObject(final ParserRuleContext ctx) {
+// return this.objects.start(
+// ctx.getStart().getLine(),
+// ctx.getStart().getCharPositionInLine()
+// );
+// }
+
+ /**
+ * Text source code.
+ * @param ctx Program context.
+ * @return Original code.
+ */
+ private static String sourceText(final PhiParser.ProgramContext ctx) {
+ return ctx.getStart().getInputStream().getText(
+ new Interval(
+ ctx.getStart().getStartIndex(),
+ ctx.getStop().getStopIndex()
+ )
+ );
+ }
}
\ No newline at end of file
diff --git a/eo-runtime/src/main/java/EOorg/EOeolang/EOio/EOstdout.java b/eo-runtime/src/main/java/EOorg/EOeolang/EOio/EOstdout.java
index e06b73d113..497d839a4e 100644
--- a/eo-runtime/src/main/java/EOorg/EOeolang/EOio/EOstdout.java
+++ b/eo-runtime/src/main/java/EOorg/EOeolang/EOio/EOstdout.java
@@ -27,6 +27,8 @@
*/
package EOorg.EOeolang.EOio;
+import EOorg.EOeolang.EObool;
+import EOorg.EOeolang.EObytes;
import java.io.PrintStream;
import org.eolang.AtFree;
import org.eolang.AtLambda;
@@ -34,6 +36,7 @@
import org.eolang.Data;
import org.eolang.Param;
import org.eolang.PhDefault;
+import org.eolang.PhWith;
import org.eolang.Phi;
import org.eolang.Versionized;
import org.eolang.XmirObject;
@@ -73,9 +76,7 @@ public EOstdout(final Phi sigma) {
new AtLambda(
this,
rho -> {
- out.print(
- new Param(rho, "text").strong(String.class)
- );
+ out.print(new Param(rho, "text").strong(String.class));
return new Data.ToPhi(true);
}
)
From 492025b50e30c3653115eed5ef58f152a63b7794 Mon Sep 17 00:00:00 2001
From: maxonfjvipon
Date: Tue, 5 Dec 2023 15:34:22 +0300
Subject: [PATCH 06/12] feat(#2642): eo syntax
---
eo-maven-plugin/README.md | 2 +-
.../main/java/org/eolang/maven/ParseMojo.java | 15 +-
.../main/java/org/eolang/maven/UnphiMojo.java | 34 ++-
.../src/main/resources/log4j.properties | 2 +-
.../java/org/eolang/maven/JavaFilesTest.java | 17 +-
.../src/test/resources/log4j.properties | 2 +-
.../java/org/eolang/parser/CheckPack.java | 15 +-
.../main/java/org/eolang/parser/EoSyntax.java | 213 ++++++++++++++++++
.../java/org/eolang/parser/PhiSyntax.java | 15 ++
.../main/java/org/eolang/parser/Syntax.java | 209 +----------------
.../{SyntaxTest.java => EoSyntaxTest.java} | 137 +++++------
.../test/java/org/eolang/parser/XMIRTest.java | 14 +-
.../java/EOorg/EOeolang/EOio/EOstdout.java | 7 +-
13 files changed, 347 insertions(+), 335 deletions(-)
create mode 100644 eo-parser/src/main/java/org/eolang/parser/EoSyntax.java
create mode 100644 eo-parser/src/main/java/org/eolang/parser/PhiSyntax.java
rename eo-parser/src/test/java/org/eolang/parser/{SyntaxTest.java => EoSyntaxTest.java} (65%)
diff --git a/eo-maven-plugin/README.md b/eo-maven-plugin/README.md
index 21301692db..1ad15c25ac 100644
--- a/eo-maven-plugin/README.md
+++ b/eo-maven-plugin/README.md
@@ -82,7 +82,7 @@ binary code consists of a few high-level steps, which must be done
one after another:
* **Parsing**.
- It's done by the `org.eolang.parser.Syntax` class in the `eo-parser` module. It takes
+ It's done by the `org.eolang.parser.EoSyntax` class in the `eo-parser` module. It takes
the source code in a plain text format and parses into XML document,
using [ANTLR4](https://www.antlr.org/) and [Xembly](https://www.xembly.org).
The output of the parser you can find in the `target/eo/parse` directory.
diff --git a/eo-maven-plugin/src/main/java/org/eolang/maven/ParseMojo.java b/eo-maven-plugin/src/main/java/org/eolang/maven/ParseMojo.java
index d932fcfe32..d11b9ff8f0 100644
--- a/eo-maven-plugin/src/main/java/org/eolang/maven/ParseMojo.java
+++ b/eo-maven-plugin/src/main/java/org/eolang/maven/ParseMojo.java
@@ -48,7 +48,7 @@
import org.eolang.maven.footprint.FtDefault;
import org.eolang.maven.tojos.ForeignTojo;
import org.eolang.maven.util.Rel;
-import org.eolang.parser.Syntax;
+import org.eolang.parser.EoSyntax;
import org.xembly.Directives;
import org.xembly.Xembler;
@@ -154,19 +154,18 @@ private void parse(final ForeignTojo tojo) throws IOException {
name,
"xmir",
() -> {
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- new Syntax(
- name,
- new InputOf(source),
- new OutputTo(baos)
- ).parse();
final String parsed = new XMLDocument(
new Xembler(
new Directives().xpath("/program").attr(
"source",
source.toAbsolutePath()
)
- ).applyQuietly(new XMLDocument(baos.toByteArray()).node())
+ ).applyQuietly(
+ new EoSyntax(
+ name,
+ new InputOf(source)
+ ).parsed().node()
+ )
).toString();
Logger.debug(
this,
diff --git a/eo-maven-plugin/src/main/java/org/eolang/maven/UnphiMojo.java b/eo-maven-plugin/src/main/java/org/eolang/maven/UnphiMojo.java
index 0a25c3d3e8..c7192ce682 100644
--- a/eo-maven-plugin/src/main/java/org/eolang/maven/UnphiMojo.java
+++ b/eo-maven-plugin/src/main/java/org/eolang/maven/UnphiMojo.java
@@ -24,24 +24,26 @@
package org.eolang.maven;
import com.jcabi.log.Logger;
-import com.jcabi.xml.XMLDocument;
-import com.jcabi.xml.XSLDocument;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.Objects;
+import org.antlr.v4.runtime.CommonTokenStream;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.cactoos.Text;
import org.cactoos.experimental.Threads;
-import org.cactoos.io.ResourceOf;
+import org.cactoos.io.InputStreamOf;
import org.cactoos.iterable.Mapped;
import org.cactoos.number.SumOf;
-import org.cactoos.text.Sticky;
import org.cactoos.text.TextOf;
import org.eolang.maven.util.HmBase;
import org.eolang.maven.util.Home;
import org.eolang.maven.util.Walk;
+import org.eolang.parser.PhiLexer;
+import org.eolang.parser.PhiParser;
+import org.eolang.parser.XePhiListener;
/**
* Read PHI files and parse them to the XMIR.
@@ -89,7 +91,10 @@ public void exec() {
String.format(".%s", TranspileMojo.EXT)
)
);
- home.save(UnphiMojo.parsed(new TextOf(phi)), relative);
+ home.save(
+ UnphiMojo.parsed(new TextOf(phi), phi.getFileName().toString()),
+ relative
+ );
Logger.info(
this,
"Parsed to xmir: %s -> %s",
@@ -104,7 +109,22 @@ public void exec() {
Logger.info(this, "Parsed %d phi files to xmir", count);
}
- public static String parsed(final Text phi) {
- new
+ public static String parsed(final Text phi, final String name) {
+ PhiLexer lexer = new PhiLexer(
+ CharStreams.fromStream(new InputStreamOf(new TextOf(
+ Objects.requireNonNull(
+ Thread.currentThread()
+ .getContextClassLoader()
+ .getResourceAsStream("org/eolang/test.phi")
+ )
+ )))
+ );
+
+ CommonTokenStream tokens = new CommonTokenStream(lexer);
+
+ final XePhiListener xel = new XePhiListener(name);
+ final PhiParser parser = new PhiParser(
+ new CommonTokenStream(lexer)
+ );
}
}
diff --git a/eo-maven-plugin/src/main/resources/log4j.properties b/eo-maven-plugin/src/main/resources/log4j.properties
index 0d9b433c04..6398d644fc 100644
--- a/eo-maven-plugin/src/main/resources/log4j.properties
+++ b/eo-maven-plugin/src/main/resources/log4j.properties
@@ -6,7 +6,7 @@ log4j.appender.CONSOLE.layout.ConversionPattern=%d{HH:mm:ss} [%color{%p}] %c: %m
log4j.logger.org.eolang=INFO
log4j.logger.com.yegor256.xsline=INFO
-log4j.logger.org.eolang.parser.Syntax=INFO
+log4j.logger.org.eolang.parser.EoSyntax=INFO
log4j.logger.org.eolang.parser.Scenario=INFO
log4j.logger.org.eolang.parser.XMIRTest=INFO
log4j.logger.org.eolang.maven.SodgMojo=TRACE
diff --git a/eo-maven-plugin/src/test/java/org/eolang/maven/JavaFilesTest.java b/eo-maven-plugin/src/test/java/org/eolang/maven/JavaFilesTest.java
index 7a5d9e58a2..34f6e4acaa 100644
--- a/eo-maven-plugin/src/test/java/org/eolang/maven/JavaFilesTest.java
+++ b/eo-maven-plugin/src/test/java/org/eolang/maven/JavaFilesTest.java
@@ -23,9 +23,11 @@
*/
package org.eolang.maven;
+import com.jcabi.xml.XML;
import com.jcabi.xml.XMLDocument;
import com.yegor256.xsline.Xsline;
import java.io.ByteArrayOutputStream;
+import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.cactoos.io.InputOf;
@@ -33,7 +35,7 @@
import org.cactoos.io.ResourceOf;
import org.cactoos.text.TextOf;
import org.eolang.maven.util.HmBase;
-import org.eolang.parser.Syntax;
+import org.eolang.parser.EoSyntax;
import org.hamcrest.MatcherAssert;
import org.hamcrest.Matchers;
import org.junit.jupiter.api.BeforeEach;
@@ -50,17 +52,14 @@ class JavaFilesTest {
/**
* Parsed eo program from resources.
*/
- private XMLDocument xmir;
+ private XML xmir;
@BeforeEach
- void setUp() throws Exception {
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- new Syntax(
+ void setUp() throws IOException {
+ this.xmir = new EoSyntax(
"sum.eo",
- new ResourceOf("org/eolang/maven/sum.eo"),
- new OutputTo(baos)
- ).parse();
- this.xmir = new XMLDocument(baos.toByteArray());
+ new ResourceOf("org/eolang/maven/sum.eo")
+ ).parsed();
}
@Test
diff --git a/eo-maven-plugin/src/test/resources/log4j.properties b/eo-maven-plugin/src/test/resources/log4j.properties
index 15ae53fe0c..84d4c2a233 100644
--- a/eo-maven-plugin/src/test/resources/log4j.properties
+++ b/eo-maven-plugin/src/test/resources/log4j.properties
@@ -6,7 +6,7 @@ log4j.appender.CONSOLE.layout.ConversionPattern=%d{HH:mm:ss} [%p] %c: %m%n
log4j.logger.org.eolang=INFO
log4j.logger.com.jcabi.log.VerboseProcess=INFO
-log4j.logger.org.eolang.parser.Syntax=INFO
+log4j.logger.org.eolang.parser.EoSyntax=INFO
log4j.logger.org.eolang.parser.Program=INFO
log4j.logger.org.eolang.maven.SodgMojo=INFO
log4j.logger.org.eolang.maven.SodgMojoTest=INFO
diff --git a/eo-parser/src/main/java/org/eolang/parser/CheckPack.java b/eo-parser/src/main/java/org/eolang/parser/CheckPack.java
index 1e307a8691..46e85e0bee 100644
--- a/eo-parser/src/main/java/org/eolang/parser/CheckPack.java
+++ b/eo-parser/src/main/java/org/eolang/parser/CheckPack.java
@@ -70,15 +70,7 @@ public CheckPack(final String scrpt) {
public Collection failures() throws IOException {
final Yaml yaml = new Yaml();
final Map map = yaml.load(this.script);
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final String src = map.get("eo").toString();
- new Syntax(
- "scenario",
- new InputOf(String.format("%s\n", src)),
- new OutputTo(baos)
- ).parse();
- final XML xml = new XMLDocument(baos.toByteArray());
- baos.reset();
final Iterable xsls = (Iterable) map.get("xsls");
Train train = new ParsingTrain();
if (xsls != null) {
@@ -89,7 +81,12 @@ public Collection failures() throws IOException {
train = train.with(new StClasspath(xsl));
}
}
- final XML out = new Xsline(train).pass(xml);
+ final XML out = new Xsline(train).pass(
+ new EoSyntax(
+ "scenario",
+ new InputOf(String.format("%s\n", src))
+ ).parsed()
+ );
Logger.debug(this, "Output XML:\n%s", out);
final Collection failures = new LinkedList<>();
for (final String xpath : (Iterable) map.get("tests")) {
diff --git a/eo-parser/src/main/java/org/eolang/parser/EoSyntax.java b/eo-parser/src/main/java/org/eolang/parser/EoSyntax.java
new file mode 100644
index 0000000000..a1ca3c85e8
--- /dev/null
+++ b/eo-parser/src/main/java/org/eolang/parser/EoSyntax.java
@@ -0,0 +1,213 @@
+/*
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2016-2023 Objectionary.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+package org.eolang.parser;
+
+import com.jcabi.log.Logger;
+import com.jcabi.xml.XML;
+import com.jcabi.xml.XMLDocument;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import org.antlr.v4.runtime.ANTLRErrorListener;
+import org.antlr.v4.runtime.BaseErrorListener;
+import org.antlr.v4.runtime.CommonTokenStream;
+import org.antlr.v4.runtime.RecognitionException;
+import org.antlr.v4.runtime.Recognizer;
+import org.antlr.v4.runtime.tree.ParseTreeWalker;
+import org.cactoos.Input;
+import org.cactoos.Text;
+import org.cactoos.iterable.Mapped;
+import org.cactoos.list.ListOf;
+import org.cactoos.text.FormattedText;
+import org.cactoos.text.Joined;
+import org.cactoos.text.Split;
+import org.cactoos.text.TextOf;
+import org.xembly.Directive;
+import org.xembly.Directives;
+import org.xembly.Xembler;
+
+/**
+ * Syntax parser, from EO to XMIR, using ANTLR4.
+ *
+ * @since 0.1
+ * @checkstyle ClassFanOutComplexityCheck (500 lines)
+ */
+public final class EoSyntax implements Syntax {
+
+ /**
+ * The name of it.
+ */
+ private final String name;
+
+ /**
+ * Text to parse.
+ */
+ private final Input input;
+
+ /**
+ * Ctor.
+ *
+ * @param nme The name of it
+ * @param ipt Input text
+ */
+ public EoSyntax(final String nme, final Input ipt) {
+ this.name = nme;
+ this.input = ipt;
+ }
+
+ /**
+ * Compile it to XML and save.
+ *
+ * No exception will be thrown if the syntax is invalid. In any case, XMIR will
+ * be generated and saved. Read it in order to find the errors,
+ * at /program/errors XPath.
+ *
+ * @throws IOException If fails
+ */
+ public XML parsed() throws IOException {
+ final List lines = this.lines();
+ final ParsingErrors spy = new ParsingErrors(lines);
+ final EoLexer lexer = new EoIndentLexer(this.normalize());
+ lexer.removeErrorListeners();
+ lexer.addErrorListener(spy);
+ final EoParser parser = new EoParser(
+ new CommonTokenStream(lexer)
+ );
+ parser.removeErrorListeners();
+ parser.addErrorListener(spy);
+ final XeEoListener xel = new XeEoListener(this.name);
+ new ParseTreeWalker().walk(xel, parser.program());
+ final XML dom = new XMLDocument(
+ new Xembler(
+ new Directives(xel).append(spy)
+ ).domQuietly()
+ );
+ new Schema(dom).check();
+ if (spy.size() == 0) {
+ Logger.debug(this, "Input of %d EO lines compiled, no errors", lines.size());
+ } else {
+ Logger.debug(
+ this, "Input of %d EO lines failed to compile (%d errors)",
+ lines.size(), spy.size()
+ );
+ }
+ return dom;
+ }
+
+ /**
+ * Normalize input to UNIX format.
+ * Ensure EOL at EOF.
+ *
+ * @return UNIX formatted text.
+ */
+ private Text normalize() {
+ return new FormattedText(
+ "%s\n",
+ new Joined(new TextOf("\n"), this.lines())
+ );
+ }
+
+ /**
+ * Split input into lines.
+ * @return Lines without line breaks.
+ */
+ private List lines() {
+ return new ListOf<>(new Split(new TextOf(this.input), "\r?\n"));
+ }
+
+ /**
+ * Accumulates all parsing errors.
+ *
+ * @since 0.30.0
+ */
+ private static final class ParsingErrors extends BaseErrorListener
+ implements ANTLRErrorListener, Iterable {
+ /**
+ * Errors accumulated.
+ */
+ private final List errors;
+
+ /**
+ * The source.
+ */
+ private final List lines;
+
+ /**
+ * Ctor.
+ * @param src The source in lines
+ */
+ private ParsingErrors(final List src) {
+ this.errors = new LinkedList<>();
+ this.lines = src;
+ }
+
+ // @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
+ ) {
+ this.errors.add(
+ new ParsingException(
+ String.format(
+ "[%d:%d] %s: \"%s\"",
+ line, position, msg,
+ // @checkstyle AvoidInlineConditionalsCheck (1 line)
+ this.lines.size() < line ? "EOF" : this.lines.get(line - 1)
+ ),
+ error,
+ line
+ )
+ );
+ }
+
+ @Override
+ public Iterator iterator() {
+ return new org.cactoos.iterable.Joined<>(
+ new Mapped>(
+ error -> new Directives()
+ .xpath("/program/errors")
+ .add("error")
+ .attr("line", error.line())
+ .attr("severity", "critical")
+ .set(error.getMessage())
+ .up(),
+ this.errors
+ )
+ ).iterator();
+ }
+
+ /**
+ * How many errors?
+ * @return Count of errors accumulated
+ */
+ public int size() {
+ return this.errors.size();
+ }
+
+ }
+
+}
diff --git a/eo-parser/src/main/java/org/eolang/parser/PhiSyntax.java b/eo-parser/src/main/java/org/eolang/parser/PhiSyntax.java
new file mode 100644
index 0000000000..8ac25064f5
--- /dev/null
+++ b/eo-parser/src/main/java/org/eolang/parser/PhiSyntax.java
@@ -0,0 +1,15 @@
+package org.eolang.parser;
+
+import com.jcabi.xml.XML;
+import java.io.IOException;
+
+/**
+ * Syntax parser, from Phi-calculus to XMIR, using ANTLR4.
+ * @since 0.34.0
+ */
+public class PhiSyntax implements Syntax {
+ @Override
+ public XML parsed() throws IOException {
+ return null;
+ }
+}
diff --git a/eo-parser/src/main/java/org/eolang/parser/Syntax.java b/eo-parser/src/main/java/org/eolang/parser/Syntax.java
index a8fbc51a94..f2c7f0c31a 100644
--- a/eo-parser/src/main/java/org/eolang/parser/Syntax.java
+++ b/eo-parser/src/main/java/org/eolang/parser/Syntax.java
@@ -23,215 +23,18 @@
*/
package org.eolang.parser;
-import com.jcabi.log.Logger;
import com.jcabi.xml.XML;
-import com.jcabi.xml.XMLDocument;
import java.io.IOException;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import org.antlr.v4.runtime.ANTLRErrorListener;
-import org.antlr.v4.runtime.BaseErrorListener;
-import org.antlr.v4.runtime.CommonTokenStream;
-import org.antlr.v4.runtime.RecognitionException;
-import org.antlr.v4.runtime.Recognizer;
-import org.antlr.v4.runtime.tree.ParseTreeWalker;
-import org.cactoos.Input;
-import org.cactoos.Output;
-import org.cactoos.Text;
-import org.cactoos.io.InputOf;
-import org.cactoos.io.TeeInput;
-import org.cactoos.iterable.Mapped;
-import org.cactoos.list.ListOf;
-import org.cactoos.scalar.LengthOf;
-import org.cactoos.scalar.Unchecked;
-import org.cactoos.text.FormattedText;
-import org.cactoos.text.Joined;
-import org.cactoos.text.Split;
-import org.cactoos.text.TextOf;
-import org.xembly.Directive;
-import org.xembly.Directives;
-import org.xembly.Xembler;
/**
- * Syntax parser, from EO to XMIR, using ANTLR4.
- *
- * @since 0.1
- * @checkstyle ClassFanOutComplexityCheck (500 lines)
+ * Syntax parser, to XMIR, using ANTLR4.
+ * @since 0.34.0
*/
-public final class Syntax {
-
- /**
- * The name of it.
- */
- private final String name;
-
- /**
- * Text to parse.
- */
- private final Input input;
-
+public interface Syntax {
/**
- * Target to save XML to.
- */
- private final Output target;
-
- /**
- * Ctor.
- *
- * @param nme The name of it
- * @param ipt Input text
- * @param tgt Target
- * @checkstyle ParameterNumberCheck (10 lines)
- */
- public Syntax(
- final String nme,
- final Input ipt,
- final Output tgt
- ) {
- this.name = nme;
- this.input = ipt;
- this.target = tgt;
- }
-
- /**
- * Compile it to XML and save.
- *
- * No exception will be thrown if the syntax is invalid. In any case, XMIR will
- * be generated and saved. Read it in order to find the errors,
- * at /program/errors XPath.
- *
+ * Parse it to XML.
+ * @return Parsed XML
* @throws IOException If fails
*/
- public void parse() throws IOException {
- final List lines = this.lines();
- final ParsingErrors spy = new ParsingErrors(lines);
- final EoLexer lexer = new EoIndentLexer(this.normalize());
- lexer.removeErrorListeners();
- lexer.addErrorListener(spy);
- final EoParser parser = new EoParser(
- new CommonTokenStream(lexer)
- );
- parser.removeErrorListeners();
- parser.addErrorListener(spy);
- final XeEoListener xel = new XeEoListener(this.name);
- new ParseTreeWalker().walk(xel, parser.program());
- final XML dom = new XMLDocument(
- new Xembler(
- new Directives(xel).append(spy)
- ).domQuietly()
- );
- new Schema(dom).check();
- new Unchecked<>(
- new LengthOf(
- new TeeInput(
- new InputOf(dom.toString()),
- this.target
- )
- )
- ).value();
- if (spy.size() == 0) {
- Logger.debug(this, "Input of %d EO lines compiled, no errors", lines.size());
- } else {
- Logger.debug(
- this, "Input of %d EO lines failed to compile (%d errors)",
- lines.size(), spy.size()
- );
- }
- }
-
- /**
- * Normalize input to UNIX format.
- * Ensure EOL at EOF.
- *
- * @return UNIX formatted text.
- */
- private Text normalize() {
- return new FormattedText(
- "%s\n",
- new Joined(new TextOf("\n"), this.lines())
- );
- }
-
- /**
- * Split input into lines.
- * @return Lines without line breaks.
- */
- private List lines() {
- return new ListOf<>(new Split(new TextOf(this.input), "\r?\n"));
- }
-
- /**
- * Accumulates all parsing errors.
- *
- * @since 0.30.0
- */
- private static final class ParsingErrors extends BaseErrorListener
- implements ANTLRErrorListener, Iterable {
- /**
- * Errors accumulated.
- */
- private final List errors;
-
- /**
- * The source.
- */
- private final List lines;
-
- /**
- * Ctor.
- * @param src The source in lines
- */
- private ParsingErrors(final List src) {
- this.errors = new LinkedList<>();
- this.lines = src;
- }
-
- // @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
- ) {
- this.errors.add(
- new ParsingException(
- String.format(
- "[%d:%d] %s: \"%s\"",
- line, position, msg,
- // @checkstyle AvoidInlineConditionalsCheck (1 line)
- this.lines.size() < line ? "EOF" : this.lines.get(line - 1)
- ),
- error,
- line
- )
- );
- }
-
- @Override
- public Iterator iterator() {
- return new org.cactoos.iterable.Joined<>(
- new Mapped>(
- error -> new Directives()
- .xpath("/program/errors")
- .add("error")
- .attr("line", error.line())
- .attr("severity", "critical")
- .set(error.getMessage())
- .up(),
- this.errors
- )
- ).iterator();
- }
-
- /**
- * How many errors?
- * @return Count of errors accumulated
- */
- public int size() {
- return this.errors.size();
- }
-
- }
-
+ XML parsed() throws IOException;
}
diff --git a/eo-parser/src/test/java/org/eolang/parser/SyntaxTest.java b/eo-parser/src/test/java/org/eolang/parser/EoSyntaxTest.java
similarity index 65%
rename from eo-parser/src/test/java/org/eolang/parser/SyntaxTest.java
rename to eo-parser/src/test/java/org/eolang/parser/EoSyntaxTest.java
index 086b893373..a44ca86fa0 100644
--- a/eo-parser/src/test/java/org/eolang/parser/SyntaxTest.java
+++ b/eo-parser/src/test/java/org/eolang/parser/EoSyntaxTest.java
@@ -26,14 +26,10 @@
import com.jcabi.matchers.XhtmlMatchers;
import com.jcabi.xml.XML;
import com.jcabi.xml.XMLDocument;
-import com.yegor256.xsline.Xsline;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Map;
-import org.cactoos.io.DeadOutput;
import org.cactoos.io.InputOf;
-import org.cactoos.io.OutputTo;
import org.cactoos.io.ResourceOf;
import org.cactoos.text.TextOf;
import org.eolang.jucs.ClasspathSource;
@@ -47,24 +43,23 @@
import org.yaml.snakeyaml.Yaml;
/**
- * Test case for {@link Xsline}.
+ * Test case for {@link EoSyntax}.
*
* @since 0.1
*/
-final class SyntaxTest {
+final class EoSyntaxTest {
@Test
void parsesSimpleCode() throws Exception {
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- final Syntax syntax = new Syntax(
- "test-1",
- new ResourceOf("org/eolang/parser/fibonacci.eo"),
- new OutputTo(baos)
- );
- syntax.parse();
MatcherAssert.assertThat(
XhtmlMatchers.xhtml(
- new String(baos.toByteArray(), StandardCharsets.UTF_8)
+ new String(
+ new EoSyntax(
+ "test-1",
+ new ResourceOf("org/eolang/parser/fibonacci.eo")
+ ).parsed().toString().getBytes(),
+ StandardCharsets.UTF_8
+ )
),
XhtmlMatchers.hasXPaths(
"/program[@name='test-1']",
@@ -78,17 +73,16 @@ void parsesSimpleCode() throws Exception {
@Test
void printsProperListingEvenWhenSyntaxIsBroken() throws Exception {
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final String src = "# hello, world!\n\n[] > x-н, 1\n";
- final Syntax syntax = new Syntax(
- "test-44",
- new InputOf(src),
- new OutputTo(baos)
- );
- syntax.parse();
MatcherAssert.assertThat(
XhtmlMatchers.xhtml(
- new String(baos.toByteArray(), StandardCharsets.UTF_8)
+ new String(
+ new EoSyntax(
+ "test-44",
+ new InputOf(src)
+ ).parsed().toString().getBytes(),
+ StandardCharsets.UTF_8
+ )
),
XhtmlMatchers.hasXPaths(
"/program/errors[count(error)=2]",
@@ -99,18 +93,16 @@ void printsProperListingEvenWhenSyntaxIsBroken() throws Exception {
@Test
void copiesListingCorrectly() throws Exception {
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final String src = new TextOf(
new ResourceOf("org/eolang/parser/factorial.eo")
).asString();
- final Syntax syntax = new Syntax(
- "test-22",
- new InputOf(src),
- new OutputTo(baos)
- );
- syntax.parse();
final XML xml = new XMLDocument(
- new String(baos.toByteArray(), StandardCharsets.UTF_8)
+ new String(
+ new EoSyntax(
+ "test-22",
+ new InputOf(src)
+ ).parsed().toString().getBytes(),
+ StandardCharsets.UTF_8)
);
MatcherAssert.assertThat(
xml.xpath("/program/listing/text()"),
@@ -131,27 +123,22 @@ void copiesListingCorrectly() throws Exception {
"[] > x\n x ^ > @"
})
void parsesSuccessfully(final String code) {
- final Syntax syntax = new Syntax(
+ final EoSyntax syntax = new EoSyntax(
"test-2",
- new InputOf(code),
- new DeadOutput()
+ new InputOf(code)
);
Assertions.assertDoesNotThrow(
- syntax::parse
+ syntax::parsed
);
}
@Test
void parsesArrow() throws IOException {
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- final Syntax syntax = new Syntax(
- "test-it-3",
- new InputOf("1 > x"),
- new OutputTo(baos)
- );
- syntax.parse();
MatcherAssert.assertThat(
- new XMLDocument(baos.toByteArray()),
+ new EoSyntax(
+ "test-it-3",
+ new InputOf("1 > x")
+ ).parsed(),
XhtmlMatchers.hasXPaths(
"/program/objects/o[@base='int' and @name='x' and ends-with(text(), '1')]"
)
@@ -160,17 +147,13 @@ void parsesArrow() throws IOException {
@Test
void prasesNested() throws IOException {
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- final Syntax syntax = new Syntax(
- "test-it-4",
- new InputOf(
- "[] > base\n memory 0 > x\n [self] > f\n v > @\n v\n"
- ),
- new OutputTo(baos)
- );
- syntax.parse();
MatcherAssert.assertThat(
- new XMLDocument(baos.toByteArray()),
+ new EoSyntax(
+ "test-it-4",
+ new InputOf(
+ "[] > base\n memory 0 > x\n [self] > f\n v > @\n v\n"
+ )
+ ).parsed(),
XhtmlMatchers.hasXPaths(
"/program/objects[count(o)=1]",
"/program/objects/o[count(o)=2]"
@@ -180,17 +163,11 @@ void prasesNested() throws IOException {
@Test
void parsesDefinition() throws IOException {
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- final Syntax syntax = new Syntax(
- "test-it-5",
- new InputOf(
- "[v] > p\n f.write > @\n"
- ),
- new OutputTo(baos)
- );
- syntax.parse();
MatcherAssert.assertThat(
- new XMLDocument(baos.toByteArray()),
+ new EoSyntax(
+ "test-it-5",
+ new InputOf("[v] > p\n f.write > @\n")
+ ).parsed(),
XhtmlMatchers.hasXPaths(
"/program/objects[count(o)=1]",
"/program/objects/o[count(o)=3]"
@@ -200,15 +177,11 @@ void parsesDefinition() throws IOException {
@Test
void parsesMethodCalls() throws IOException {
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- final Syntax syntax = new Syntax(
- "test-it-1",
- new InputOf("add.\n 0\n TRUE"),
- new OutputTo(baos)
- );
- syntax.parse();
MatcherAssert.assertThat(
- new XMLDocument(baos.toByteArray()),
+ new EoSyntax(
+ "test-it-1",
+ new InputOf("add.\n 0\n TRUE")
+ ).parsed(),
XhtmlMatchers.hasXPaths(
"/program[@name='test-it-1']",
"/program/objects/o[@base='.add']",
@@ -224,15 +197,14 @@ void parsesMethodCalls() throws IOException {
"TRUE > true"
})
void storesAsBytes(final String code) throws IOException {
- final ByteArrayOutputStream output = new ByteArrayOutputStream();
- final Syntax syntax = new Syntax(
- "test-3",
- new InputOf(code),
- new OutputTo(output)
- );
- syntax.parse();
final XML xml = new XMLDocument(
- new String(output.toByteArray(), StandardCharsets.UTF_8)
+ new String(
+ new EoSyntax(
+ "test-3",
+ new InputOf(code)
+ ).parsed().toString().getBytes(),
+ StandardCharsets.UTF_8
+ )
);
MatcherAssert.assertThat(
xml,
@@ -249,13 +221,10 @@ void checksTypoPacks(final String yml) throws IOException, NumberFormatException
final Yaml yaml = new Yaml();
final Map map = yaml.load(yml);
Assumptions.assumeTrue(map.get("skip") == null);
- final ByteArrayOutputStream xmir = new ByteArrayOutputStream();
- new Syntax(
+ final XML xml = new EoSyntax(
"typo",
- new InputOf(String.format("%s\n", map.get("eo"))),
- new OutputTo(xmir)
- ).parse();
- final XML xml = new XMLDocument(xmir.toByteArray());
+ new InputOf(String.format("%s\n", map.get("eo")))
+ ).parsed();
MatcherAssert.assertThat(
XhtmlMatchers.xhtml(xml.toString()),
XhtmlMatchers.hasXPaths("/program/errors/error/@line")
diff --git a/eo-parser/src/test/java/org/eolang/parser/XMIRTest.java b/eo-parser/src/test/java/org/eolang/parser/XMIRTest.java
index 2998b237d3..d6f24b3a7e 100644
--- a/eo-parser/src/test/java/org/eolang/parser/XMIRTest.java
+++ b/eo-parser/src/test/java/org/eolang/parser/XMIRTest.java
@@ -86,15 +86,13 @@ void printsToEO(final String src) throws Exception {
* @throws IOException If fails
*/
private static XML parse(final String source) throws IOException {
- final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- final Syntax syntax = new Syntax(
- "test", new InputOf(source), new OutputTo(baos)
- );
- syntax.parse();
- final XSL wrap = new XSLDocument(
+ return new XSLDocument(
XMIRTest.class.getResourceAsStream("wrap-method-calls.xsl")
- ).with(new ClasspathSources());
- return wrap.transform(new XMLDocument(baos.toByteArray()));
+ ).with(new ClasspathSources()).transform(
+ new EoSyntax(
+ "test", new InputOf(source)
+ ).parsed()
+ );
}
/**
diff --git a/eo-runtime/src/main/java/EOorg/EOeolang/EOio/EOstdout.java b/eo-runtime/src/main/java/EOorg/EOeolang/EOio/EOstdout.java
index 497d839a4e..e06b73d113 100644
--- a/eo-runtime/src/main/java/EOorg/EOeolang/EOio/EOstdout.java
+++ b/eo-runtime/src/main/java/EOorg/EOeolang/EOio/EOstdout.java
@@ -27,8 +27,6 @@
*/
package EOorg.EOeolang.EOio;
-import EOorg.EOeolang.EObool;
-import EOorg.EOeolang.EObytes;
import java.io.PrintStream;
import org.eolang.AtFree;
import org.eolang.AtLambda;
@@ -36,7 +34,6 @@
import org.eolang.Data;
import org.eolang.Param;
import org.eolang.PhDefault;
-import org.eolang.PhWith;
import org.eolang.Phi;
import org.eolang.Versionized;
import org.eolang.XmirObject;
@@ -76,7 +73,9 @@ public EOstdout(final Phi sigma) {
new AtLambda(
this,
rho -> {
- out.print(new Param(rho, "text").strong(String.class));
+ out.print(
+ new Param(rho, "text").strong(String.class)
+ );
return new Data.ToPhi(true);
}
)
From fca20c2dbac591f2e1a3f1e8d46b150afae5d2cb Mon Sep 17 00:00:00 2001
From: maxonfjvipon
Date: Tue, 5 Dec 2023 15:45:32 +0300
Subject: [PATCH 07/12] feat(#2642): phi syntax
---
.../java/org/eolang/parser/PhiSyntax.java | 74 ++++++++++++++++++-
1 file changed, 73 insertions(+), 1 deletion(-)
diff --git a/eo-parser/src/main/java/org/eolang/parser/PhiSyntax.java b/eo-parser/src/main/java/org/eolang/parser/PhiSyntax.java
index 8ac25064f5..21188bfaa5 100644
--- a/eo-parser/src/main/java/org/eolang/parser/PhiSyntax.java
+++ b/eo-parser/src/main/java/org/eolang/parser/PhiSyntax.java
@@ -1,15 +1,87 @@
+/*
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2016-2023 Objectionary.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
package org.eolang.parser;
+import com.jcabi.log.Logger;
import com.jcabi.xml.XML;
+import com.jcabi.xml.XMLDocument;
import java.io.IOException;
+import org.antlr.v4.runtime.CharStreams;
+import org.antlr.v4.runtime.CommonTokenStream;
+import org.antlr.v4.runtime.tree.ParseTreeWalker;
+import org.cactoos.Text;
+import org.cactoos.io.InputStreamOf;
+import org.xembly.Directives;
+import org.xembly.Xembler;
/**
* Syntax parser, from Phi-calculus to XMIR, using ANTLR4.
* @since 0.34.0
*/
public class PhiSyntax implements Syntax {
+ /**
+ * Name of the program.
+ */
+ private final String name;
+
+ /**
+ * Input.
+ */
+ private final Text input;
+
+ /**
+ * Ctor.
+ * @param nme Name of the program
+ * @param inpt Input
+ */
+ public PhiSyntax(final String nme, final Text inpt) {
+ this.name = nme;
+ this.input = inpt;
+ }
+
@Override
public XML parsed() throws IOException {
- return null;
+ final XePhiListener xel = new XePhiListener(this.name);
+ new ParseTreeWalker().walk(
+ xel,
+ new PhiParser(
+ new CommonTokenStream(
+ new PhiLexer(
+ CharStreams.fromStream(
+ new InputStreamOf(this.input)
+ )
+ )
+ )
+ ).program()
+ );
+ final XML dom = new XMLDocument(
+ new Xembler(
+ new Directives(xel)
+ ).domQuietly()
+ );
+ new Schema(dom).check();
+ Logger.debug(this,"Input of PHI calculus compiled, no errors");
+ return dom;
}
}
From 4878ee956261d682e9ed317166c45b8e822ae3d2 Mon Sep 17 00:00:00 2001
From: maxonfjvipon
Date: Tue, 5 Dec 2023 16:02:09 +0300
Subject: [PATCH 08/12] feat(#2642): unphi
---
.../main/java/org/eolang/maven/UnphiMojo.java | 32 +++----------------
1 file changed, 5 insertions(+), 27 deletions(-)
diff --git a/eo-maven-plugin/src/main/java/org/eolang/maven/UnphiMojo.java b/eo-maven-plugin/src/main/java/org/eolang/maven/UnphiMojo.java
index c7192ce682..219fe01648 100644
--- a/eo-maven-plugin/src/main/java/org/eolang/maven/UnphiMojo.java
+++ b/eo-maven-plugin/src/main/java/org/eolang/maven/UnphiMojo.java
@@ -27,23 +27,17 @@
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
-import java.util.Objects;
-import org.antlr.v4.runtime.CommonTokenStream;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
-import org.cactoos.Text;
import org.cactoos.experimental.Threads;
-import org.cactoos.io.InputStreamOf;
import org.cactoos.iterable.Mapped;
import org.cactoos.number.SumOf;
import org.cactoos.text.TextOf;
import org.eolang.maven.util.HmBase;
import org.eolang.maven.util.Home;
import org.eolang.maven.util.Walk;
-import org.eolang.parser.PhiLexer;
-import org.eolang.parser.PhiParser;
-import org.eolang.parser.XePhiListener;
+import org.eolang.parser.PhiSyntax;
/**
* Read PHI files and parse them to the XMIR.
@@ -92,7 +86,10 @@ public void exec() {
)
);
home.save(
- UnphiMojo.parsed(new TextOf(phi), phi.getFileName().toString()),
+ new PhiSyntax(
+ phi.getFileName().toString(),
+ new TextOf(phi)
+ ).parsed().toString(),
relative
);
Logger.info(
@@ -108,23 +105,4 @@ public void exec() {
).intValue();
Logger.info(this, "Parsed %d phi files to xmir", count);
}
-
- public static String parsed(final Text phi, final String name) {
- PhiLexer lexer = new PhiLexer(
- CharStreams.fromStream(new InputStreamOf(new TextOf(
- Objects.requireNonNull(
- Thread.currentThread()
- .getContextClassLoader()
- .getResourceAsStream("org/eolang/test.phi")
- )
- )))
- );
-
- CommonTokenStream tokens = new CommonTokenStream(lexer);
-
- final XePhiListener xel = new XePhiListener(name);
- final PhiParser parser = new PhiParser(
- new CommonTokenStream(lexer)
- );
- }
}
From 767563caf41d93a553ad9ebfabde90c2163c3dd6 Mon Sep 17 00:00:00 2001
From: maxonfjvipon
Date: Tue, 5 Dec 2023 17:43:50 +0300
Subject: [PATCH 09/12] feat(#2642): unphi mojo tests
---
.../test/java/org/eolang/maven/FakeMaven.java | 10 ++
.../java/org/eolang/maven/UnphiMojoTest.java | 96 +++++++++++++++++++
.../java/org/eolang/parser/EoSyntaxTest.java | 1 -
3 files changed, 106 insertions(+), 1 deletion(-)
create mode 100644 eo-maven-plugin/src/test/java/org/eolang/maven/UnphiMojoTest.java
diff --git a/eo-maven-plugin/src/test/java/org/eolang/maven/FakeMaven.java b/eo-maven-plugin/src/test/java/org/eolang/maven/FakeMaven.java
index 261c5ff084..ee7b4d09ed 100644
--- a/eo-maven-plugin/src/test/java/org/eolang/maven/FakeMaven.java
+++ b/eo-maven-plugin/src/test/java/org/eolang/maven/FakeMaven.java
@@ -265,6 +265,16 @@ public FakeMaven execute(final Class mojo) throws IO
"phiOutputDir",
this.workspace.absolute(Paths.get("target/phi")).toFile()
);
+ this.params.putIfAbsent(
+ "unphiInputDir",
+ this.workspace.absolute(Paths.get("target/phi")).toFile()
+ );
+ this.params.putIfAbsent(
+ "unphiOutputDir",
+ this.workspace.absolute(
+ Paths.get(String.format("target/%s", ParseMojo.DIR))
+ ).toFile()
+ );
}
final Moja moja = new Moja<>(mojo);
for (final Map.Entry entry : this.allowedParams(mojo).entrySet()) {
diff --git a/eo-maven-plugin/src/test/java/org/eolang/maven/UnphiMojoTest.java b/eo-maven-plugin/src/test/java/org/eolang/maven/UnphiMojoTest.java
new file mode 100644
index 0000000000..0d7ee83b3a
--- /dev/null
+++ b/eo-maven-plugin/src/test/java/org/eolang/maven/UnphiMojoTest.java
@@ -0,0 +1,96 @@
+/*
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2016-2023 Objectionary.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+package org.eolang.maven;
+
+import com.jcabi.xml.XML;
+import com.jcabi.xml.XMLDocument;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import org.cactoos.list.ListOf;
+import org.cactoos.text.TextOf;
+import org.eolang.jucs.ClasspathSource;
+import org.eolang.maven.util.HmBase;
+import org.hamcrest.MatcherAssert;
+import org.hamcrest.Matchers;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.TempDir;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.yaml.snakeyaml.Yaml;
+
+/**
+ * Test cases for {@link UnphiMojo}.
+ * @since 0.34.0
+ */
+class UnphiMojoTest {
+ @Test
+ void createsFile(@TempDir final Path temp) throws Exception {
+ new HmBase(temp).save(
+ "{std ↦ Φ.org.eolang.io.stdout, y ↦ Φ.org.eolang.x}",
+ Paths.get("target/phi/std.phi")
+ );
+ MatcherAssert.assertThat(
+ String.format(
+ "There should be file with .%s extension after parsing phi to XMIR, but there isn't",
+ TranspileMojo.EXT
+ ),
+ new FakeMaven(temp)
+ .execute(UnphiMojo.class)
+ .result(),
+ Matchers.hasKey(String.format("target/%s/std.xmir", ParseMojo.DIR))
+ );
+ }
+
+ @ParameterizedTest
+ @Disabled
+ @ClasspathSource(value = "org/eolang/maven/unphi", glob = "**.yaml")
+ void checksUnphiPacks(final String pack, @TempDir final Path temp) throws Exception {
+ final Map map = new Yaml().load(pack);
+ final String phi = map.get("phi").toString();
+ new HmBase(temp).save(phi, Paths.get("target/phi/main.phi"));
+ final List failures = new ListOf<>();
+ new FakeMaven(temp).execute(UnphiMojo.class);
+ for (final String xpath : (Iterable) map.get("tests")) {
+ final List nodes = new XMLDocument(
+ new TextOf(
+ Paths.get(String.format("target/%s/main.xmir", ParseMojo.DIR))
+ ).asString()
+ ).nodes(xpath);
+ if (nodes.isEmpty()) {
+ failures.add(xpath);
+ }
+ }
+ MatcherAssert.assertThat(
+ String.format(
+ "Failed to parse phi expression: %s; failed tests: %s",
+ phi, Arrays.toString(failures.toArray())
+ ),
+ failures,
+ Matchers.empty()
+ );
+ }
+}
diff --git a/eo-parser/src/test/java/org/eolang/parser/EoSyntaxTest.java b/eo-parser/src/test/java/org/eolang/parser/EoSyntaxTest.java
index a44ca86fa0..2123df021e 100644
--- a/eo-parser/src/test/java/org/eolang/parser/EoSyntaxTest.java
+++ b/eo-parser/src/test/java/org/eolang/parser/EoSyntaxTest.java
@@ -48,7 +48,6 @@
* @since 0.1
*/
final class EoSyntaxTest {
-
@Test
void parsesSimpleCode() throws Exception {
MatcherAssert.assertThat(
From 8d22a32db76660734b9739cbaa2de3432a14d1b0 Mon Sep 17 00:00:00 2001
From: maxonfjvipon
Date: Tue, 5 Dec 2023 17:46:31 +0300
Subject: [PATCH 10/12] feat(#2642): todo
---
.../src/test/java/org/eolang/maven/UnphiMojoTest.java | 3 +++
1 file changed, 3 insertions(+)
diff --git a/eo-maven-plugin/src/test/java/org/eolang/maven/UnphiMojoTest.java b/eo-maven-plugin/src/test/java/org/eolang/maven/UnphiMojoTest.java
index 0d7ee83b3a..260b1f54fb 100644
--- a/eo-maven-plugin/src/test/java/org/eolang/maven/UnphiMojoTest.java
+++ b/eo-maven-plugin/src/test/java/org/eolang/maven/UnphiMojoTest.java
@@ -45,6 +45,9 @@
/**
* Test cases for {@link UnphiMojo}.
* @since 0.34.0
+ * @todo #2642:30min Create test packs for {@link UnphiMojo}. UnphiMojo seems to work correctly.
+ * We need to create yaml packs and enable {@link UnphiMojoTest#checksUnphiPacks(String, Path)}
+ * and make sure all of them are passed. Don't forget to remove the puzzle.
*/
class UnphiMojoTest {
@Test
From ce0533df612d22c593646d49c73e74c242f024e8 Mon Sep 17 00:00:00 2001
From: maxonfjvipon
Date: Tue, 5 Dec 2023 18:01:35 +0300
Subject: [PATCH 11/12] feat(#2642): checkstyle
---
.../main/java/org/eolang/maven/ParseMojo.java | 2 -
.../java/org/eolang/maven/JavaFilesTest.java | 3 --
eo-parser/pom.xml | 2 +-
.../java/org/eolang/parser/CheckPack.java | 3 --
.../main/java/org/eolang/parser/EoSyntax.java | 1 +
.../java/org/eolang/parser/PhiSyntax.java | 4 +-
.../java/org/eolang/parser/SourceText.java | 2 +-
.../java/org/eolang/parser/XeEoListener.java | 2 +-
.../java/org/eolang/parser/XePhiListener.java | 53 ++++++++++---------
.../org/eolang/parser/EoIndentLexerTest.java | 2 +-
.../java/org/eolang/parser/EoSyntaxTest.java | 3 +-
.../test/java/org/eolang/parser/XMIRTest.java | 4 --
12 files changed, 37 insertions(+), 44 deletions(-)
diff --git a/eo-maven-plugin/src/main/java/org/eolang/maven/ParseMojo.java b/eo-maven-plugin/src/main/java/org/eolang/maven/ParseMojo.java
index d11b9ff8f0..af19bdf09f 100644
--- a/eo-maven-plugin/src/main/java/org/eolang/maven/ParseMojo.java
+++ b/eo-maven-plugin/src/main/java/org/eolang/maven/ParseMojo.java
@@ -26,7 +26,6 @@
import com.jcabi.log.Logger;
import com.jcabi.xml.XML;
import com.jcabi.xml.XMLDocument;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.file.Path;
import java.util.List;
@@ -38,7 +37,6 @@
import org.cactoos.Scalar;
import org.cactoos.experimental.Threads;
import org.cactoos.io.InputOf;
-import org.cactoos.io.OutputTo;
import org.cactoos.iterable.Filtered;
import org.cactoos.iterable.Mapped;
import org.cactoos.number.SumOf;
diff --git a/eo-maven-plugin/src/test/java/org/eolang/maven/JavaFilesTest.java b/eo-maven-plugin/src/test/java/org/eolang/maven/JavaFilesTest.java
index 34f6e4acaa..9d3b8c7cf0 100644
--- a/eo-maven-plugin/src/test/java/org/eolang/maven/JavaFilesTest.java
+++ b/eo-maven-plugin/src/test/java/org/eolang/maven/JavaFilesTest.java
@@ -24,14 +24,11 @@
package org.eolang.maven;
import com.jcabi.xml.XML;
-import com.jcabi.xml.XMLDocument;
import com.yegor256.xsline.Xsline;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.cactoos.io.InputOf;
-import org.cactoos.io.OutputTo;
import org.cactoos.io.ResourceOf;
import org.cactoos.text.TextOf;
import org.eolang.maven.util.HmBase;
diff --git a/eo-parser/pom.xml b/eo-parser/pom.xml
index 7c929824e8..7f13662307 100644
--- a/eo-parser/pom.xml
+++ b/eo-parser/pom.xml
@@ -189,7 +189,7 @@ SOFTWARE.
qulice-maven-plugin
- checkstyle:/src/main/java/org/eolang/parser/XeListener.java
+ checkstyle:/src/main/java/org/eolang/parser/XeEoListener.java
diff --git a/eo-parser/src/main/java/org/eolang/parser/CheckPack.java b/eo-parser/src/main/java/org/eolang/parser/CheckPack.java
index 46e85e0bee..e1351c9f75 100644
--- a/eo-parser/src/main/java/org/eolang/parser/CheckPack.java
+++ b/eo-parser/src/main/java/org/eolang/parser/CheckPack.java
@@ -25,18 +25,15 @@
import com.jcabi.log.Logger;
import com.jcabi.xml.XML;
-import com.jcabi.xml.XMLDocument;
import com.yegor256.xsline.Shift;
import com.yegor256.xsline.StClasspath;
import com.yegor256.xsline.Train;
import com.yegor256.xsline.Xsline;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Collection;
import java.util.LinkedList;
import java.util.Map;
import org.cactoos.io.InputOf;
-import org.cactoos.io.OutputTo;
import org.yaml.snakeyaml.Yaml;
/**
diff --git a/eo-parser/src/main/java/org/eolang/parser/EoSyntax.java b/eo-parser/src/main/java/org/eolang/parser/EoSyntax.java
index a1ca3c85e8..a9d763fd5c 100644
--- a/eo-parser/src/main/java/org/eolang/parser/EoSyntax.java
+++ b/eo-parser/src/main/java/org/eolang/parser/EoSyntax.java
@@ -84,6 +84,7 @@ public EoSyntax(final String nme, final Input ipt) {
* be generated and saved. Read it in order to find the errors,
* at /program/errors XPath.
*
+ * @return Parsed XML
* @throws IOException If fails
*/
public XML parsed() throws IOException {
diff --git a/eo-parser/src/main/java/org/eolang/parser/PhiSyntax.java b/eo-parser/src/main/java/org/eolang/parser/PhiSyntax.java
index 21188bfaa5..effa593b8c 100644
--- a/eo-parser/src/main/java/org/eolang/parser/PhiSyntax.java
+++ b/eo-parser/src/main/java/org/eolang/parser/PhiSyntax.java
@@ -39,7 +39,7 @@
* Syntax parser, from Phi-calculus to XMIR, using ANTLR4.
* @since 0.34.0
*/
-public class PhiSyntax implements Syntax {
+public final class PhiSyntax implements Syntax {
/**
* Name of the program.
*/
@@ -81,7 +81,7 @@ public XML parsed() throws IOException {
).domQuietly()
);
new Schema(dom).check();
- Logger.debug(this,"Input of PHI calculus compiled, no errors");
+ Logger.debug(this, "Input of PHI calculus compiled, no errors");
return dom;
}
}
diff --git a/eo-parser/src/main/java/org/eolang/parser/SourceText.java b/eo-parser/src/main/java/org/eolang/parser/SourceText.java
index 7f89ee99ab..2ed086cda0 100644
--- a/eo-parser/src/main/java/org/eolang/parser/SourceText.java
+++ b/eo-parser/src/main/java/org/eolang/parser/SourceText.java
@@ -30,7 +30,7 @@
* Source text of parser context.
* @since 0.34.0
*/
-public class SourceText {
+public final class SourceText {
/**
* Context.
*/
diff --git a/eo-parser/src/main/java/org/eolang/parser/XeEoListener.java b/eo-parser/src/main/java/org/eolang/parser/XeEoListener.java
index 6a2b92a5da..cd1ad99fc8 100644
--- a/eo-parser/src/main/java/org/eolang/parser/XeEoListener.java
+++ b/eo-parser/src/main/java/org/eolang/parser/XeEoListener.java
@@ -32,7 +32,6 @@
import java.util.Iterator;
import java.util.StringJoiner;
import org.antlr.v4.runtime.ParserRuleContext;
-import org.antlr.v4.runtime.misc.Interval;
import org.antlr.v4.runtime.tree.ErrorNode;
import org.antlr.v4.runtime.tree.TerminalNode;
import org.apache.commons.text.StringEscapeUtils;
@@ -942,6 +941,7 @@ public void exitVersion(final EoParser.VersionContext ctx) {
// Nothing here
}
+ @Override
@SuppressWarnings("PMD.ConfusingTernary")
public void enterAs(final EoParser.AsContext ctx) {
this.objects.enter();
diff --git a/eo-parser/src/main/java/org/eolang/parser/XePhiListener.java b/eo-parser/src/main/java/org/eolang/parser/XePhiListener.java
index 68e3145a4b..ad86f00aa0 100644
--- a/eo-parser/src/main/java/org/eolang/parser/XePhiListener.java
+++ b/eo-parser/src/main/java/org/eolang/parser/XePhiListener.java
@@ -82,7 +82,7 @@ public final class XePhiListener implements PhiListener, Iterable {
/**
* Objects.
*/
- private final Deque objects;
+ private final Deque objs;
/**
* Packages.
@@ -101,12 +101,12 @@ public final class XePhiListener implements PhiListener, Iterable {
/**
* Ctor.
- * @param name The name of it
+ * @param nme The name of it
*/
- public XePhiListener(final String name) {
- this.name = name;
+ public XePhiListener(final String nme) {
+ this.name = nme;
this.dirs = new Directives();
- this.objects = new ArrayDeque<>();
+ this.objs = new ArrayDeque<>();
this.attributes = new Stack<>();
this.properties = new Stack<>();
this.packages = new ListOf<>();
@@ -115,7 +115,7 @@ public XePhiListener(final String name) {
@Override
public void enterProgram(final PhiParser.ProgramContext ctx) {
- this.objects.add(new Objects.ObjXembly());
+ this.objs.add(new Objects.ObjXembly());
this.dirs.add("program")
.attr("name", this.name)
.attr("version", Manifests.read("EO-Version"))
@@ -147,7 +147,7 @@ public void exitProgram(final PhiParser.ProgramContext ctx) {
.up().up();
}
this.dirs.add("objects")
- .append(this.objects.pollLast())
+ .append(this.objs.pollLast())
.up()
.attr("ms", (System.nanoTime() - this.start) / (1000L * 1000L));
}
@@ -181,14 +181,14 @@ public void exitFormation(final PhiParser.FormationContext ctx) {
public void enterBindings(final PhiParser.BindingsContext ctx) {
if (XePhiListener.hasLambdaPackage(ctx)) {
this.packages.add(this.attributes.peek());
- this.objects.add(new Objects.ObjXembly());
+ this.objs.add(new Objects.ObjXembly());
}
}
@Override
public void exitBindings(final PhiParser.BindingsContext ctx) {
if (XePhiListener.hasLambdaPackage(ctx)) {
- this.objects.poll();
+ this.objs.poll();
}
}
@@ -201,10 +201,9 @@ public void enterBinding(final PhiParser.BindingContext ctx) {
@Override
public void exitBinding(final PhiParser.BindingContext ctx) {
- if (ctx.alphaBinding() != null || ctx.emptyBinding() != null) {
- if (this.objects.size() > this.packages.size()) {
- this.objects().leave();
- }
+ if ((ctx.alphaBinding() != null || ctx.emptyBinding() != null)
+ && this.objs.size() > this.packages.size()) {
+ this.objects().leave();
}
}
@@ -219,6 +218,7 @@ public void exitAlphaBinding(final PhiParser.AlphaBindingContext ctx) {
}
@Override
+ @SuppressWarnings("PMD.ConfusingTernary")
public void enterAttribute(final PhiParser.AttributeContext ctx) {
final String attr;
if (ctx.PHI() != null) {
@@ -313,6 +313,7 @@ public void exitBnds(final PhiParser.BndsContext ctx) {
}
@Override
+ @SuppressWarnings("PMD.ConfusingTernary")
public void enterDispatch(final PhiParser.DispatchContext ctx) {
if (ctx.HOME() != null) {
this.objects().prop("base", "Q").leave();
@@ -331,22 +332,22 @@ public void exitDispatch(final PhiParser.DispatchContext ctx) {
}
@Override
- public void enterDisp(PhiParser.DispContext ctx) {
+ public void enterDisp(final PhiParser.DispContext ctx) {
// Nothing here
}
@Override
- public void exitDisp(PhiParser.DispContext ctx) {
+ public void exitDisp(final PhiParser.DispContext ctx) {
// Nothing here
}
@Override
- public void enterDispBnds(PhiParser.DispBndsContext ctx) {
+ public void enterDispBnds(final PhiParser.DispBndsContext ctx) {
this.objects().enter();
}
@Override
- public void exitDispBnds(PhiParser.DispBndsContext ctx) {
+ public void exitDispBnds(final PhiParser.DispBndsContext ctx) {
this.objects().leave();
}
@@ -374,22 +375,22 @@ public void exitTermination(final PhiParser.TerminationContext ctx) {
}
@Override
- public void visitTerminal(TerminalNode terminalNode) {
+ public void visitTerminal(final TerminalNode node) {
// Nothing here
}
@Override
- public void visitErrorNode(ErrorNode errorNode) {
+ public void visitErrorNode(final ErrorNode node) {
// Nothing here
}
@Override
- public void enterEveryRule(ParserRuleContext parserRuleContext) {
+ public void enterEveryRule(final ParserRuleContext ctx) {
// Nothing here
}
@Override
- public void exitEveryRule(ParserRuleContext parserRuleContext) {
+ public void exitEveryRule(final ParserRuleContext ctx) {
// Nothing here
}
@@ -403,7 +404,7 @@ public Iterator iterator() {
* @return Objects
*/
private Objects objects() {
- return this.objects.getLast();
+ return this.objs.getLast();
}
/**
@@ -414,7 +415,9 @@ private Objects objects() {
private static boolean hasLambdaPackage(final PhiParser.BindingsContext ctx) {
return ctx.binding()
.stream()
- .anyMatch(context -> context.lambdaBidning() != null
- && context.lambdaBidning().FUNCTION().getText().equals(XePhiListener.LAMBDA_PACKAGE));
+ .anyMatch(
+ context -> context.lambdaBidning() != null
+ && context.lambdaBidning().FUNCTION().getText().equals(XePhiListener.LAMBDA_PACKAGE)
+ );
}
-}
\ No newline at end of file
+}
diff --git a/eo-parser/src/test/java/org/eolang/parser/EoIndentLexerTest.java b/eo-parser/src/test/java/org/eolang/parser/EoIndentLexerTest.java
index 8288450018..392252d3a9 100644
--- a/eo-parser/src/test/java/org/eolang/parser/EoIndentLexerTest.java
+++ b/eo-parser/src/test/java/org/eolang/parser/EoIndentLexerTest.java
@@ -57,7 +57,7 @@ void ensuresGrammarFile() throws IOException {
MatcherAssert.assertThat(
lexer.getGrammarFileName(),
Matchers.is(
- "Program.g4"
+ "Eo.g4"
)
);
}
diff --git a/eo-parser/src/test/java/org/eolang/parser/EoSyntaxTest.java b/eo-parser/src/test/java/org/eolang/parser/EoSyntaxTest.java
index 2123df021e..78295fbc92 100644
--- a/eo-parser/src/test/java/org/eolang/parser/EoSyntaxTest.java
+++ b/eo-parser/src/test/java/org/eolang/parser/EoSyntaxTest.java
@@ -101,7 +101,8 @@ void copiesListingCorrectly() throws Exception {
"test-22",
new InputOf(src)
).parsed().toString().getBytes(),
- StandardCharsets.UTF_8)
+ StandardCharsets.UTF_8
+ )
);
MatcherAssert.assertThat(
xml.xpath("/program/listing/text()"),
diff --git a/eo-parser/src/test/java/org/eolang/parser/XMIRTest.java b/eo-parser/src/test/java/org/eolang/parser/XMIRTest.java
index d6f24b3a7e..5d4e92b4e5 100644
--- a/eo-parser/src/test/java/org/eolang/parser/XMIRTest.java
+++ b/eo-parser/src/test/java/org/eolang/parser/XMIRTest.java
@@ -26,13 +26,9 @@
import com.jcabi.log.Logger;
import com.jcabi.xml.ClasspathSources;
import com.jcabi.xml.XML;
-import com.jcabi.xml.XMLDocument;
-import com.jcabi.xml.XSL;
import com.jcabi.xml.XSLDocument;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.cactoos.io.InputOf;
-import org.cactoos.io.OutputTo;
import org.eolang.jucs.ClasspathSource;
import org.hamcrest.MatcherAssert;
import org.hamcrest.Matchers;
From 76bbb565e8a505af57d871d1727f04e02b394762 Mon Sep 17 00:00:00 2001
From: maxonfjvipon
Date: Tue, 5 Dec 2023 18:08:38 +0300
Subject: [PATCH 12/12] feat(#2642): charset
---
eo-parser/src/test/java/org/eolang/parser/EoSyntaxTest.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/eo-parser/src/test/java/org/eolang/parser/EoSyntaxTest.java b/eo-parser/src/test/java/org/eolang/parser/EoSyntaxTest.java
index 78295fbc92..6757a7fe3d 100644
--- a/eo-parser/src/test/java/org/eolang/parser/EoSyntaxTest.java
+++ b/eo-parser/src/test/java/org/eolang/parser/EoSyntaxTest.java
@@ -79,7 +79,7 @@ void printsProperListingEvenWhenSyntaxIsBroken() throws Exception {
new EoSyntax(
"test-44",
new InputOf(src)
- ).parsed().toString().getBytes(),
+ ).parsed().toString().getBytes(StandardCharsets.UTF_8),
StandardCharsets.UTF_8
)
),