2016-06-17 9 views
0

YACCとLEXで参照渡しされるパラメータを持つ関数を解析する方法を実装する必要があります。 Exemple:参照渡しの変数の実装

int main(){ 
int a = 5; 
f(a); 
printf(a) 
return 0; 
} 

f(passed_by_reference int b){ 
b++; 
} 

私は、シンボルテーブルを使用するようにしようと試みたが、変更が失われるので、テーブルにそれらは、aとbのように保存されるので、変数aと変数bと一致することはできません。

+3

これは意味的な実装上の疑問で、構文(lexとyaccは何を扱うか)や解析とは関係ありません。 –

答えて

0

構文解析に関しては、キーワードpassed_by_reference を関数パラメータの修飾子として認識するだけで済みます。

次に、セマンティクスで、関数呼び出しを関数定義にバインドするときに、値ではなく参照によってパラメータに引数をバインドします。どのようにするかは、セマンティクスをどのように実装するかによってまったく異なります。パーサーが作成したIRやASTを解釈していますか?あるいは、いくつかのターゲット実行モデルのためのコードを生成していますか?


より一般的に、あなたはinout&を使用します。

+0

私はすべての作業パーサーコードウィットを持って、私は参照によって変数を渡す可能性を実装するように求められています。私はCコードを解釈するはずです。私は通常の変数の受け渡しを処理するコードを複製し、 'passed_by_reference'文字列をキャッチして値へのポインタを返そうとしましたが...成功しませんでした...私はかなり混乱しています – bogALT

+0

@bogALT :あなたのインタプリタコードでは、値をコピーするのではなく、引数をパラメータにバインドします。 –

+0

私は試してみましょう – bogALT

関連する問題