Lindenmayer Systems in Python provides a simple implementation of Lindenmayer systems (also called "L-systems" or "substitution systems"). In basic form, a Lindenmayer system consists of a starting string of symbols from an alphabet which has repeated transitions applied to it, specified by a list of transition search-and-replace rules. In addition to the standard formulation, two alternative implementations are included: sequential systems (in which at most one rule is applied) and tag systems (in which the transition only takes place at the beginning and end of the string). Despite being implemented entirely in Python, for reasonable rules on a modern machine, the system is capable of running thousands of generations per second. Lindenmayer systems are found in artificial intelligence and artificial life and can be used to generate fractal patterns (usually via mapping symbols from the alphabet to turtle commands), organic-looking patterns that can simulate plants or other living things, or even music.
The PyGE project aims to provide free cross-platform desktop applications to make the growing collection of copyright-free literary works from Project Gutenberg more accessible to the typical computer user. The suite includes PyGETS, a program for searching and downloading available PG e-texts, PyGEMZ, a program for converting e-texts to a format suitable for both desktop and Palm PDA usage, and PyGERS, a program for comfortably viewing e-texts which includes basic text-to-speech capabilities.
PyBison is a sophisticated yet easy-to-use parser creation toolkit for Python that interfaces directly to Bison (yacc)-based parsers. It provides full LALR(1) grammar support, allowing for simple parsing tasks through to writing compilers for high-level languages. Parser code is automatically generated from rules within user-created Parser classes (written in Python), and then, compiled, yacc'ed and linked into a shared library, which is loaded into the running process. All this happens automatically. When the parser runs, it connects directly with the yyparse() routine, and takes event callbacks upon parse targets being reached.