Skip to content

Commit

Permalink
XEDD scripts were not committed; BGF now officially has separator lists!
Browse files Browse the repository at this point in the history
git-svn-id: https://slps.svn.sourceforge.net/svnroot/slps@1151 ab42f6e0-554d-0410-b580-99e487e6eeb2
  • Loading branch information
grammarware committed Dec 18, 2011
1 parent dfc3273 commit 46c3008
Show file tree
Hide file tree
Showing 7 changed files with 88 additions and 4 deletions.
5 changes: 3 additions & 2 deletions shared/prolog/bgf.pro
Expand Up @@ -15,7 +15,7 @@ rootNs(g(Rs1,_),Rs2)
!.


% Return all nontmerinals defined by a grammar
% Return all nonterminals defined by a grammar

definedNs(g(_,Ps),Ns)
:-
Expand Down Expand Up @@ -512,7 +512,8 @@ eqXs(';',[[X1|Xs1]],[Xs2])
!,
append(Xs2a,Xs2b,Xs3),
eqXs(';',[Xs1],[Xs3]).

eqXs(sls,[X1,X2],[X3,X4]) :- eqX(X1,X3), eqX(X2,X4).
eqXs(slp,[X1,X2],[X3,X4]) :- eqX(X1,X3), eqX(X2,X4).

% Subtracting subset test on sets of expressions

Expand Down
20 changes: 19 additions & 1 deletion shared/prolog/readBgf.pro
@@ -1,5 +1,5 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Comstruct Prolog-based BGF representation from XML representation %
% Construct Prolog-based BGF representation from XML representation %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

xmlToG(G,g(Rs2,Ps2))
Expand Down Expand Up @@ -134,3 +134,21 @@ xmlToX(X1,'+'(X3))
child(element,X1,X2),
xmlToExpression(X2,X3),
!.

xmlToX(X1,sls(X4,X5))
:-
self(name(sepliststar),X1),
!,
children(name(bgf:expression),X1,[X2,X3]),
xmlToExpression(X2,X4),
xmlToExpression(X3,X5),
!.

xmlToX(X1,slp(X4,X5))
:-
self(name(seplistplus),X1),
!,
children(name(bgf:expression),X1,[X2,X3]),
xmlToExpression(X2,X4),
xmlToExpression(X3,X5),
!.
16 changes: 16 additions & 0 deletions shared/prolog/writeBgf.pro
Expand Up @@ -84,6 +84,22 @@ xToXml('*'(M),X)
xToExpression(X1,X2),
e(star,[],[X2],X).

xToXml(sls(M1,M2),X)
:-
xToXml(M1,X1),
xToXml(M2,X2),
xToExpression(X1,X3),
xToExpression(X2,X4),
e(sepliststar,[],[X3,X4],X).

xToXml(slp(M1,M2),X)
:-
xToXml(M1,X1),
xToXml(M2,X2),
xToExpression(X1,X3),
xToExpression(X2,X4),
e(seplistplus,[],[X3,X4],X).

xToXml({M},X)
:-
xToXml(M,X1),
Expand Down
9 changes: 8 additions & 1 deletion shared/prolog/xbgf1.pro
Expand Up @@ -761,6 +761,13 @@ massage_rules(','([X,*(','([Y,X]))]),','([*(','([X,Y])),X])).
%massage_rules(?(','([*(X),*(Y)])),','([*(X),*(Y)])).
%massage_rules(?(';'([X,Y])),';'([?(X),?(Y)])).

%% Separator lists
massage_rules(slp(X,Y),','([X,*(','([Y,X]))])).
massage_rules(slp(X,Y),','([*(','([X,Y])),X])).
massage_rules(sls(X,Y),?(','([X,*(','([Y,X]))]))).
massage_rules(sls(X,Y),?(','([*(','([X,Y])),X]))).
massage_rules(sls(X,Y),?(slp(X,Y))).

% We can add a selectable epsilon anywhere
massage_rules(','(L1),','(L2))
:-
Expand Down Expand Up @@ -1348,7 +1355,7 @@ unchain(P1,g(Rs,Ps1),g(Rs,Ps4))
[P1]),
append(Ps1a,Ps1b,Ps2),
def(Ps2,N2,N2Ps),
member(p(_,_,X),N2Ps),
[p(_,_,X)] = N2Ps,
require(
(\+ member(N2,Rs) ),
'Nonterminal ~q must not be root.',
Expand Down
16 changes: 16 additions & 0 deletions shared/xsd/bgf.xsd
Expand Up @@ -113,6 +113,22 @@
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="seplistplus">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="bgf:expression"/>
<xsd:element ref="bgf:expression"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="sepliststar">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="bgf:expression"/>
<xsd:element ref="bgf:expression"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
Expand Down
8 changes: 8 additions & 0 deletions topics/transformation/xedd/lll1.try.xedd
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<xedd:evolution xmlns:xedd="http://planet-sl.org/xedd">
<xedd:rename>
<metasymbol>terminator</metasymbol>
<from>;</from>
<to>.</to>
</xedd:rename>
</xedd:evolution>
18 changes: 18 additions & 0 deletions topics/transformation/xedd/lll1to2.xedd
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<xedd:evolution xmlns:xedd="http://planet-sl.org/xedd">
<xedd:introduce>
<metasymbol>group</metasymbol>
<start>(</start>
<end>)</end>
</xedd:introduce>
<xedd:introduce>
<metasymbol>seplist-star</metasymbol>
<start>{</start>
<end>}*</end>
</xedd:introduce>
<xedd:introduce>
<metasymbol>seplist-plus</metasymbol>
<start>{</start>
<end>}+</end>
</xedd:introduce>
</xedd:evolution>

0 comments on commit 46c3008

Please sign in to comment.