Context Sensitive Parser

ところでコンテキストって何だ?

仕事ではなくただの趣味だけど、去年からちょこちょこ書いていた NodeJS 用のモジュールがようやく完成した。

CS Parser
github.com/amekusa/cs-parser

これはパーサー(コードやデータを解析するプログラム)を簡潔かつ綺麗に書けるようにするためのフレームワークで、特に解析対象となる言語やフォーマットの文脈を解析ルールに落とし込みやすいような API になっているのが特徴だ。

ちなみに “CS” は Context Sensitive(文脈依存)の頭文字である。

俺は何というか、文脈(コンテキスト)という概念について考えるのが好きだ。この言葉は広い意味を持っていて、活字の上に限らず様々な状況で使うことができる。

文脈 = 空気

例えば、たぶんもう死語だと思うが KY という言葉は知っていると思う。実はこの K こそがコンテキストの K 、すなわち文脈そのものを指すのだ(真顔)。

人と人とのコミュニケーションにおいて、文脈(空気)を読めぬ者はその時々の会話の流れや行間、話題がいつどこに着地すべきなのかなどがわからない。結果として頓珍漢な受け答えやボケをかましてしまい、気まずい雰囲気を作ってしまうわけだなあ(ハハ!)。

こういう言葉が流行ってしまうように、日本社会において文脈はとりわけ重視される。それは人種のるつぼと言われるアメリカと比べると、日本は単一民族国家としての歴史の中で、いわゆるハイ・コンテキストな文化的背景に根ざした形で、比較的みんなが似た考えを共有しているせいだと思われる。

最近だと忖度って言葉が流行ったけど、これも結局のところ「察しろ。みなまで言わせるな」というメッセージであるという意味では、KY 同様非常に使い手に都合のいい言葉だと思う。

ええカッコしぃの大人は、こういう言葉を使われてしまうと「行間を読めない奴」「察せない奴」「無粋」「アホ」などと思われたくなくて積極的に文脈を読んでしまう。公の場ではこれに集団心理が拍車をかける。実に巧みな(ズルい)言葉だとは思わないかね?

プログラミングにおけるコンテキスト

プログラミングをしていて、ライブラリやフレームワークなどのドキュメントを読んでいると、コンテキストという言葉をしばしば目にすることがないだろうか。俺が初めてこの言葉を知ったのは Java と OpenGL でゲーム作っていた時だった。

描画関連のメソッドを呼び出す際に必ず必要になる Graphics オブジェクトや GL オブジェクト、あれこそがコンテキストである。

状態 = コンテキスト?

Java の Graphics オブジェクトは直線や矩形、円などを画面に描画するメソッドを持っている。パラメータは必要最低限で、例えば線分を描く drawLine 関数は始点と終点の座標を与えるだけだ。

g.drawLine(x1, y1, x2, y2);

当時、趣味でプログラミングを始めたばかりだった俺は、なぜ色も指定できないのかと疑問に思った。このままではどこに線分を描こうが、色は全てデフォルトの黒である。

実は描く線分の色を変えるには setColor 関数を呼ぶ必要があった。それも drawLine 関数よりも先に

g.setColor(Color.RED); // 赤をセットする
g.drawLine(x1, y1, x2, y2); // 赤い線が描かれる

これは Graphics オブジェクト(この例では変数 g)が次の描画に使う色を常に内部に保持しているということを意味する。言わば “状態(ステート)” を持っているわけであり、この “状態” こそがコンテキスト、すなわち文脈である。

プログラムは上から下に流れるので、drawLinesetColor の後に実行され、setColor の影響を受ける。言い換えるなら setColor によって変化した文脈に依存しているというわけだ。

OpenGL の GL オブジェクトも Graphics オブジェクト同様に様々な状態を保持しており、それらは 3D モデルの描画命令に影響を与える。代表的なのが “行列 (Matrix) スタック” だろう。

長くなるので説明を省くが、今回制作した CS Parser は、この OpenGL の “スタックされた状態” というデザインに多大なインスパイアを受けている。

CS Parser の課題

広く使われ親しまれるライブラリには、優れたドキュメントが不可欠だと俺は思う。
現状、CS Parser のドキュメントは機械的な説明に留まっている。README のインストラクションも丁寧な導入説明とは言えない。それこそコンテキストが抜け落ちている。

それもこれも全て私の英語ライティング能力が十分ではないということに起因しているのは明らかである。

というわけで、ここまで読んでくれた方で英語の文章力に自信のある方、ドキュメント書くの手伝ってくれませんか?
プルリク待ってるよ!

Leave a comment - コメントを残す