The Parser half of the L-system code is now ready. The Parser consists of a Perl program (PARAM.PL) containing the Parser code, and another Perl program containing the L-system definitions (rules, constants, algorithms, pre-defined shapes, etc). Unlike other parsers, this system has the benefit of parsing parametric and stochastic L-systems just as easily as "normal" L-systems. (Context-sensitive L-systems are left as an exercise for the reader. 8-)
The image on the right is a simple "flowchart" showing how the complete system works. The parser is on the left (barely visible Perl code). The interpreter (bottom) takes pre-defined DXF shapes (if any) from a modeller (top) along with turtle information from the Parser and produces a complete DXF model which can then be used in any rendering engine (right). The model here is my rendition of the "lilac" seen on page 92 of The Algorithmic Beauty of Plants (ABOP). The flower model I created in Rhinocerous while the interpreter and parser created the framework for the complete stalk.
DownloadsHere are some examples of L-system definitions converted to Perl for the PARAM.PL parser. Download the Parser for more examples.
- Parser The Perl Parser code along with several example files.
- Interpreter Coming Soon?
#define R 1.456 w: A(1) p1: A(s) -> F(s)[+A(s/R)][-A(s/R)]From p.48 ABOP, ©1990 Springer-Verlag |
$R = "1.456"; $constructor = "A(1)"; sub A { local($s) = $_[0]; return "F($s)[+A(".($s/$R).")][-A(".($s/$R).")]"; } |
w: B(2)A(4,4) p1: A(x,y) : y <= 3 -> A(x*2,x+y) p2: A(x,y) : y > 3 -> B(x)A(x/y,0) p3: B(x) : x < 1 -> C p4: B(x) : x >= 1 -> B(x-1)From p.42 ABOP, ©1990 Springer-Verlag |
$constructor = "B(2)A(4,4)"; sub A { local($x,$y) = @_; if ($y <= 3) { return "A(".($x*2).",".($x+$y).")"; } if ($y > 3) { return "B($x)A(".($x/$y).",0)"; } } sub B { local($x) = $_[0]; if ($x < 1) { return "C"; } if ($x >= 1) { return "B(".($x-1).")"; } } |
Return to the Index
This page is created and maintained by Sean O'Malley. Most texts, code segments, images, and linked files contained on this site are copyright ©2000 by Sean O'Malley and may not be copied, reproduced, or used in any medium without permission.