Skip to content

Commit

Permalink
#155: antlr refactored for application and abstraction
Browse files Browse the repository at this point in the history
  • Loading branch information
yegor256 committed Nov 11, 2020
1 parent 7f673c1 commit d7daa37
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 55 deletions.
56 changes: 23 additions & 33 deletions eo-compiler/src/main/antlr4/org/eolang/compiler/Program.g4
Original file line number Diff line number Diff line change
Expand Up @@ -47,34 +47,27 @@ objects

object
:
vobject
|
hobject
;

vobject
:
COMMENT*
vhead
vtail
|
vobject
EOL
method
(suffix | vtail)?
(
application
|
abstraction
)
tail?
(
EOL
method
suffix?
)*
;

vhead
abstraction
:
attributes
|
NAME
has?
suffix?
;

vtail
tail
:
suffix?
EOL
TAB
(object EOL)+
Expand Down Expand Up @@ -103,30 +96,27 @@ method
NAME
;

hobject
application
:
hhead
htail?
|
hobject
application
method
htail?
|
LB
hobject
application
RB
htail?
|
hobject
application
has
htail?
|
hobject
application
hsuffix
htail?
|
hobject
vtail
;

htail
Expand All @@ -136,20 +126,20 @@ htail
hhead
|
SPACE
hobject
application
method
|
SPACE
LB
hobject
application
RB
|
SPACE
hobject
application
has
|
SPACE
hobject
application
hsuffix
)+
;
Expand Down
34 changes: 12 additions & 22 deletions eo-compiler/src/main/java/org/eolang/compiler/XeListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -112,33 +112,22 @@ public void exitObject(final ProgramParser.ObjectContext ctx) {
}

@Override
public void enterVobject(final ProgramParser.VobjectContext ctx) {
}

@Override
public void exitVobject(final ProgramParser.VobjectContext ctx) {
}

@Override
public void enterVhead(final ProgramParser.VheadContext ctx) {
public void enterAbstraction(final ProgramParser.AbstractionContext ctx) {
this.dirs.add("o").attr("line", ctx.getStart().getLine());
if (ctx.NAME() != null) {
this.dirs.attr("base", ctx.NAME().getText());
}
}

@Override
public void exitVhead(final ProgramParser.VheadContext ctx) {
public void exitAbstraction(final ProgramParser.AbstractionContext ctx) {
this.dirs.up();
}

@Override
public void enterVtail(final ProgramParser.VtailContext ctx) {
public void enterTail(final ProgramParser.TailContext ctx) {
this.dirs.xpath("o[last()]").strict(1);
}

@Override
public void exitVtail(final ProgramParser.VtailContext ctx) {
public void exitTail(final ProgramParser.TailContext ctx) {
this.dirs.up();
}

Expand Down Expand Up @@ -199,38 +188,39 @@ public void exitHhead(final ProgramParser.HheadContext ctx) {

@Override
public void enterHas(final ProgramParser.HasContext ctx) {
this.dirs.attr("as", ctx.NAME().getText());
this.dirs.xpath("o[last()]").strict(1).attr("as", ctx.NAME().getText());
}

@Override
public void exitHas(final ProgramParser.HasContext ctx) {
this.dirs.up();
}

@Override
public void enterHobject(final ProgramParser.HobjectContext ctx) {
public void enterApplication(final ProgramParser.ApplicationContext ctx) {
}

@Override
public void exitHobject(final ProgramParser.HobjectContext ctx) {
public void exitApplication(final ProgramParser.ApplicationContext ctx) {
}

@Override
public void enterHsuffix(final ProgramParser.HsuffixContext ctx) {
public void enterHtail(final ProgramParser.HtailContext ctx) {
this.dirs.xpath("o[last()]").strict(1);
}

@Override
public void exitHsuffix(final ProgramParser.HsuffixContext ctx) {
public void exitHtail(final ProgramParser.HtailContext ctx) {
this.dirs.up();
}

@Override
public void enterHtail(final ProgramParser.HtailContext ctx) {
public void enterHsuffix(final ProgramParser.HsuffixContext ctx) {
this.dirs.xpath("o[last()]").strict(1);
}

@Override
public void exitHtail(final ProgramParser.HtailContext ctx) {
public void exitHsuffix(final ProgramParser.HsuffixContext ctx) {
this.dirs.up();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,14 @@ eo: |
z
oops
[]
one.two.three.four.five
t
.two
.three > a1
.four > a2
.five > a3
test
me
now:i (f (f (f (f 1)))).f

0 comments on commit d7daa37

Please sign in to comment.