summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2009-02-14 14:07:04 +0000
committerkrasimir <krasimir@chalmers.se>2009-02-14 14:07:04 +0000
commite6fd01066bb50626a10cdc93c344488077e5183f (patch)
tree35dca8f1d259c842a82957f83da131885c2fe171 /examples
parent3548610ba12a42d391c06cde41912ef61741b197 (diff)
Graftals in GF. examples/graftals
Diffstat (limited to 'examples')
-rw-r--r--examples/graftals/Cantor.gf11
-rw-r--r--examples/graftals/Dragon.gf13
-rw-r--r--examples/graftals/Graftal.gf15
-rw-r--r--examples/graftals/Koch.gf12
-rw-r--r--examples/graftals/Sierpinski.gf14
5 files changed, 65 insertions, 0 deletions
diff --git a/examples/graftals/Cantor.gf b/examples/graftals/Cantor.gf
new file mode 100644
index 000000000..9444a31f3
--- /dev/null
+++ b/examples/graftals/Cantor.gf
@@ -0,0 +1,11 @@
+concrete Cantor of Graftal = {
+lincat N = {f : Str; g : Str} ;
+lincat S = {s : Str} ;
+
+lin z = {f = F; g = G} ;
+lin s x = {f = x.f ++ x.g ++ x.f; g = x.g ++ x.g ++ x.g} ;
+lin c x = {s = "newpath 10 550 moveto" ++ x.f ++ "stroke showpage"} ;
+
+oper F : Str = "1 0 rlineto" ;
+oper G : Str = "1 0 rmoveto" ;
+} \ No newline at end of file
diff --git a/examples/graftals/Dragon.gf b/examples/graftals/Dragon.gf
new file mode 100644
index 000000000..ff151ce95
--- /dev/null
+++ b/examples/graftals/Dragon.gf
@@ -0,0 +1,13 @@
+concrete Dragon of Graftal = {
+lincat N = {x : Str; y : Str} ;
+lincat S = {s : Str} ;
+
+lin z = {x = ""; y = ""} ;
+lin s x = {x = x.x ++ R ++ x.y ++ F ++ R; y = L ++ F ++ x.x ++ L ++ x.y} ;
+lin c x = {s = "newpath 300 550 moveto" ++ F ++ x.x ++ "stroke showpage"} ;
+
+oper F : Str = "0 5 rlineto" ;
+oper L : Str = "+90 rotate" ;
+oper R : Str = "-90 rotate" ;
+
+} \ No newline at end of file
diff --git a/examples/graftals/Graftal.gf b/examples/graftals/Graftal.gf
new file mode 100644
index 000000000..a182d3ebd
--- /dev/null
+++ b/examples/graftals/Graftal.gf
@@ -0,0 +1,15 @@
+-- (c) Krasimir Angelov
+--
+-- The L-System is a grammar formalism which is used to describe
+-- graftals (recursive graphical objects). It is interesting
+-- coincidence that every L-System grammar could be redefined
+-- as PMCFG grammar. This demo shows how to generate graftals
+-- using GF. The output from every concrete syntax is in postscript
+-- format.
+
+abstract Graftal = {
+cat N; S;
+fun z : N ;
+ s : N -> N ;
+ c : N -> S ;
+} \ No newline at end of file
diff --git a/examples/graftals/Koch.gf b/examples/graftals/Koch.gf
new file mode 100644
index 000000000..bbfda8c0d
--- /dev/null
+++ b/examples/graftals/Koch.gf
@@ -0,0 +1,12 @@
+concrete Koch of Graftal = {
+lincat N = {f : Str} ;
+lincat S = {s : Str} ;
+
+lin z = {f = F} ;
+lin s x = {f = x.f ++ L ++ x.f ++ R ++ x.f ++ R ++ x.f ++ L ++ x.f} ;
+lin c x = {s = "newpath 10 550 moveto" ++ x.f ++ "stroke showpage"} ;
+
+oper F : Str = "2 0 rlineto" ;
+oper L : Str = "+90 rotate" ;
+oper R : Str = "-90 rotate" ;
+} \ No newline at end of file
diff --git a/examples/graftals/Sierpinski.gf b/examples/graftals/Sierpinski.gf
new file mode 100644
index 000000000..c85d274f4
--- /dev/null
+++ b/examples/graftals/Sierpinski.gf
@@ -0,0 +1,14 @@
+concrete Sierpinski of Graftal = {
+lincat N = {a : Str; b : Str} ;
+lincat S = {s : Str} ;
+
+lin z = {a = A; b = B} ;
+lin s x = {a = x.b ++ R ++ x.a ++ R ++ x.b; b =x.a ++ L ++ x.b ++ L ++ x.a} ;
+lin c x = {s = "newpath 300 550 moveto" ++ x.a ++ "stroke showpage"} ;
+
+oper A : Str = "0 2 rlineto" ;
+oper B : Str = "0 2 rlineto" ;
+oper L : Str = "+60 rotate" ;
+oper R : Str = "-60 rotate" ;
+
+} \ No newline at end of file