From Context Free Art
Context Free/CFDG cans and cannots
What Context Free art is
Context Free enables the rendering of arbitrary sized graphical images. It features a two dimensional (2D) graphical space, and some advanced possibilities of graphical definition, for example recursion.
In Chomsky's hierarchy of formal languages, context free grammars are more powerful than regular grammars (type 3) and, on the other hand, less powerful than context sensitive grammars (type 1). In a nutshell it means that you can do some things with context sensitive grammars that you cannot do with context free ones, and some with context-free grammars that are impossible in regular grammars. On the other hand, more is known about the properties of the simpler grammar types.
Simplicity apparently brings its pros and cons. Whereas context free grammars are relatively easy to understand, context-sensitive grammars bring in possibilities which may puzzle more quickly.
Recursion is among the most interesting possibilities open to context free grammars, enabling, among other things, fractals of various kinds.
What Context Free art is not
- There is no way of storing information that was produced during the render into the system. In effect this means that anything that is already defined in the process of creating a new picture will be inaccessible.
- Real shadows or reflections, for example, are impossible to define, because they would require knowledge about the context they are cast on as well as about the original object.
- However, shadows or reflections of the entire rendered scene are not out of the question. Context Free generates an enormous "sentence" from the context-free grammar defined in your cfdg file and then streams the sentence to a canvas object to produce pretty output. The tiling directive works by inserting a tiling adaptor canvas between the sentence stream and the output canvas. One could define a shadow adaptor canvas or a reflection adaptor canvas to shadow or reflect an entire scene. But you can't shadow or reflect just a part of the scene because that would require manipulating the generated sentence in a context-sensitive manner.