# context-free-art: Generate art from context-free grammars

Create art via context free grammar production rules.

### Context free grammar primer

Context free grammars consist of a set of terminal symbols, a set of non-terminal symbols, and production rules that map non-terminals to other symbols.

With a context-free grammar, we can generate strings of terminals that conform to the specified language.

Our language will describe graphics.

### Example

import Art.ContextFree.Probabilistic import Data.List.NonEmpty -- let's define a Production rule a = Circle 1 -- this will produce an IO (Maybe Svg) from the blaze-svg package -- to turn it into a string we can use one of the `blaze-svg` renderers graphic1 = render $ Circle 1 -- let's create a non-terminal, 'a', which renders a terminal, 'Circle 1' -- and has an 85% chance of rendering itself, placed to its right a = NonTerminal $ (100, Circle 1) :| [(85, b)] b = Mod [Move (2, 0)] a

import Art.ContextFree.Definite import Data.List.NonEmpty move = Mod [Move (0, -1.8), Scale 0.8] armN :: Int -> Symbol armN 0 = move $ Circle 1 armN n = move $ NonTerminal $ Circle 1 :| [Mod [Rotate 10] $ armN (n - 1)] arm :: Symbol arm = armN 20 spiral = NonTerminal $ Circle 1 :| [arm, Mod [Rotate 120] arm, Mod [Rotate 240] arm]

The latter produces this graphic:

## Downloads

- context-free-art-0.3.0.0.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)

Versions [RSS] | 0.1.0.0, 0.2.0.0, 0.2.0.1, 0.2.0.2, 0.2.0.3, 0.3.0.0, 0.3.0.1 |
---|---|

Change log | CHANGELOG.md |

Dependencies | base (>=4.12 && <5), bifunctors (>=5.5), blaze-markup, blaze-svg (>=0.3.6), random (>=1.1), safe, text (>=1.2), text-show (>=3.8) [details] |

License | BSD-3-Clause |

Author | Owen Shepherd |

Maintainer | 414owen@gmail.com |

Category | Graphics |

Home page | https://github.com/414owen/context-free-art |

Uploaded | by 414owen at 2019-10-28T16:00:19Z |

Distributions | NixOS:0.3.0.1 |

Downloads | 2167 total (10 in the last 30 days) |

Rating | (no votes yet) [estimated by Bayesian average] |

Your Rating | |

Status | Docs uploaded by user Build status unknown [no reports yet] |