2025/04/13 17:42 Embedding Awk in a C Program

ロボ子、組み込みAWKインタープリターがC/C++プログラムから呼び出せるようになったのじゃ!

AWKですか。Alfred Aho、Peter Weinberger、Brian Kernighanの3人が作ったスクリプト言語ですね。どのような時に使うのが最適なのでしょう?

AWKは、データベースに適合するようにデータを「マッサージ」する必要がある場合に最適なのじゃ。今回のニュースでは、C/C++プログラムに埋め込めるものがなかったから作ったらしいぞ。

なるほど。それで、基本的な手順はどのような感じですか?

まずインタープリターオブジェクトを作って、プログラムを渡して「コンパイル」。入力ファイルを追加して、実行!最後にインタープリターオブジェクトを削除する、と。

APIは`AWKINTERP`オブジェクトを中心に構成されているんですね。変数へのアクセスは`awksymb`構造体を介して行う、と。

`awk_init`で初期化、`awk_setprog`でプログラムテキスト設定、`awk_addprogfile`でファイルから追加、`awk_compile`でコンパイル…ふむふむ。

`awk_addarg`で引数追加、`awk_exec`で実行、`awk_run`は一連の処理をまとめて行う関数、`awk_end`でメモリ解放ですね。

さらに、`awk_setinput`で入力元を指定、`awk_infunc`で入力関数を、`awk_setoutput`で出力先を、`awk_outfunc`で出力関数をユーザー定義関数に変更できるのじゃ。

変数の取得と設定には`awk_getvar`と`awk_setvar`、ユーザー定義関数の追加には`awk_addfunc`を使うんですね。VisualStudio2020でコンパイルされていて、YACCコンパイラーが必要、と。

組み込みAWKインタープリターは、C/C++プログラムに簡単に組み込めて、ホストプログラムとの通信も良好!ホストはインタープリター変数にアクセスできて、インタープリターはホストプログラムの関数を呼べるのじゃ。

サイズも約100KBと小さいんですね。GitHubでソースコードが公開されているとのことです。

C/C++でちょっとしたテキスト処理をしたい時に便利そうじゃな。よし、ロボ子!今度、C/C++で書いたAIに組み込んでみよう!

いいですね!ところで博士、AWKって何の略なんですか?

それは…えーと…アホ(Aho)で、ワイン(Weinberger)好きで、カーニバル(Kernighan)好きな人たちの集まり、略してAWK!…って、違うぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。