Skip to content

Commit

Permalink
added a couple of test cases; coevolved command line pretty-printing
Browse files Browse the repository at this point in the history
  • Loading branch information
grammarware committed Dec 23, 2012
1 parent 36e8dc0 commit 568c5fe
Show file tree
Hide file tree
Showing 19 changed files with 456 additions and 1 deletion.
9 changes: 9 additions & 0 deletions shared/rascal/src/diff/GDT.rsc
Expand Up @@ -37,6 +37,15 @@ public bool eqE(choice(L1), choice(L2))
return eqE(choice(L1 - x), choice(L2 - y));
return false;
}
public bool eqE(allof([BGFExpression e1]), allof([BGFExpression e2])) = eqE(e1,e2);
public bool eqE(allof(L1), allof(L2))
{
for (x <- L1, y <- L2)
if (eqE(x,y))
return eqE(allof(L1 - x), allof(L2 - y));
return false;
}

public bool eqE(sequence(L1), sequence(L2))
{
if (size(L1) != size(L2)) return false;
Expand Down
4 changes: 4 additions & 0 deletions shared/rascal/src/transform/library/Massage.rsc
Expand Up @@ -44,9 +44,13 @@ bool massage_eq({optional(seplistplus(x,y)),sepliststar(x,y)}) = true;
bool massage_eq({not(not(x)),x}) = true;
bool massage_eq({not(selectable(s,x)),selectable(s,not(x))}) = true;
bool massage_eq({not(allof([x,y])),choice([not(x),not(y)])}) = true;
bool massage_eq({not(allof([x,y])),choice([not(y),not(x)])}) = true;
bool massage_eq({not(allof([not(x),not(y)])),choice([x,y])}) = true;
bool massage_eq({not(allof([not(x),not(y)])),choice([y,x])}) = true;
bool massage_eq({not(choice([x,y])),allof([not(x),not(y)])}) = true;
bool massage_eq({not(choice([x,y])),allof([not(y),not(x)])}) = true;
bool massage_eq({not(choice([not(x),not(y)])),allof([x,y])}) = true;
bool massage_eq({not(choice([not(x),not(y)])),allof([y,x])}) = true;

default bool massage_eq(set[BGFExpression] s)
{
Expand Down
17 changes: 16 additions & 1 deletion shared/rascal/src/transform/library/Test.rsc
Expand Up @@ -151,7 +151,12 @@ map[str,tuple[XBGFSequence,BGFGrammar,BGFGrammar]] test_data = (
"yaccify_left": <[yaccify([production("","foo",nonterminal("bar")),production("","foo",sequence([nonterminal("foo"),nonterminal("wez")]))])],grammar([],[production("","foo",sequence([nonterminal("bar"),star(nonterminal("wez"))]))]),grammar([],[production("","foo",nonterminal("bar")),production("","foo",sequence([nonterminal("foo"),nonterminal("wez")]))])>,
"yaccify_left_plus": <[yaccify([production("","foo",nonterminal("bar")),production("","foo",sequence([nonterminal("foo"),nonterminal("bar")]))])],grammar([],[production("","foo",plus(nonterminal("bar")))]),grammar([],[production("","foo",nonterminal("bar")),production("","foo",sequence([nonterminal("foo"),nonterminal("bar")]))])>,
"yaccify_right": <[yaccify([production("","foo",nonterminal("bar")),production("","foo",sequence([nonterminal("wez"),nonterminal("foo")]))])],grammar([],[production("","foo",sequence([star(nonterminal("wez")),nonterminal("bar")]))]),grammar([],[production("","foo",nonterminal("bar")),production("","foo",sequence([nonterminal("wez"),nonterminal("foo")]))])>,
"yaccify_right_plus": <[yaccify([production("","foo",nonterminal("bar")),production("","foo",sequence([nonterminal("bar"),nonterminal("foo")]))])],grammar([],[production("","foo",plus(nonterminal("bar")))]),grammar([],[production("","foo",nonterminal("bar")),production("","foo",sequence([nonterminal("bar"),nonterminal("foo")]))])>
"yaccify_right_plus": <[yaccify([production("","foo",nonterminal("bar")),production("","foo",sequence([nonterminal("bar"),nonterminal("foo")]))])],grammar([],[production("","foo",plus(nonterminal("bar")))]),grammar([],[production("","foo",nonterminal("bar")),production("","foo",sequence([nonterminal("bar"),nonterminal("foo")]))])>,
"massage_nn": <[massage(nonterminal("foo"),not(not(nonterminal("foo"))),globally())],grammar([],[production("","foo",sequence([plus(nonterminal("bar")),nonterminal("foo")]))]),grammar([],[production("","foo",sequence([plus(nonterminal("bar")),not(not(nonterminal("foo")))]))])>,
"massage_morgan1": <[massage(not(allof([nonterminal("foo"),nonterminal("bar")])),choice([not(nonterminal("bar")),not(nonterminal("foo"))]),globally())],grammar([],[production("","foo",not(allof([nonterminal("foo"),nonterminal("bar")])))]),grammar([],[production("","foo",choice([not(nonterminal("foo")),not(nonterminal("bar"))]))])>,
"massage_morgan2": <[massage(not(allof([not(nonterminal("foo")),not(nonterminal("bar"))])),choice([nonterminal("foo"),nonterminal("bar")]),globally())],grammar([],[production("","foo",not(allof([not(nonterminal("foo")),not(nonterminal("bar"))])))]),grammar([],[production("","foo",choice([nonterminal("bar"),nonterminal("foo")]))])>,
"massage_morgan3": <[massage(not(choice([nonterminal("foo"),nonterminal("bar")])),allof([not(nonterminal("bar")),not(nonterminal("foo"))]),globally())],grammar([],[production("","foo",not(choice([nonterminal("foo"),nonterminal("bar")])))]),grammar([],[production("","foo",allof([not(nonterminal("foo")),not(nonterminal("bar"))]))])>,
"massage_morgan4": <[massage(not(choice([not(nonterminal("foo")),not(nonterminal("bar"))])),allof([nonterminal("foo"),nonterminal("bar")]),globally())],grammar([],[production("","foo",not(choice([not(nonterminal("foo")),not(nonterminal("bar"))])))]),grammar([],[production("","foo",allof([nonterminal("bar"),nonterminal("foo")]))])>
);

void show_abridge() { <xbgf,bgf1,bgf2> = test_data["abridge"]; println("Input <bgf1>");println("Transformations: <xbgf>");println("Expected output <bgf2>");bgf3=transform(xbgf,bgf1);println("Actual output <bgf3>"); gdtv(bgf3,bgf2); }
Expand Down Expand Up @@ -297,6 +302,11 @@ void show_yaccify_left() { <xbgf,bgf1,bgf2> = test_data["yaccify_left"]; println
void show_yaccify_left_plus() { <xbgf,bgf1,bgf2> = test_data["yaccify_left_plus"]; println("Input <bgf1>");println("Transformations: <xbgf>");println("Expected output <bgf2>");bgf3=transform(xbgf,bgf1);println("Actual output <bgf3>"); gdtv(bgf3,bgf2); }
void show_yaccify_right() { <xbgf,bgf1,bgf2> = test_data["yaccify_right"]; println("Input <bgf1>");println("Transformations: <xbgf>");println("Expected output <bgf2>");bgf3=transform(xbgf,bgf1);println("Actual output <bgf3>"); gdtv(bgf3,bgf2); }
void show_yaccify_right_plus() { <xbgf,bgf1,bgf2> = test_data["yaccify_right_plus"]; println("Input <bgf1>");println("Transformations: <xbgf>");println("Expected output <bgf2>");bgf3=transform(xbgf,bgf1);println("Actual output <bgf3>"); gdtv(bgf3,bgf2); }
void show_massage_nn() { <xbgf,bgf1,bgf2> = test_data["massage_nn"]; println("Input <bgf1>");println("Transformations: <xbgf>");println("Expected output <bgf2>");bgf3=transform(xbgf,bgf1);println("Actual output <bgf3>"); gdtv(bgf3,bgf2); }
void show_massage_morgan1() { <xbgf,bgf1,bgf2> = test_data["massage_morgan1"]; println("Input <bgf1>");println("Transformations: <xbgf>");println("Expected output <bgf2>");bgf3=transform(xbgf,bgf1);println("Actual output <bgf3>"); gdtv(bgf3,bgf2); }
void show_massage_morgan2() { <xbgf,bgf1,bgf2> = test_data["massage_morgan2"]; println("Input <bgf1>");println("Transformations: <xbgf>");println("Expected output <bgf2>");bgf3=transform(xbgf,bgf1);println("Actual output <bgf3>"); gdtv(bgf3,bgf2); }
void show_massage_morgan3() { <xbgf,bgf1,bgf2> = test_data["massage_morgan3"]; println("Input <bgf1>");println("Transformations: <xbgf>");println("Expected output <bgf2>");bgf3=transform(xbgf,bgf1);println("Actual output <bgf3>"); gdtv(bgf3,bgf2); }
void show_massage_morgan4() { <xbgf,bgf1,bgf2> = test_data["massage_morgan4"]; println("Input <bgf1>");println("Transformations: <xbgf>");println("Expected output <bgf2>");bgf3=transform(xbgf,bgf1);println("Actual output <bgf3>"); gdtv(bgf3,bgf2); }


test bool test_abridge() { <xbgf,bgf1,bgf2> = test_data["abridge"]; return gdts(transform(xbgf,bgf1),bgf2); }
Expand Down Expand Up @@ -442,3 +452,8 @@ test bool test_yaccify_left() { <xbgf,bgf1,bgf2> = test_data["yaccify_left"]; re
test bool test_yaccify_left_plus() { <xbgf,bgf1,bgf2> = test_data["yaccify_left_plus"]; return gdts(transform(xbgf,bgf1),bgf2); }
test bool test_yaccify_right() { <xbgf,bgf1,bgf2> = test_data["yaccify_right"]; return gdts(transform(xbgf,bgf1),bgf2); }
test bool test_yaccify_right_plus() { <xbgf,bgf1,bgf2> = test_data["yaccify_right_plus"]; return gdts(transform(xbgf,bgf1),bgf2); }
test bool test_massage_nn() { <xbgf,bgf1,bgf2> = test_data["massage_nn"]; return gdts(transform(xbgf,bgf1),bgf2); }
test bool test_massage_morgan1() { <xbgf,bgf1,bgf2> = test_data["massage_morgan1"]; return gdts(transform(xbgf,bgf1),bgf2); }
test bool test_massage_morgan2() { <xbgf,bgf1,bgf2> = test_data["massage_morgan2"]; return gdts(transform(xbgf,bgf1),bgf2); }
test bool test_massage_morgan3() { <xbgf,bgf1,bgf2> = test_data["massage_morgan3"]; return gdts(transform(xbgf,bgf1),bgf2); }
test bool test_massage_morgan4() { <xbgf,bgf1,bgf2> = test_data["massage_morgan4"]; return gdts(transform(xbgf,bgf1),bgf2); }
26 changes: 26 additions & 0 deletions shared/xsl/bgf2bnf.xslt
Expand Up @@ -86,6 +86,21 @@
<xsl:text>?</xsl:text>
</xsl:template>

<!-- Boolean grammars support -->
<xsl:template match="not">
<xsl:text>!</xsl:text>
<xsl:choose>
<xsl:when test="bgf:expression/optional or bgf:expression/not">
<xsl:text>(</xsl:text>
<xsl:apply-templates select="./*"/>
<xsl:text>)</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="./*"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

<xsl:template match="terminal">
<xsl:text>"</xsl:text>
<xsl:value-of select="."/>
Expand Down Expand Up @@ -157,6 +172,17 @@
<xsl:text>)</xsl:text>
</xsl:template>

<!-- conjunctive grammars support -->
<xsl:template match="allof">
<xsl:text>(</xsl:text>
<xsl:apply-templates select="./bgf:expression[1]/*"/>
<xsl:for-each select="./bgf:expression[position()>1]">
<xsl:text> &amp; </xsl:text>
<xsl:apply-templates select="./*"/>
</xsl:for-each>
<xsl:text>)</xsl:text>
</xsl:template>

<xsl:template name="no-parenthesis">
<xsl:param name="expr"/>
<xsl:choose>
Expand Down
24 changes: 24 additions & 0 deletions topics/transformation/xbgf/tests/massage_morgan1.baseline
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<bgf:grammar xmlns:bgf="http://planet-sl.org/bgf">
<bgf:production>
<nonterminal>foo</nonterminal>
<bgf:expression>
<choice>
<bgf:expression>
<not>
<bgf:expression>
<nonterminal>foo</nonterminal>
</bgf:expression>
</not>
</bgf:expression>
<bgf:expression>
<not>
<bgf:expression>
<nonterminal>bar</nonterminal>
</bgf:expression>
</not>
</bgf:expression>
</choice>
</bgf:expression>
</bgf:production>
</bgf:grammar>
20 changes: 20 additions & 0 deletions topics/transformation/xbgf/tests/massage_morgan1.bgf
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<bgf:grammar xmlns:bgf="http://planet-sl.org/bgf">
<bgf:production>
<nonterminal>foo</nonterminal>
<bgf:expression>
<not>
<bgf:expression>
<allof>
<bgf:expression>
<nonterminal>foo</nonterminal>
</bgf:expression>
<bgf:expression>
<nonterminal>bar</nonterminal>
</bgf:expression>
</allof>
</bgf:expression>
</not>
</bgf:expression>
</bgf:production>
</bgf:grammar>
39 changes: 39 additions & 0 deletions topics/transformation/xbgf/tests/massage_morgan1.xbgf
@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<xbgf:sequence
xmlns:bgf="http://planet-sl.org/bgf"
xmlns:xbgf="http://planet-sl.org/xbgf">
<xbgf:massage>
<bgf:expression>
<not>
<bgf:expression>
<allof>
<bgf:expression>
<nonterminal>foo</nonterminal>
</bgf:expression>
<bgf:expression>
<nonterminal>bar</nonterminal>
</bgf:expression>
</allof>
</bgf:expression>
</not>
</bgf:expression>
<bgf:expression>
<choice>
<bgf:expression>
<not>
<bgf:expression>
<nonterminal>bar</nonterminal>
</bgf:expression>
</not>
</bgf:expression>
<bgf:expression>
<not>
<bgf:expression>
<nonterminal>foo</nonterminal>
</bgf:expression>
</not>
</bgf:expression>
</choice>
</bgf:expression>
</xbgf:massage>
</xbgf:sequence>
16 changes: 16 additions & 0 deletions topics/transformation/xbgf/tests/massage_morgan2.baseline
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<bgf:grammar xmlns:bgf="http://planet-sl.org/bgf">
<bgf:production>
<nonterminal>foo</nonterminal>
<bgf:expression>
<choice>
<bgf:expression>
<nonterminal>bar</nonterminal>
</bgf:expression>
<bgf:expression>
<nonterminal>foo</nonterminal>
</bgf:expression>
</choice>
</bgf:expression>
</bgf:production>
</bgf:grammar>
28 changes: 28 additions & 0 deletions topics/transformation/xbgf/tests/massage_morgan2.bgf
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<bgf:grammar xmlns:bgf="http://planet-sl.org/bgf">
<bgf:production>
<nonterminal>foo</nonterminal>
<bgf:expression>
<not>
<bgf:expression>
<allof>
<bgf:expression>
<not>
<bgf:expression>
<nonterminal>foo</nonterminal>
</bgf:expression>
</not>
</bgf:expression>
<bgf:expression>
<not>
<bgf:expression>
<nonterminal>bar</nonterminal>
</bgf:expression>
</not>
</bgf:expression>
</allof>
</bgf:expression>
</not>
</bgf:expression>
</bgf:production>
</bgf:grammar>
39 changes: 39 additions & 0 deletions topics/transformation/xbgf/tests/massage_morgan2.xbgf
@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<xbgf:sequence
xmlns:bgf="http://planet-sl.org/bgf"
xmlns:xbgf="http://planet-sl.org/xbgf">
<xbgf:massage>
<bgf:expression>
<not>
<bgf:expression>
<allof>
<bgf:expression>
<not>
<bgf:expression>
<nonterminal>foo</nonterminal>
</bgf:expression>
</not>
</bgf:expression>
<bgf:expression>
<not>
<bgf:expression>
<nonterminal>bar</nonterminal>
</bgf:expression>
</not>
</bgf:expression>
</allof>
</bgf:expression>
</not>
</bgf:expression>
<bgf:expression>
<choice>
<bgf:expression>
<nonterminal>foo</nonterminal>
</bgf:expression>
<bgf:expression>
<nonterminal>bar</nonterminal>
</bgf:expression>
</choice>
</bgf:expression>
</xbgf:massage>
</xbgf:sequence>
24 changes: 24 additions & 0 deletions topics/transformation/xbgf/tests/massage_morgan3.baseline
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<bgf:grammar xmlns:bgf="http://planet-sl.org/bgf">
<bgf:production>
<nonterminal>foo</nonterminal>
<bgf:expression>
<allof>
<bgf:expression>
<not>
<bgf:expression>
<nonterminal>foo</nonterminal>
</bgf:expression>
</not>
</bgf:expression>
<bgf:expression>
<not>
<bgf:expression>
<nonterminal>bar</nonterminal>
</bgf:expression>
</not>
</bgf:expression>
</allof>
</bgf:expression>
</bgf:production>
</bgf:grammar>
20 changes: 20 additions & 0 deletions topics/transformation/xbgf/tests/massage_morgan3.bgf
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<bgf:grammar xmlns:bgf="http://planet-sl.org/bgf">
<bgf:production>
<nonterminal>foo</nonterminal>
<bgf:expression>
<not>
<bgf:expression>
<choice>
<bgf:expression>
<nonterminal>foo</nonterminal>
</bgf:expression>
<bgf:expression>
<nonterminal>bar</nonterminal>
</bgf:expression>
</choice>
</bgf:expression>
</not>
</bgf:expression>
</bgf:production>
</bgf:grammar>
39 changes: 39 additions & 0 deletions topics/transformation/xbgf/tests/massage_morgan3.xbgf
@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<xbgf:sequence
xmlns:bgf="http://planet-sl.org/bgf"
xmlns:xbgf="http://planet-sl.org/xbgf">
<xbgf:massage>
<bgf:expression>
<not>
<bgf:expression>
<choice>
<bgf:expression>
<nonterminal>foo</nonterminal>
</bgf:expression>
<bgf:expression>
<nonterminal>bar</nonterminal>
</bgf:expression>
</choice>
</bgf:expression>
</not>
</bgf:expression>
<bgf:expression>
<allof>
<bgf:expression>
<not>
<bgf:expression>
<nonterminal>bar</nonterminal>
</bgf:expression>
</not>
</bgf:expression>
<bgf:expression>
<not>
<bgf:expression>
<nonterminal>foo</nonterminal>
</bgf:expression>
</not>
</bgf:expression>
</allof>
</bgf:expression>
</xbgf:massage>
</xbgf:sequence>
16 changes: 16 additions & 0 deletions topics/transformation/xbgf/tests/massage_morgan4.baseline
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<bgf:grammar xmlns:bgf="http://planet-sl.org/bgf">
<bgf:production>
<nonterminal>foo</nonterminal>
<bgf:expression>
<allof>
<bgf:expression>
<nonterminal>bar</nonterminal>
</bgf:expression>
<bgf:expression>
<nonterminal>foo</nonterminal>
</bgf:expression>
</allof>
</bgf:expression>
</bgf:production>
</bgf:grammar>

0 comments on commit 568c5fe

Please sign in to comment.