Skip to content

Commit

Permalink
detour implemented; unterminalize killed
Browse files Browse the repository at this point in the history
git-svn-id: https://slps.svn.sourceforge.net/svnroot/slps@549 ab42f6e0-554d-0410-b580-99e487e6eeb2
  • Loading branch information
grammarware committed Apr 7, 2009
1 parent 0a41414 commit aa8330b
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 6 deletions.
6 changes: 6 additions & 0 deletions shared/prolog/readXbgf.pro
Expand Up @@ -295,6 +295,12 @@ xml2xbgf(T,abridge(P2))
child(name(bgf:production),T,P1),
xmlToP(P1,P2).

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

xml2xbgf(T,stripL(L))
:-
self(name(xbgf:strip),T),
Expand Down
15 changes: 9 additions & 6 deletions shared/prolog/xbgf1.pro
Expand Up @@ -1123,20 +1123,23 @@ abridge(P1,g(Rs,Ps1),g(Rs,Ps2))
append(Ps1a,Ps1b,Ps2).

%
% p([l(unterminalize)], f, n(p))
% p([l(detour)], f, n(p))
%
% Strip all terminals within a given nonterminal's definition
% Introduce a reflexive chain production
%
unterminalize(N,g(Rs,Ps1),g(Rs,Ps2))

detour(P1,g(Rs,Ps1),g(Rs,Ps2))
:-
require(
P1 = p(_,N,n(N)),
'Production ~q is not a reflexive chain production.',
[P1]),
usedNs(Ps1,Uses1),
require(
member(N,Uses1),
'Nonterminal ~q must be used.',
[N]),
splitN(Ps1,N,Ps0,Ps2a,Ps2b),
transform(try(xbgf1:stripTs_rule),g(Rs,Ps0),g(Rs,Ps3)),
concat([Ps2a,Ps3,Ps2b],Ps2).
append(Ps1,[P1],Ps2).

%
% p([l(stripL)], f, n(l))
Expand Down
23 changes: 23 additions & 0 deletions topics/transformation/xbgf/tests/detour.baseline
@@ -0,0 +1,23 @@
<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>neg</label>
<nonterminal>expr</nonterminal>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
</bgf:production>
<bgf:production>
<label>bracket</label>
<nonterminal>expr</nonterminal>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
</bgf:production>
</bgf:grammar>
18 changes: 18 additions & 0 deletions topics/transformation/xbgf/tests/detour.bgf
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>

<xns1:grammar xmlns:xns1="http://planet-sl.org/bgf">
<xns1:production>
<label>constant</label>
<nonterminal>expr</nonterminal>
<xns1:expression>
<nonterminal>int</nonterminal>
</xns1:expression>
</xns1:production>
<xns1:production>
<label>neg</label>
<nonterminal>expr</nonterminal>
<xns1:expression>
<nonterminal>expr</nonterminal>
</xns1:expression>
</xns1:production>
</xns1:grammar>
13 changes: 13 additions & 0 deletions topics/transformation/xbgf/tests/detour.xbgf
@@ -0,0 +1,13 @@
<xbgf:sequence
xmlns:bgf="http://planet-sl.org/bgf"
xmlns:xbgf="http://planet-sl.org/xbgf">
<xbgf:detour>
<bgf:production>
<label>bracket</label>
<nonterminal>expr</nonterminal>
<bgf:expression>
<nonterminal>expr</nonterminal>
</bgf:expression>
</bgf:production>
</xbgf:detour>
</xbgf:sequence>

0 comments on commit aa8330b

Please sign in to comment.