Context Free:迭代图编译器 (original) (raw)
Context Free是一个比较有趣的编译器,它能够把一些指令代码编译生成图形,而且拥有迭代特性,使我们仅通过短短的几行代码就能够绘制出漂亮的图形。
Context Free 的用法比较简单,编译之后它会产生一个 cfdg 的可执行程序。如果执行 ./cfdg 而不加参数,那么它将显示帮助文档。Context Free 源码包中提供了 30 多个 cfdg 文件,用来生成演示图形。为了方便大家,我写了一串脚本(假定当前目录为 Context Free 源码目录下):
$ make # 编译 Context Free $ mkdir demo # 新建 demo 目录 $ files=`ls input/*.cfdg |cut -d. -f1 |cut -d/ -f2` # 注意这里的反引号,在 Esc 键下方 $ for i in <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>f</mi><mi>i</mi><mi>l</mi><mi>e</mi><mi>s</mi><mo separator="true">;</mo><mi>d</mi><mi>o</mi><mi mathvariant="normal">.</mi><mi mathvariant="normal">/</mi><mi>c</mi><mi>f</mi><mi>d</mi><mi>g</mi><mo>−</mo><mi>s</mi><mn>800</mn><mi>i</mi><mi>n</mi><mi>p</mi><mi>u</mi><mi>t</mi><mi mathvariant="normal">/</mi></mrow><annotation encoding="application/x-tex">files; do ./cfdg -s 800 input/</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mord mathnormal">i</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">es</span><span class="mpunct">;</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">d</span><span class="mord mathnormal">o</span><span class="mord">./</span><span class="mord mathnormal">c</span><span class="mord mathnormal">fd</span><span class="mord mathnormal" style="margin-right:0.03588em;">g</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">s</span><span class="mord">800</span><span class="mord mathnormal">in</span><span class="mord mathnormal">p</span><span class="mord mathnormal">u</span><span class="mord mathnormal">t</span><span class="mord">/</span></span></span></span>{i}.cfdg demo/${i}.png; done # 将 Context Free 提供的演示文档统统编译成 png 图像
这样就在当前目录的 demo 中生成了大小均为 800*800px 的一系列 png 图像,赶快动用你最爱的图片浏览器浏览一下吧!如果你想自己写写代码,学习文档在http://www.contextfreeart.org/mediawiki/index.php/CFDG_HOWTO 站点。
Context Free 依赖于 g++、flex、bison 以及 libpng 库,这些都可以在源中检索到,安装好后就可以使用我刚才的脚本编译漂亮的图形啦。
下载 Context Free:tgz 格式或 zip 格式
# Edit on GitHub