単純な while ステートメントを C 言語 (ANSI 89 としましょう) からアセンブリ at&t に変換するプログラムの yacc ソース ファイルを作成しようとしています。以下は私の文法であり、yacc ファイルの中心部分です。
%%
while_statement : 'w' 'h' 'i' 'l' 'e' '(' control_statement ')' '{' block '}'
{printing of the assembly code;}
control_statement : expression '>' expression { $$ = strcat(write exp jg back,) ;}
| expression '<' expression { $$ = strcat(write exp jl back,) ;}
| expression '==' expression { $$ = strcat(write exp je back,) ;}
| expression '<=' expression { $$ = strcat(write exp jle back,) ;}
| expression '>=' expression { $$ = strcat(write exp jge back,) ;}
| expression '!=' expression { $$ = strcat(write exp jne back,) ;}
| expression { $$ = $1;}
block : expression ';'
| block expression ';'
expression : expression '+' expression { $$ = $1 + $3;}
| expression '-' expression { $$ = $1 - $3;}
| expression '*' expression { $$ = $1 * $3;}
| expression '/' expression { if($3 == 0)
yyerror("divide by zero");
else
$$ = $1 / $3;}
| '-' expression { $$ = -$2;}
| '(' expression ')' { $$ = $2;}
| string '=' expression { create new variable called string with expression value }
| number { $$ = $1;}
string : letter {$$ = $1;}
| string letter {strcat($$, ??;}
letter : A {strcat($$, 'A');}
.........
number : digit { $$ = $$ + $1;}
| number digit { $$ = ($1 * 10) + $2;}
digit : '0' {$$ = 0;}
| '1' {$$ = 1;}
| '2' {$$ = 2;}
| '3' {$$ = 3;}
| '4' {$$ = 4;}
| '5' {$$ = 5;}
| '6' {$$ = 6;}
| '7' {$$ = 7;}
| '8' {$$ = 8;}
| '9' {$$ = 9;}
%%
私の質問は次のとおりです。最終的な文字列の値を連結するために使用する関数はどれですか? または、どの種類のデータ型、構造体、共用体などを使用する必要がありますか? 回答ありがとうございます。