「入力したプログラムコードを色付けするスーパーpre記法 シンタックス・ハイライトの実装について 」で、VHDLが対応されていることに驚いたわけですが、こんどは同族のAdaでいじめてみました。
Adaの何が嫌って、'(アポストロフィ)の意味が変わることです。アポストロフィは、文字型定数を表現するときに文字を囲むために使います。これ自身はC言語と同じです。
ところが、アポストロフィは特定オブジェクトの属性を記述するときにも使います。この点は英語の所有を表す「's」を意識した記法であり、読みやすさに一役買っています。が、コンパイラの立場からすると厄介なのです。
アポストロフィが文字の開始なのか属性を現す記号なのかは、文脈によって変わります。通常、コンパイラが記号や定数を切り出す(Lexical Analysis)ときには、文脈を参照しません。ところがAdaコンパイラは文脈の参照が必要です。これは60年代に発達したコンパイラに関する理論に後足で砂をかけるようなもので、ヨーロッパ系の言語ではありえないことでした(笑)。Pascalの正規表現/文脈自由文法とは大違いです。
というわけで、難しいアポストロフィで早速いじめましょう。
with Text_To; use Text_To procedure test is i : integer; begin -- of main put('a'); -- character literal put(integer'last); -- attribute end test
すんげーっ!
きっちり分けています。参りました。
どうやらこのカラーリング・エンジンははてな製ではないようです。なるほど、ahdlなんかはてなの人は関心もちませんよねぇ。
IBMのスクリプトらしい
PGM DCL VAR(&PWRDNTME) TYPE(*CHAR) LEN(6) VALUE(’162500’) DCL VAR(&TIME) TYPE(*CHAR) LEN(6) RTVSYSVAL SYSVAL(QTIME) RTNVAR(&TIME) IF (&TIME *GT &PWRDNTME) THEN(DO) SNDBRKMSG(’Powering down in 5 minutes. Please sign off.’) PWRDWNSYS OPTION(*CNTRLD) DELAY(300) RESTART(*NO) + IPLSRC(*PANEL) ENDDO ENDPGM
これも違うか。例題はIBMのiSeries CL Programming Version 5から引用。IBMのページからダウンロードできます。
CL4との報に接し
これを試してみんとス。
# default DEMGL Accounts maintenance { Accounts getfile DEMGL Accounts,l Accounts,ll maintain l,vacd define nlines,i ln,i count,i sp,c1 fl,i head 0 2 1 'pname'
ビンゴ。
情報元はnobodyさん。ありがとうございます。サンプル・コードはCL4 Document Libraryにあるユーザーマニュアルから引用しました。
そういうわけでid:meinekoさん、じっちゃんの名にかけて謎はすべて解けました。あと、フェルメールめぐりは、ハンニバル〈上〉 (新潮文庫)で知ったので、怖い印象です(^^;。