萌えハッカーニュースリーダー

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

出典: https://neacsu.net/docs/programming/embedding-awk-in-c/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

それは…えーと…アホ(Aho)で、ワイン(Weinberger)好きで、カーニバル(Kernighan)好きな人たちの集まり、略してAWK!…って、違うぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search