0

私は C を練習したかったので、Python インタープリターの精神で C インタープリターを作成することにしました。私は C の知識は多少ありますが、私は常にプログラマーの型を行うことによって学習してきました。

これまでのところ、非常に単純です。ユーザーの入力を一度に 1 行ずつ解析し、次のような宣言を区別するだけです。

int x = 10;
char c = 'a';

ここで、変数の型、名前、および int 値の ivalue と char 値の cvalue を表す構造体を作成します。まだまだやるべきことはたくさんありますが、一歩一歩。

次のように、関数呼び出しを解析することもできます。

printf("value of x = %d\n, x);

ここで、関数の名前を抽出し、引数を char** args に格納します。

ばかげているように聞こえますが、printf、strstr、または strcpy などの呼び出しを実行するために、標準 C ライブラリ関数ごとにマッパーを作成することは避けたいと思います。このアプローチなしで標準のc関数を動的に呼び出す方法はありますか?

また、このことのデザインに関する提案は大歓迎です。

4

2 に答える 2

0

C の文法を解析する手間は別として、1970 年代の機器のメモリ制約を考慮して単一のパスで処理されるように設計されているため、実際には解釈に非常に適しています。

実際、Herbert Schildt によるC: The Complete Reference, Fourth Edition のパート 6 (p. 713-787) は、そのようなインタープリターを書くことによって、本書の残りの部分をすべて結び付けることに専念しています。

本のバージョンに改訂があるかどうかは確認していませんが、彼の「Little C」は、1989 年 8 月の Dr. Dobb's Journal で初めて世界に紹介されました。

また、この質問には、既存の C インタープリターをリストした回答がたくさんあります。

C 関数の動的呼び出しに関しては、Windows よりも POSIX プラットフォームの方が簡単です。これは、 s.lib内のシンボルを解決するためにファイルが必要になる場合があるためです。ファイルには同等のものはありません。.dll.so

ファイルでは、ライブラリへのパス.soだけを使用して、関数ポインターを名前で取得します。dlopendlsym

これを実行する例は、dlopen の Linux マンページで を実行して見つけることができますman dlopen

于 2021-10-02T03:41:37.517 に答える