私は宿題としてシンプルなCコンパイラを作っています。私は、次の文法規則を持っている:compound_statement
ルールは私が直接fprintf()
機能命令ではできない、function_definition
前と呼ばれるようにいくつかのASMコードで関数をラップする
declarator:
push %ebp
mov %esp %ebp
// compound_statement (function instructions)
pop %ebp
ret
:
function_definition
: type_name declarator compound_statement
私の意味規則は、に変換しなければなりませんそのセマンティックルール。しかし、Yacc型ではstreamstring
を定義することはできません(my previous question参照)。
したがって、関数の命令を文字列に入れ(メモリ割り当て側で混乱するstrcat
を使いません)、以前のASM命令でそれらをラップするにはどうすればよいですか?
これはサイモン・リッチャーが「ミッド・ルール」で提案したものです。それは私のために働いているようです。 –