Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
raw (unfinished) EDD->DCG->RGF->BGF extractor
git-svn-id: https://slps.svn.sourceforge.net/svnroot/slps@717 ab42f6e0-554d-0410-b580-99e487e6eeb2
  • Loading branch information
grammarware committed Nov 20, 2009
1 parent 18546c3 commit 3a51a1b
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 11 deletions.
2 changes: 2 additions & 0 deletions shared/edd/slps-edd.sln
Expand Up @@ -13,6 +13,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Infrastructure", "Infrastru
ProjectSection(SolutionItems) = preProject
..\xsd\edd.xsd = ..\xsd\edd.xsd
..\xsl\edd2dcg.xslt = ..\xsl\edd2dcg.xslt
..\xsd\rgf.xsd = ..\xsd\rgf.xsd
..\xsl\rgf2bgf.xslt = ..\xsl\rgf2bgf.xslt
EndProjectSection
EndProject
Global
Expand Down
28 changes: 17 additions & 11 deletions shared/xsl/edd2dcg.xslt
Expand Up @@ -7,7 +7,7 @@
encoding="UTF-8"
omit-xml-declaration="yes"
/>

<xsl:template match="/edd:dialect">
<xsl:text>grammar(g(Ps)) --> productions(Ps).
productions([H|T]) --> production(H), productions(T).
Expand Down Expand Up @@ -74,8 +74,7 @@ symbolchoices([S]) --> symbols(S).
<xsl:with-param name="predicate" select="'optionalitysymbol'"/>
<xsl:with-param name="symbol" select="optionality/symbol"/>
</xsl:call-template>
<xsl:text>symbol(opt(nt(N))) --> name(N), optionalitysymbol.
symbol(opt(br(S))) --> groupstart, symbolchoices(S), groupend, optionalitysymbol.
<xsl:text>symbol(opt) --> optionalitysymbol.
</xsl:text>
</xsl:if>
<!-- not implemented: optionality pair -->
Expand All @@ -96,11 +95,19 @@ symbol(r(R,br(S))) --> groupstart, symbolchoices(S), groupend, repetition(R).
</xsl:for-each>
<!-- terminals -->
<xsl:if test="terminal">
<!-- double quote (34) hard coded; single quote is 39 -->
<xsl:text>symbol(t(Y)) --> terminalstart, string(V), {\+ member(34, V), string_to_list(Y,V)}, terminalend.
<!-- double quote (34) hard coded; single quote is 39 -->
<xsl:choose>
<xsl:when test="markup/start/text/text() = '&#34;'">
<!-- double quote -->
<xsl:text>symbol(t(Y)) --> terminalstart, string(V), {\+ member(34, V), string_to_list(Y,V)}, terminalend.
terminalstart --> [34].
terminalend --> [34].
</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:message>Unsupported terminal quoting!</xsl:message>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
<!-- everything else -->
<xsl:text>
Expand Down Expand Up @@ -150,8 +157,7 @@ writesymbolchoices([H1,H2|T]) :- writesymbols(H1), writechoicesymbol, writesymbo
writesymbolchoices([S]) :- writesymbols(S).
writechoicesymbol :- write('<meta-choice/>'), nl.
writeoptionalitysymbol :- write('<meta-optionality/>'), nl.
writesymbol(opt(nt(N))) :- writent(N), writeoptionalitysymbol.
writesymbol(opt(br(S))) :- writegroupstart, writesymbolchoices(S), writegroupend, writeoptionalitysymbol.
writesymbol(opt) :- writeoptionalitysymbol.
writesymbol(r(R,nt(N))) :- writent(N), writerepetition(R).
writesymbol(r(R,br(S))) :- writegroupstart, writesymbolchoices(S), writegroupend, writerepetition(R).
writerepetition(R) :- write('<meta-repetition>'), write(R), write('</meta-repetition>'), nl.
Expand Down Expand Up @@ -218,9 +224,9 @@ eof([10|T],R) :- eof(T,R).]]>
</xsl:when>
<xsl:when test="local-name($bit) = 'optional'">
<xsl:text>(</xsl:text>
<xsl:call-template name="transformSymbol">
<xsl:with-param name="symbol" select="$bit"/>
</xsl:call-template>
<xsl:call-template name="transformSymbol">
<xsl:with-param name="symbol" select="$bit"/>
</xsl:call-template>
<xsl:text>; epsilon)</xsl:text>
</xsl:when>
<xsl:when test="local-name($bit) = 'newline'">
Expand Down Expand Up @@ -253,4 +259,4 @@ eof([10|T],R) :- eof(T,R).]]>
<xsl:text>.
</xsl:text>
</xsl:template>
</xsl:stylesheet>
</xsl:stylesheet>
23 changes: 23 additions & 0 deletions shared/xsl/rgf2bgf.xslt
@@ -0,0 +1,23 @@
<xsl:stylesheet version = '1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:rgf="http://planet-sl.org/rgf">

<xsl:output method="xml" encoding="UTF-8"/>

<xsl:template match="/rgf:grammar">
<xsl:for-each select="entry">
<xsl:choose>
<xsl:when test="local-name() = 'name'">
</xsl:when>
</xsl:choose>
<xsl:if test="local-name() = 'terminator-symbol'">
<xsl:value-of select="position()"/>
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>



</xsl:stylesheet>

0 comments on commit 3a51a1b

Please sign in to comment.