Skip to content

Commit

Permalink
xbgf:iterate as the reverse of xbgf:lassoc and xbgf:rassoc
Browse files Browse the repository at this point in the history
git-svn-id: https://slps.svn.sourceforge.net/svnroot/slps@1194 ab42f6e0-554d-0410-b580-99e487e6eeb2
  • Loading branch information
grammarware committed May 8, 2012
1 parent 20f10db commit e028ea3
Show file tree
Hide file tree
Showing 24 changed files with 520 additions and 148 deletions.
6 changes: 6 additions & 0 deletions shared/prolog/readXbgf.pro
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,12 @@ xml2xbgf(T,import(Ps2))
children(name(bgf:production),T,Ps1),
maplist(xmlToP,Ps1,Ps2).

xml2xbgf(T,iterate(P2))
:-
self(name(xbgf:iterate),T),
child(name(bgf:production),T,P1),
xmlToP(P1,P2).

xml2xbgf(T,lassoc(P2))
:-
self(name(xbgf:lassoc),T),
Expand Down
27 changes: 26 additions & 1 deletion shared/prolog/xbgf1.pro
Original file line number Diff line number Diff line change
Expand Up @@ -521,7 +521,7 @@ new(Ps1,N,G1,G2)
%
% p([l(import)], f, +n(p))
%
% T.B.D.
% Add multiple possibly connected definitions for fresh nonterminals
%

import(Ps0,g(Rs,Ps1),g(Rs,Ps2))
Expand All @@ -541,6 +541,25 @@ import(Ps0,g(Rs,Ps1),g(Rs,Ps2))
[DU01]),
append(Ps1,Ps0,Ps2).

%
% p([l(iterate)], f, n(p))
%
% Interpret separator list iteratively
%
iterate(P1,G1,G2)
:-
iter(P1,G1,G2).

iter(P1,g(Rs,Ps1),g(Rs,Ps2))
:-
P1 = p(As,N,X1),
findP(Ps1,As,N,P2,Ps2a,Ps2b),
P2 = p(As,N,X2),
require(
xbgf1:assoc_rules(N,X2,X1),
'~q must admit associativity transformation.',
[P1]),
append(Ps2a,[P1|Ps2b],Ps2).

%
% p([l(lassoc)], f, n(p))
Expand All @@ -565,13 +584,19 @@ assoc(P1,g(Rs,Ps1),g(Rs,Ps2))

assoc_rules(N,X1,X2) :- assoc_rule1(N,X1,X2).
assoc_rules(N,X1,X2) :- assoc_rule2(N,X1,X2).
assoc_rules(N,X1,X2) :- assoc_rule3(N,X1,X2).

assoc_rule1(
N,
','([n(N),X,n(N)]),
','([n(N),'*'(','([X,n(N)]))])).

assoc_rule2(
N,
','([n(N),X,n(N)]),
','(['*'(','([n(N),X])),n(N)])).

assoc_rule3(
N,
','([n(N),n(N)]),
+(n(N))).
Expand Down
16 changes: 15 additions & 1 deletion shared/xsd/xbgf.xsd
Original file line number Diff line number Diff line change
Expand Up @@ -134,9 +134,10 @@
<xsd:element ref="xbgf:vertical"/>
<xsd:element ref="xbgf:horizontal"/>
<xsd:element ref="xbgf:equate"/>
<!-- do we need them? -->

<xsd:element ref="xbgf:rassoc"/>
<xsd:element ref="xbgf:lassoc"/>
<xsd:element ref="xbgf:iterate"/>
</xsd:choice>
</xsd:group>
<xsd:group name="increasing-transformation">
Expand Down Expand Up @@ -675,6 +676,19 @@
</xsd:complexType>
</xsd:element>

<xsd:element name="iterate">
<xsd:annotation>
<xsd:documentation>
The reverse of <ldf:keyword>rassoc</ldf:keyword>/<ldf:keyword>lassoc</ldf:keyword>.
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:choice>
<xsd:element ref="bgf:production"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>

<xsd:element name="lassoc">
<xsd:annotation>
<xsd:documentation>
Expand Down
35 changes: 35 additions & 0 deletions topics/transformation/xbgf/tests/iterate_l.baseline
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<bgf:grammar xmlns:bgf="http://planet-sl.org/bgf">
<bgf:production>
<label>constant</label>
<nonterminal>expr</nonterminal>
<bgf:expression>
<nonterminal>int</nonterminal>
</bgf:expression>
</bgf:production>
<bgf:production>
<label>binary</label>
<nonterminal>expr</nonterminal>
<bgf:expression>
<sequence>
<bgf:expression>
<star>
<bgf:expression>
<sequence>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
<bgf:expression>
<nonterminal>op</nonterminal>
</bgf:expression>
</sequence>
</bgf:expression>
</star>
</bgf:expression>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
</sequence>
</bgf:expression>
</bgf:production>
</bgf:grammar>
27 changes: 27 additions & 0 deletions topics/transformation/xbgf/tests/iterate_l.bgf
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<bgf:grammar xmlns:bgf="http://planet-sl.org/bgf">
<bgf:production>
<label>constant</label>
<nonterminal>expr</nonterminal>
<bgf:expression>
<nonterminal>int</nonterminal>
</bgf:expression>
</bgf:production>
<bgf:production>
<label>binary</label>
<nonterminal>expr</nonterminal>
<bgf:expression>
<sequence>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
<bgf:expression>
<nonterminal>op</nonterminal>
</bgf:expression>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
</sequence>
</bgf:expression>
</bgf:production>
</bgf:grammar>
30 changes: 30 additions & 0 deletions topics/transformation/xbgf/tests/iterate_l.xbgf
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<xbgf:sequence xmlns:bgf="http://planet-sl.org/bgf" xmlns:xbgf="http://planet-sl.org/xbgf">
<xbgf:iterate>
<bgf:production>
<label>binary</label>
<nonterminal>expr</nonterminal>
<bgf:expression>
<sequence>
<bgf:expression>
<star>
<bgf:expression>
<sequence>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
<bgf:expression>
<nonterminal>op</nonterminal>
</bgf:expression>
</sequence>
</bgf:expression>
</star>
</bgf:expression>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
</sequence>
</bgf:expression>
</bgf:production>
</xbgf:iterate>
</xbgf:sequence>
21 changes: 21 additions & 0 deletions topics/transformation/xbgf/tests/iterate_p.baseline
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<bgf:grammar xmlns:bgf="http://planet-sl.org/bgf">
<bgf:production>
<label>terminal</label>
<nonterminal>expr</nonterminal>
<bgf:expression>
<value>string</value>
</bgf:expression>
</bgf:production>
<bgf:production>
<label>sequence</label>
<nonterminal>expr</nonterminal>
<bgf:expression>
<plus>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
</plus>
</bgf:expression>
</bgf:production>
</bgf:grammar>
24 changes: 24 additions & 0 deletions topics/transformation/xbgf/tests/iterate_p.bgf
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<bgf:grammar xmlns:bgf="http://planet-sl.org/bgf">
<bgf:production>
<label>terminal</label>
<nonterminal>expr</nonterminal>
<bgf:expression>
<value>string</value>
</bgf:expression>
</bgf:production>
<bgf:production>
<label>sequence</label>
<nonterminal>expr</nonterminal>
<bgf:expression>
<sequence>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
</sequence>
</bgf:expression>
</bgf:production>
</bgf:grammar>
16 changes: 16 additions & 0 deletions topics/transformation/xbgf/tests/iterate_p.xbgf
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<xbgf:sequence xmlns:bgf="http://planet-sl.org/bgf" xmlns:xbgf="http://planet-sl.org/xbgf">
<xbgf:iterate>
<bgf:production>
<label>sequence</label>
<nonterminal>expr</nonterminal>
<bgf:expression>
<plus>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
</plus>
</bgf:expression>
</bgf:production>
</xbgf:iterate>
</xbgf:sequence>
35 changes: 35 additions & 0 deletions topics/transformation/xbgf/tests/iterate_r.baseline
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<bgf:grammar xmlns:bgf="http://planet-sl.org/bgf">
<bgf:production>
<label>constant</label>
<nonterminal>expr</nonterminal>
<bgf:expression>
<nonterminal>int</nonterminal>
</bgf:expression>
</bgf:production>
<bgf:production>
<label>binary</label>
<nonterminal>expr</nonterminal>
<bgf:expression>
<sequence>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
<bgf:expression>
<star>
<bgf:expression>
<sequence>
<bgf:expression>
<nonterminal>op</nonterminal>
</bgf:expression>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
</sequence>
</bgf:expression>
</star>
</bgf:expression>
</sequence>
</bgf:expression>
</bgf:production>
</bgf:grammar>
27 changes: 27 additions & 0 deletions topics/transformation/xbgf/tests/iterate_r.bgf
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<bgf:grammar xmlns:bgf="http://planet-sl.org/bgf">
<bgf:production>
<label>constant</label>
<nonterminal>expr</nonterminal>
<bgf:expression>
<nonterminal>int</nonterminal>
</bgf:expression>
</bgf:production>
<bgf:production>
<label>binary</label>
<nonterminal>expr</nonterminal>
<bgf:expression>
<sequence>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
<bgf:expression>
<nonterminal>op</nonterminal>
</bgf:expression>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
</sequence>
</bgf:expression>
</bgf:production>
</bgf:grammar>
30 changes: 30 additions & 0 deletions topics/transformation/xbgf/tests/iterate_r.xbgf
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<xbgf:sequence xmlns:bgf="http://planet-sl.org/bgf" xmlns:xbgf="http://planet-sl.org/xbgf">
<xbgf:iterate>
<bgf:production>
<label>binary</label>
<nonterminal>expr</nonterminal>
<bgf:expression>
<sequence>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
<bgf:expression>
<star>
<bgf:expression>
<sequence>
<bgf:expression>
<nonterminal>op</nonterminal>
</bgf:expression>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
</sequence>
</bgf:expression>
</star>
</bgf:expression>
</sequence>
</bgf:expression>
</bgf:production>
</xbgf:iterate>
</xbgf:sequence>
27 changes: 27 additions & 0 deletions topics/transformation/xbgf/tests/lassoc_l.baseline
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<bgf:grammar xmlns:bgf="http://planet-sl.org/bgf">
<bgf:production>
<label>constant</label>
<nonterminal>expr</nonterminal>
<bgf:expression>
<nonterminal>int</nonterminal>
</bgf:expression>
</bgf:production>
<bgf:production>
<label>binary</label>
<nonterminal>expr</nonterminal>
<bgf:expression>
<sequence>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
<bgf:expression>
<nonterminal>op</nonterminal>
</bgf:expression>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
</sequence>
</bgf:expression>
</bgf:production>
</bgf:grammar>
Loading

0 comments on commit e028ea3

Please sign in to comment.