Задачка на кодогенерацию
Nov. 24th, 2012 10:30 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
https://gist.github.com/4139831
Вместо того, чтобы писать функцию, которая строит дерево, напишите функцию, генерирующую код, который строит это дерево. Более точно, определите функцию
Вместо того, чтобы писать функцию, которая строит дерево, напишите функцию, генерирующую код, который строит это дерево. Более точно, определите функцию
gen()
так, чтобы она печатала код на Си в stdout
и программа на выходе кодогенератора создавала то же самое дерево, что пришло в аргументе функции. Ниже некоторые детали:alexo@euromake:/tmp$ git clone git://gist.github.com/4139831.git gentree Cloning into gentree... remote: Counting objects: 8, done. remote: Compressing objects: 100% (7/7), done. remote: Total 8 (delta 1), reused 5 (delta 1) Receiving objects: 100% (8/8), done. Resolving deltas: 100% (1/1), done. alexo@euromake:/tmp$ cd gentree/ alexo@euromake:/tmp/gentree$ make cc gentree.c -o gentree ./gentree 0 >output.c make output make[1]: Entering directory `/tmp/gentree' cc output.c -o output make[1]: Leaving directory `/tmp/gentree' [ 0 = $(./output) ] alexo@euromake:/tmp/gentree$ git grep Grammar gentree.c:/* Grammar: <tree> ::= '0' | '1' <tree> <tree>. */ alexo@euromake:/tmp/gentree$ make TEST=1101000 ./gentree 1101000 >output.c make output make[1]: Entering directory `/tmp/gentree' cc output.c -o output make[1]: Leaving directory `/tmp/gentree' [ 1101000 = $(./output) ] make: *** [all] Error 1 alexo@euromake:/tmp/gentree$ git grep TODO gentree.c: /* TODO: print some code in stdout. */ alexo@euromake:/tmp/gentree$ vi gentree.c