diff --git a/eo-maven-plugin/src/test/resources/org/eolang/maven/unphi/normalized.yaml b/eo-maven-plugin/src/test/resources/org/eolang/maven/unphi/normalized.yaml new file mode 100644 index 0000000000..c502c1bc5a --- /dev/null +++ b/eo-maven-plugin/src/test/resources/org/eolang/maven/unphi/normalized.yaml @@ -0,0 +1,4 @@ +tests: + - /program/objects[count(o)=1]/o[@name='app'] +phi: + "{ ν ↦ ⟦ Δ ⤍ 01- ⟧, app ↦ ⟦ ν ↦ ⟦ Δ ⤍ 00- ⟧, args ↦ ∅, φ ↦ Φ.org.eolang.io.stdout (α0 ↦ Φ.org.eolang.string (α0 ↦ Φ.org.eolang.bytes (Δ ⤍ 48-65-6C-6C-6F-2C-20-77-6F-72-6C-64-21-0A))) ⟧ }" \ No newline at end of file diff --git a/eo-maven-plugin/src/test/resources/org/eolang/maven/unphi/remove-vtx.yaml b/eo-maven-plugin/src/test/resources/org/eolang/maven/unphi/remove-vtx.yaml new file mode 100644 index 0000000000..930ba0014a --- /dev/null +++ b/eo-maven-plugin/src/test/resources/org/eolang/maven/unphi/remove-vtx.yaml @@ -0,0 +1,4 @@ +tests: + - /program/objects[count(o)=1]/o[@name='x'] +phi: + "{ν ↦ ⟦Δ ⤍ 01-⟧, x ↦ ⟦z ↦ ξ.y⟧}" \ No newline at end of file diff --git a/eo-parser/src/main/java/org/eolang/parser/Objects.java b/eo-parser/src/main/java/org/eolang/parser/Objects.java index 7c8420465f..9add2ce1ee 100644 --- a/eo-parser/src/main/java/org/eolang/parser/Objects.java +++ b/eo-parser/src/main/java/org/eolang/parser/Objects.java @@ -89,6 +89,12 @@ interface Objects extends Iterable { */ Objects leave(); + /** + * Remove current object. + * @return Self. + */ + Objects remove(); + /** * Xembly object tree. * @since 0.1 @@ -147,6 +153,12 @@ public Objects leave() { return this; } + @Override + public Objects remove() { + this.dirs.remove(); + return this; + } + @Override public Iterator iterator() { return this.dirs.iterator(); 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 0eeee833e2..8c84f0730b 100644 --- a/eo-parser/src/main/java/org/eolang/parser/XePhiListener.java +++ b/eo-parser/src/main/java/org/eolang/parser/XePhiListener.java @@ -201,9 +201,20 @@ public void enterBinding(final PhiParser.BindingContext ctx) { @Override public void exitBinding(final PhiParser.BindingContext ctx) { - if ((ctx.alphaBinding() != null || ctx.emptyBinding() != null) - && this.objs.size() > this.packages.size()) { - this.objects().leave(); + if (this.objs.size() > this.packages.size()) { + if (ctx.alphaBinding() != null) { + if (ctx.alphaBinding().attribute().VTX() != null) { + this.objects().remove(); + } else { + this.objects().leave(); + } + } else if (ctx.emptyBinding() != null) { + if (ctx.emptyBinding().attribute().VTX() != null) { + this.objects().remove(); + } else { + this.objects().leave(); + } + } } }