コンピュータ ソフトウェア
Print ISSN : 0289-6540
Messer: マクロ展開過程を表示できるC++17に準拠したCプリプロセッサの対話型環境
今泉 良紀篠埜 功
著者情報
ジャーナル フリー

2021 年 38 巻 2 号 p. 2_27-2_45

詳細
抄録

Cプリプロセッサ(以下CPP)はC言語やC++言語などのプログラミング言語においてコンパイル時に前処理を行う字句ベースのマクロ処理系である.CPPマクロを用いることで,C言語などの型変数のないプログラミング言語でもジェネリクスのような型を抽象化したコードを記述することができるようになるなど,マクロを使わなかった場合と比べプログラムが書きやすくなる.
一方で,CPPはC言語などのプログラミング言語の構文に関わりなく字句を置換するため,使い方を誤るとメッセージからは特定が難しいエラーを発生させうる.また,CPPの学習は難解であり,さらに#include以外のプリプロセスディレクティブの学習の優先度はプログラミング言語自体の構文や標準ライブラリ,周辺APIよりも低くなりがちである.構文に関わりなく置換が行われることや学習優先度が低いことなどがおそらく要因となり,CPPは正しく理解して活用されることは少ない.マクロの展開過程を見ることによりマクロ展開の挙動の理解が深まるが,既存のマクロ展開過程の表示に対応したCPPはC99に準拠しており,C++17のような新しい言語規格で追加された機能について学習する際に使うことはできない.
そこで,本論文ではCPPの正しい理解を容易にするため,CPPの対話型評価環境Messerを実装し,その実装の詳細について報告する.Messerはマクロ展開の過程を表示できる,C++17に準拠したCPPの対話型環境であり,文脈を考慮した入力補完機能を持つ.この入力補完機能を実装するために,行編集ライブラリLinseを実装した.また,MesserのCPPや入力補完機能を実装するために,字句列に対して構文解析ができるパーサーコンビネーターであるmatcha2を実装した.

著者関連情報
© 2021, 日本ソフトウェア科学会
前の記事 次の記事
feedback
Top