TANGLE - みる会図書館


検索対象: 月刊 C MAGAZINE 1992年3月号
14件見つかりました。

1. 月刊 C MAGAZINE 1992年3月号

こう主張しているだけあって , A-TangI e が生成する Ada のコードは , きちんとイン デントをつけてフォーマットされています。 オリジナルの WEB のように「 TANGLE の出 力はどうせ計算機が処理するだけだからべ タ書きてよい」と割り切ってしまうのとどち らがいいかは , 考え方や使い方によるて、し なお , Ada 用の WEB べースのシステムと しては , このほかに AdaWeb CPa90] とい うものもあるようて、すが , ここて、は省略し P DER ーます。 Fig. 14 SPIDER 用の WEB べースのシステム」を出力してく 「 C 言語についての記述」を与えると , 「 C 言語 たとえば , SPIDER コンパイラに対して , す。 cc や lex などと同じ範疇の処理系だといえま ンパイラジェネレータ」て、す。 UNIX 上の ya ステムを生成するシステム」っまり一種の「コ テムそのものて、はなく , 「 WEB べースのシ SPIDER [Ra89) は , WEB べースのシス CW CW ℃ WEB S:SPIDER CW れます。この「言語 X についての記述」を記述 する言語が SPIDER て、す (Fig. 14 ) 。 SPIDER は CWEB をベースとして作られ ているのて、 , SPIDER が出力する WEB ファ イルは , TANGLE て、 Pascal に変換するのて、 はなく , CTANGLE を使って C 言語に変換 するようになっています。厳密には , 前述 した CWEB の WEB ファイルとは少し異なる のて、すが , ここて、はこの SPIDER が出力する WEB ファイルのことを CWEB ファイルと呼 ぶことにします。 この SPIDER を使って , 言語 X 用の TAN GLE(XTANGLE と呼びます ) を作る過程を Fig. 15 に示します。同様の手順て、言語 X 用 の WEAVE(XWEAVE) も生成て、きます。 今のところ , SPIDER に付属している言語 記述ファイルには , ・ C ( 十十 ) ・ AWK ・ SSL ( 構造工デイタの仕様記述言語 ) があります。 ・ Ada ののソースを書き換える必要がある ) ことはて、きない (SPIDER システムそのも ラミングパラダイムの言語に対応させる を作るだけて、は , まったく違ったプログ して書かれているのて、 , SPIDER ファイル ・字旬解析のコードが A1g01 系の言語を想定 ることはて、きない ・ FWEB のように , 途中て、言語を切り換え システムて、す力す , このように , SPIDER はなかなか魅力的な Fig. 15 SPIDER による言語 X 用の TANGLE(XTANGLE) の生成 XTANGLE. SPIDER XTANGLE. WEB XTANGLE. C XTANGLE. EXE CW X CW X CW CW CW CW C C X C CW M S:SPIDER CW:CWEB C ℃言語 M : 機械語 M C コンノヾイラ という不満はあります。 n web cnoweb [ F090 ] という処理系は , 名前か らも想像て、きるとおり , WEB を拡張したシ ステムというよりは , WEB に対するアンチ テーゼとして提唱されたシステムて、す。コ ードとドキュメントの両方をひとつのソー スにまとめて書くという点は WEB と同じて、 すが , WEB とは違って , TANGLE や WEA VE などによる変換なして、そのコードをその まま TeX にも C コンパイラにも通せる , とい う特徴があります。 cnoweb は , 「プログラムとドキュメント をまとめて管理する」というよりは , 「プロ グラムを ( コメントも含めて ) TeX て、清書す る」ためのシステムて、あるといえるかもしれ ません。 cnoweb て、書かれたコードには , / * A cnoweb program *input cnoweb *titIe{A c noweb program} main( ) といったように , 先頭のコメントの一部と して Yinput cnoweb という TeX のコマンド が書かれています。そのため , このソース を TeX に通すと , cnoweb. tex という TeX の マクロファイルが読み込まれます。このソ ースを C コンパイラに通しても , コメントの 部分が無視されるのて、 , やはり問題なくコ ンパイルて、きます。 また , 先頭に限らす , ソース中のあらゆ る箇所のコメント内て、 , TeX のマクロが使 えます ( 逆にいえば , TeX の文法に違反する コメントは使えません ) 。標準の pIainTeX のマクロのほかに , Table 3 に示したマクロ が追加されています。 SPIDER 32 C MAGAZINE 1992 3 CTANGLE

2. 月刊 C MAGAZINE 1992年3月号

凵 st 特集 TANGLE. WEB の一部 ( その 1) 0 The program begins with a fairly normal header, made up of pieces that @*system dependencies@> will mostly fill in later. The \. {WEB) input comes from files lweb_filel and lchange—fi le l, the }PASCAL* output goes to file lPascaI—fi lel, and the string P001 output goes tO fi le 朝 001 に If it is necessary to abort the job because of a fatal error, the program calls the コ jump—out ド procedure, which goes tO the label lend_of TANGLE に @d end_of TANGLE = 9999 {go here tO wrap it up) @p @t\ 4@〉@く Compi ler directives@>@/ program TANGLE(@ !web-file, @! change—file, @ !PascaI_fi le, @! P001 ) : label end_0f_TANGLE; {go here tO finish} const @く Constants in the outer block@〉@/ type @く Types in the outer block@>@/ var @くGIobaIs in the outer block@>@/ @く Error handl ing procedures@〉@/ procedure initialize,• var @く Local variables for initialization@>@/ begin @く Set initial values@>@/ end ; lSt TANGLE. WEB の一部 ( その 2) @く Glob... @〉 =@!history:spotless.. fatal_message; {how bad was this run?) LI st TANGLE. WEB の一部 ( その 3) @く GIobals... @〉 = {specifies convers ion Of output characters) @!xchr: array [ASCll—code] 0f text—char; {specifies converslon Of input characters) ② ! xord: array [text—char] 0f ASCll-code; List MS-DOS 版 TANGLE. EXEC 作成した TANGLE. PAS の先頭 PROGRAM TANGLE(WEBFILE, CHANGEFILE, PASCALFILE, POOL) ; LABEL 9999 ; CONST{8 : } BUFSIZE=IOO ;MAXBYTES=45000;MAXTOKS=50000;MAXNAMES=4000;MAXTEXTS=2000; HASHSIZE=353;LONGESTNAME=400 ;LINELENGTH=72;0UTBUFSIZE=144; STACKSlZE=50; MAXIDLENGTH=12;UNAMBIGLENGT=7;{:8}TYPE{11:}ASCIICODE=0..255 ; { : 11 } { 12 : } TEXTFILE=PACKED FILE OF CHAR;(:12){37:)EIGHTBITS=0..255 ; SIXTEENBITS=O.. 65535 ; { : 37 } { 39 : } N EPOINTER = 0.. 期 XNAMES ; { : 39 Ⅱ 43 : } TEXTPOINTER=O.. MAXTEXTS; { : 43 Ⅱ 78 : } OUTPUTSTATE=RECORD ENDFIELD: SIXTEENBITS;BYTEFIELD: SIXTEENBITS; ドキュメント作成支援システム の定義が複数箇所て、行われていて , それら の定義をつなげたものが , プログラムの先 頭て、、、 var 〃に続いて展開されるわけて、す。 六れた Pasca リース」 WEB ファイルからどのような Pascal のソ ースが生成されるかの例として ,TANGLE. WEB から TANGLE によって生成された TA NGLE. PAS の中身を見ましよう (List 4 ) 。 あらゆる識別子は大文字に変換されてい ます。これは , 小文字が使えない PascaI コ ンパイラがあるためて、す。識別子の長さが 12 文字まて、に変換されているのも , 長い名 前が使えないコンパイラがあるためて、す (T ANGLE て、は , 12 文字目以降だけが異なる識 別子が見つかると , メッセージが出力され ます ) 。 また , 不要な改行や空白が削除され , 行 いつばいにコードが詰め込まれています。 LE. WEB の ( 目次を除いて ) 先頭の頁て、す。 刷結果を Fig. 11 に示します。これは TANG E. WEB から生成された TANGLE. TEX の印 された TeX ファイルの例として , TANGL WEAVE によってⅥ B ファイルから生成 ファイルの印刷例 成された ということがわかると思います。 「とても人間が読めるような形式て、はない」 中に元の行数が書かれています。 行に対応するかがわからないのて、 , 、、 { } 〃の きに , それがもとの TANGLE. WEB のどの これて、は , コンパイラがエラーを出したと OS 用 WEB システム れていることなどがわかります。 scal のソースがきちんとプリテイプリントさ ールに番号がついていること , Pa MS モシュ 特集ドキュメント作成支援システム 27 B システムを構成する TANGLE および WE こて、は , TurboPascal を使って , WE

3. 月刊 C MAGAZINE 1992年3月号

特集 ドキュメント作成支援システム Fig. 5 TANGLE W:WEB P:Pascal り , それを手で TANGLE. PAS に変換す さて , このようにして , を作ってもかまいません。 LE. WEB とはまったく別に TANGLE. PAS 法を取ったのて、しよう。もちろん , TANG TANGLE を作ったときも , おそらくこの方 という方法が思いっきます。 Knuth が初めに 一度 , ある星て、 星 ( マシン , OS ) でも生きられるが , ト 卵 ( *. WEB) やヒョコ ( * . PAS) はどの もちろん , けて、す。 S と TANGLE. WEB を持っていけばいいわ その TANGLE. EXE て、作った TANGLE. PA シンや OS に TANGLE を移植する際には , ANGLE. EXE を作ってしまえば , ほかのマ つまり , 一度あるマシンのある OS 上て、 T 導入することがて、きます。 という安直な方法て、 , その星にニワトリを ってくる 別の星からニワトリの卵とヒョコを持 は , の星て、またニワトリが必要になったときに ニワトリを創造しておきさえすれば , ほか リ ( * . EXE ) は自分が育った星でしカ注 きられない という暗黙の条件がありますが。 TANGLE でのプログラム変換 TANGLE て、は , WEB ファイルのドキュ メント部分は読み飛ばしてしまい , プログ ラム部分だけを出力ファイルに書き出しま す。このときに , 単にプログラムをそのま ま書くのて、はなく , モジュールの並べ換え やマクロの展開などを行います。 WEB のマクロは , 単純マクロ 引数マクロ 数値マクロ の三つに分類て、きます。 ます , 単純マクロは , マクロを定義され た文字列に置き換えるだけのものて、す。 引数マクロは , この置換の際に , ひとつ だけ引数を使うことがて、きます。ひとつだ けて、は不便て、すが , 実際には , マクロの中 て、ほかのマクロをまた呼び出し , その孫マ クロに元の引数を評価させるといった方法 て、 , 複数の引数を持つマクロを実現するこ ともて、きます ( いわゆる Curry 化て、す ) 。 数値マクロは Pascal に欠けている定数演 算機能を補うためのものて、す。たとえば , PascaI て、は ,size を定数として宣言しておい ても , 0.. size-l といった , 定数式を使った部分範囲の指定 がて、きません。 TANGLE て、は , size を WE B の数値マクロとして定義しておくと , この size ー 1 を , 定数に展開して Pascal ファイルに 出力してくれます。 モジュールについては , 「 WEB の文法」 ( 25 頁 ) て、解説します。 プールファイル TANGLE を実行すると , PascaI のソース のほかに , . POOL という拡張子のついたファ イルが生成されます。これがプールファイ ルと呼ばれるものて、す。 文字列処理機能は標準 PascaI て、はあまり 規定されていないのて、 , コンパイラに依存 しない形て、高度な文字列処理を行うには , アプリケーション側て、独自の文字列処理ル ーチンを書く必要が生じます。このときに 文字列定数を Pascal の文字列として扱わ ず , 別のファイルて、管理て、きるようにする 機能が , このプールファイルて、す。 具体的には , WEB のソース中て、 , ' abc' といった Pascal スタイルの文字列定数を使 う代わりに a bc のように , ダブルクオート ( " ) て、囲った文字 列定数を書いておきます。すると , TANG LE がこれを Pascal のソースに変換する際 に , この行は , 256 ; のように変換されます。 256 というのは , の文字列定数につけられた番号て、す。置き 換えられた文字列の内容は , プールファイ Fig. 6 TANGLE による WEB ソースからオプジェクトコードへの変換 Fig. 7 TANGLE 自身のオプジェクトコードへの変換 * . WEB W * . PAS P * . EXE W:WEB P:Pascal M : 機械語 TANGLE. WEB TANGLE. PAS TANGLE. EXE P W W TANGLE P P W W W P P P P P W:WEB P:Pascal M : 機械語 Pasca ロンバイラ TANGLE. EXE Pascal コンバイラ 特集ドキュメント作成支援システム 23

4. 月刊 C MAGAZINE 1992年3月号

という大きな欠点がありま ように見える , 具体的には , MS-DOS 上て、あれば , と似ています。ただ , このニワトリはちょ TANGLE FILE. WEB っと変わっていて , を実行すると , TANGLE. PAS が生成され ニワトリ (TANGLE. EXE) 自身は卵を生 る , という実現方法が一般的て、す。ここて、 まない て、きた TANGLE. PAS を Pascal コンパイラ ニワトリは , なんらかの卵 ( * . WEB) を を使ってコンパイルすると , WEB て、書いた あたためてヒョコ ( * . PAS) を孵す。 プログラムが実行て、きるようになります。 さて , WEB システムは , TANGLE と W ・ヒョコ ( * . PAS) は成長してトリ ( * . EX E) になる。 EAVE というふたつの要素から構成されま こて、複雑なのは , この TANGLE そのも す。 TANGLE が WEB から Pascal およびプ ののソースが , WEB て、書かれている , とい ということになっています。 こて、おもし ールファイル ( 詳しくは本誌 23 頁を参照 ) へ う点て、す。そのため , TANGLE 自身のオプ ろいのは , このニワトリは , ニワトリの卵 ジェクトコードは , Fig. 7 のような手順て機 (TANGLE. WEB) だけて、なく , ほかのトリ の変換 , WEAVE カ SWEB から TeX への変換 をそれぞれ行います。 械語 ( 仮に TANGLE. EXE とします ) に変換 の卵 ( * . WEB) も孵してくれるという点て、 す。 します。 さて , 創造主の神様の立場になると , G LE この図を見ると , TANGLE. EXE のルー のようなニワトリを「創造」するのは結構め プがて、きていることがわかります。つまり , 変換の途中で必要な TANGLE. EXE が , んどうて、す。普通は単に卵かニワトリかを TANGLE は , WEB のソース . から Pascal 変換の最後にならないと生成されない 作ってしまえば , あとは勝手に増えるわけ のソースを生成するものて、す。先ほどの表 己法て、書くと , TANGLE そのものは Fig. 5 て、すが , このニワトリの場合はそうはいき という問題があります。 TANGLE. EXE を のように表現て、きます。 作るには TANGLE. EXE が必要だ , という ません。 ちょっと考えてみると , この TANGLE を使って , Ⅵ B のソース わけて、す。 から機械語のオプジェクトコードを生成す まず卵を創造し , その卵から神様の手 この TANGLE. EXE と TANGLE. WEB と でヒョコを孵す (=TANGLE. WEB を作 るには , Fig. 6 のような手順を取ります。 の関係は , 「ニワトリと卵」の関係にちょっ Fig. 1 Fig. 2 ソース言語 S 、らオプジェクト言語 OL への変換を行う , 言語 X で書かれたプログラム 言語 X で書かれたトランスレータ ( コンパイラ ) W の構成要素 1 三ロ OL SL Fig. 3 Pasca にンバイラによるコンバイルの例 Fig. 4 Cå ー語で書かれた Pasca ロンバイラのコンバイル M M C P P P P:Pascal M : 機械語 P:Pascal M : 機械語 C ℃言語 22 C MAGAZINE 1992 3

5. 月刊 C MAGAZINE 1992年3月号

ドキュメント作成支援システム 特集 には , この点に注意しなければなりません。 逆に , WEB ファイルの中の記述を削除し たい場合は , 、、 line 512 〃のように、、@y 〃の次 にすぐ、、 @z" を書くことがて、きます。ここて、 は , 標準出力に対応するファイル変数を削 除しています。 Fig. 12 MS-DOS 版 TANGLE. EXE による TANGLE. WEB のコンノヾイル A>tangle tangle. web tangle. ch This is TANGLE for MS-DOS, Version 4.2 * 1 * 11 * 19 * 29 * 37 * 51 * 66 * 71 * 78 * 95 * 113 * 124 * 144 * 157 * 164 * 172 * 180 * 183 * 189 * 190 Writing the output file. . 5 圓 .. DO れ e. ()O errors were found. ) A 〉 tpc tangle. pas Turb0 PascaI Version 5.0 Copyright (c) 1983 , 88 Borland lnternational TANGLE. PAS(775) 775 lines, 27712 bytes code, 45312 bytes data. S OS 版 WEAVE の作成 TANGLE を移植しただけて、は , WEB フ ( DOS の拡張子は 3 文字なのて、 , プール ァイルから PascaI のソースがて、きるだけ として定義して , あとから変更て、きるよう ファイルの拡張子は . POOL て、なく . PO て、 , ドキュメントを生成することはて、きま にしてあります。 TurboPascaI て、はこれは O になります ) せん。これて、は「文芸的プログラミング」の 、、 else クとなっているのて、 , そのように変更し 趣旨に反するのて、 , WEAVE の移植も行い ます。 なお , TANGLE. WEB や WEAVE. WEB 次の、、ⅱ ne 249 〃て、は , 整数型として、、 integ ました。これて、 , WEB ファイルから TeX の を TANGLE. EXE て、コンパイルすると , 空 er" (Turbo Pascal て、は 16 ビット ) て、なく , ソースを作ることがて、きます。 の TANGLE. POO や WEAVE. POO がて、きま emTeX, MicroTeX などの DOS 上て、動く 、、 longint 〃 ( 同じく 32 ビット ) を使うよう指定 すが , TANGLE や WEAVE はプールファイ ルの機能を使っていないのて、 , これて、問題 TeX があれば , この WEAVE. EXE を使っ しています。 て , WEB ファイルをドキュメントとしてプ ありません。 わざわざ、、@! ASCII code ・・・ 〃という行が リントアウトて、きます。 この TANGLE. EXE を使って TANGLE. 変更箇所の中に入れてあるのは , 、、@!integ ・ " をどこに入れるかを指定するめて、 変更点は TANGLE の場合とほば同じて、す WEB をコンパイルする手順を Fig. 12 に示し す。この指定をせず , 、、 @ x クのすぐあとに @y" が , Turbo PascaI て、は配列の大きさが最大 ます。 64K バイトまて、に制限されているために , ク を書いてしまうと , 期待した位置にこの変 更点を組み込むことがて、きなくなってしま ロスリファレンス数の上限を 30000 から 160 00 に減らしてあります。実用上はこれて、問 います。 チェンジファイルによる追加を行う場合 題ないと思います。 MS-DOS 版 TANGLE 用 TANGLE ℃ H の一部 GLE ℃ H の解説 List 5 に示した TANGLE ℃ H の一部につ いて解説します。 チェンジファイルのところて、説明したと おり , 、、 @ x 〃と、、@y 〃に囲まれた部分に変更 前のオリジナルの TANGLE. WEB の一部 , 、、@y" と、、 @z" の間にそれをどう変更するか が記述してあります。 まず、、 line 170 气これは TANGLE. WEB て、 この変更点に対応する箇所の先頭の行番号 て、す ) て、は , Pascal の case 文のデフォルトの 分岐を示す方法を変更しています (C 言語の switch 文の、 defau にキーワードに相当する ものて、す ) 。 標準 Pascal て、は , このデフォルトの分岐 を行う機能はないのて、 , 多くの処理系て、 , この機能を独自の文法て、実現しています ( 、、 0 thers : 、、 else 〃など ) 。 otherwise : そのため , TANGLE. WEB て、は , マクロ List % line 170 % default clause ln case @d othercases = ま others : {default for cases not 1 isted explicitly} @d othercases = else {for Turbo Pascal) % line 279 % integer in TurbO Pascal is only 16 bits long @!ASCII c e = 0..255 : {eight-bit numbers, a subrange of the integers} @!ASCII_code=0.. 255 : {eight-bit numbers, a subrange of the integers) @!integer=longint; {for Turbo pascal; integer must be 32 bits long) @z % line 512 % terminal doesn' t need a file variable @く G10baIs... の = @!term_out:text—file; {the terminal as an output file) 特集 ドキュメント作成支援システム 29

6. 月刊 C MAGAZINE 1992年3月号

EB から dvi ファイルを作成する手順を Fig. 1 VE. EXE の使い方 3 に示します。 TeX は emTeX を使っていま す。実際には , このあと WEAVE. DVI をプ WEAVE. EXE の起動方法は , 出力ファイ リンタドライバを使ってプリントアウトし ルが . PAS および . POO て、なく . TEX になる ますが , プリンタドライバの使い方はデバ Knuth のオリジナルの WEB システムを発 イスによって大きく異なるのて、 , こて、は 点以外は , TANGLE. EXE の起動方法と同 展させ , ほかの言語に対応させる , などの じて、す。 示しません。 拡張を行ったシステムが数多くあります。 WEAVE. EXE て、作成した TeX ファイルを こて、は , それらのうち代表的なものを取 TeX て、コンパイルするときには , webmac. りあげて解説します。 tex が読み込まれます。オリジナルの webm ac. tex は , レターサイズ用紙 ( 8.5 インチ X11 なお , 本バートて、紹介した以下のファイ インチ ) 用なのて , A4 サイズ用に変更を加 ルは , 今月号の付録ディスクに収録されて えてあります。オリジナルのファイルは we います。 現在汎用プログラミング言語として広く bmac.org という名前にしてあります。 使われている C 言語にも WEB を導入した tangle. web という要求は当然のことといえます。 TANGLE. WEB や WEAVE. WEB をプリ tangle. ch CWEB [Le87] は , ントアウトすると , 頁番号が 1 頁からて、はな こうした要求から生ま tangle. exe く , 途中の番号からになります。これは , れた C 言語版 WEB システムのひとって、す。 weave. web TANGLE. WEB および WEAVE. WEB が論 特徴としては , weave. Ch 文 [Kn83] の付録として印刷することを想 ・ TANGLE で改行位置を変更せず , ューサが weave. exe 定して書かれているためて、す。先頭の頁番 WEB ファイルで指定したままの位置で改 webmac. tex 行する 号を変更するには , TANGLE. WEB や WE webmac.org 本当は , フリーソフトウェアの TeX も収 ・また , # ⅱ ne 文を入れることによって , コ AVE. WEB の *def*contentspagenumber{123} ンパイラで発生したエラー箇所が WEB フ 録て、きるといいのて、すが , TeX の配布ファ ァイルのどこにあたるかがわかる などの行を変更してください イルはフォントまて、含めると IM バイトを超 ・マクロ展開の機能はなく , 、、@d″は #defin この WEAVE. EXE を使って TANGLE. W えるのて、 , 今回は見送りました。 Fig. 13 MS-DOS 版 WEAVE. EXE による TANGLE. WEB の印刷 (DVI ファイルの作成 ) た づテ 基ス l-u カ ファイル EB A 〉 weave tangle. web This is WEAVE for MS-DOS, Version 4. 2 * 1 * 11 * 19 * 29 * 37 * 50 * 65 * 70 * 77 * 94 * 112 * 123 * 143 * 156 * 163 * 171 * 179 * 182 * 188 * 189 . * 1 * 11 * 19 * 29 * 37 * 50 * 65 * 70 * 77 * 94 * 112 * 123 * 143 * 156 * 163 * 171 * Writing the output file. 179 * 182 * 188 * 189 Writing the index. . Done. ()O errors were found. ) A>tex286 &plain tangle. tex This is emTeX, Version 3. 0 C3a] ()o format preloaded) **&plain tangle. tex (tangle. tex (webmac. tex) * 1 [ 124 ] [ 125 ] [ 126 ] * 11 [ 127 ] [ 128 ] [ 129 ] [ 130 ] * 19 [ 131 ] [ 132 ] * 29 [ 133 ] [ 134 ] * 37 〔 135 ] [ 136 ] [ 137 ] * 50 [ 138 ] [ 139 ] [ 140 ] [ 141 ] [ 142 ] * 65 [ 143 ] [ 144 ] * 70 [ 145 ] [ 146 ] [ 147 ] * 77 [ 148 ] [ 149 ] [ 150 ] [ 151 ] [ 152 ] * 94 [ 153 ] [ 154 ] [ 155 ] [ 156 ] [ 157 ] [ 158 ] * 112 [ 159 ] [ 160 ] [ 161 ] [ 162 ] [ 163 ] * 123 [ 164 ] [ 165 ] [ 166 ] [ 167 ] [ 168 ] [ 169 ] [ 170 ] * 143 [ 171 ] [ 172 ] [ 173 ] [ 174 ] * 156 [ 175 ] [ 176 ] [ 177 ] * 163 [ 178 ] [ 179 ] [ 180 ] * 171 [ 181 ] [ 182 ] [ 183 ] * 179 [ 184 ] [ 185 ] * 182 [ 186 ] [ 187 ] * 188 [ 188 ] * 189 lndex: [ 189 ] [ 190 ] (contents. tex) [ 191 ] [ 192 ] Section names: [ 193 ] [ 194 ] Table of contents: [ 123 ] ) Output written on tangle. dvi ( 72 pages, 330876 bytes). Transcript written on tangle. 10g. 30 C MAGAZINE 1992 3

7. 月刊 C MAGAZINE 1992年3月号

AVE を MS-DOS に移植します。 れます。 、、 TANGLE TANGLE. WEB MYTANGLE ℃ 出力ファイルの名前は , 「起動時に指定し H" で起動 DOS 版 TAN GLE の作成 た最後のファイル名の拡張子を . PAS およ → MYTANGLE. PAS, MYTANGLE. P00 に び . POO に変えたもの」になります。たとえ 出力 まず , TANGLE を MS-DOS に移植して , ば , 、、 TANGLE TANGLE. WEB MYTANGLE. C 実際に WEB ファイルのコンパイルを行える "TANGLE TANGLE. WEB" で起動 H OUTPUT" で起動 ようにします。具体的には , TANGLE ℃ H → TANGLE. PAS, TANGLE. P00 に出力 → OUTPUT. PAS, OUTPUT. P00 に出力 というチェンジファイルを作り , 生成した TANGLE. PAS が , Turbo Pascal て、コンパ Fig. 1 1 WEAVEC 生成した TANGLE. TEX の印刷結果の一部 イルて、きるように変更してあります。 おもな変更内容は以下のとおりて、す。 ・ Turbo Pasc 引のデフォルトの変数はスモ ールモデルなので , 大きな配列を動的に 割り当ててポインタを経由してアクセス するようにした ・ TurbO PascaI の integer は 16ビットなの で , 32 ビットを仮定している integer を lo ngint に置き換えた ・ファイル操作の変更 筆者は Turbo PascaI 4.0 と 5.0 て、動作を 確認しましたが , もっと新しいバージョン て、もコンパイルて、きると思います。 こて、行われた作業は , あくまて、 TANG LE そのものを TurboPascaI に対応させる作 業て、あって , これによってあらゆる WEB フ ァイルが Turbo Pascal て、コンパイルて、きる Pascal ソースに自動的に変換されるように なったわけて、はありません。 WEB ファイル を Turbo Pascal て、コンパイルする際には , 機種依存部分をチェンジファイルて、変更し なければならないことに注意してください 2 INTRODUCTION TANGLE 1 1. lntroduction. This program converts a VEB file to a Pascal file. lt was written by D. E. Knuth ⅲ September, 1981 ; a somewhat similar SAIL program had 、 been developed ⅲ March, 1979. Since this program describes itself, a bootstrapping process involving hand-translation h ad tO be used tO get started. For large WEB files one should have a large memory, since TANGLE keeps all the Pascal text in memory ()n an abbreviated fo 「 m ). The program uses a few features of the 旧 c PascaI compiler that may need tO be changed in Other installations: 1 ) Case statements have a default. 2 ) lnput-output routines may need to be adapted fo 「 use with a particular character set and/or fo 「 printing messages on the user's terminal. These features are also present in the Pascal version of ・ IbX where they are used ⅲ a similar (but more complex) way. System-dependent portions Of TANGLE can be identified by looking at the entries fo 「 'system dependencies' in the index below. The "bannerline ” defined here should be changed whenever TANGLE is modified. define れれ e 「三・ ThisuisuTANGLE,uVersionu4.2 ・ 2. The program begins with a fairly normal header, made up ofpieces that will mostly be filled ⅲ later. The EB input from files 3e6- 五 and c ん佖れ - 天 , the PascaI output goes to file p ca と五 , and the string po 司 output go to file ア 0 司 . If it is necessary to abort the job because of a fatal e は 0 ら the program calls the ノ社 m ル 0 ' proced u re, which goes to the label れ 0 / - T Ⅳ G ん E. define end-of-TANGLE = 9999 { go here to wrap it up } (Compiler directives 4 〉 program T スル G E ( Ⅲ eb - 五 , 0 e - 川 e , Pa “ - 川 e , 四 0 り ; label にれ 0 / - T. スル G E ; { go here to finish } const ( Constants in the outer 0 ( k 8 〉 type (Types in the outer block 11 〉 var (GIobaIs in the outer block 9 〉 く E な 0 「 handling procedures 30 〉 procedure ーれ一 : e ; var く Local variables fo 「 ini tialization 16 〉 begin く Set initial values 1 の end, 3. Some of this code is optional fo 「 use when debugging 0 司 y ; such materialis enclosed between the delimiters debug and gubed. Other parts, delimited by stat and tats, are optionally included if statistics about TANGLE's memory usage are desired. define 6 三 0 { { change this to 。 6 三 ' when debugging } define 6 三 0 } { change this to 社 6 三 ' when debugging } format 虎 6 三 6 tn format 翻三 e れイ define 引観三 0 { { change this to 。引観 when gathering usage statistics define ねな三の { change this to 、ねな = when gathering usage statistlcs format 引観三 6e9 format な三を〃イ 4. The Pascal compiler used to develop this system has "compiler directives" that can appear in comments whose first character is a dollar sign. ln production versions of TANGLE these d irectives tell the compiler that it is safe to avoid range checks and to leave out the extra code it inserts 「 0 「 the pascal debugger's benefit, although interrupts will occur if there is arithmetic overflow. く CompiIer directives 4 ) no range check, catch arithmetic overflow, no debug overhead } debug 0 { & $ C 十 , 〃十 } gubed { but turn everything on when debugging } This ( 0d0 is used ⅲ section 2. 0 GLE. EXE の使い方 TANGLE. EXE は , TANGLE WEB ファイルチェンジファ イル出力ファイル というコマンドラインて、起動します 0WEB ファイルおよびチェンジファイルて、拡張子 を指定しないと , デフォルトて、 . WEB およ び . CH が使われます。 チェンジファイルを指定しないと , WEB ファイルに対する変更がないものとみなさ 28 C MAGAZINE 1 2 3

8. 月刊 C MAGAZINE 1992年3月号

ルに出力されます。 ログラムとプールファイルとの間の整合性 いても TANGLE の場合のような間題はあり 長さが 2 以上の文字列については , 前述の をチェックて、きます。 ません。 WEAVE. WEB を TANGLE に通し ような置き換え処理が行われますが , 効率 TANGLE が行う処理はここまて、て、 , 実際 て作った WEAVE. PAS から WEAVE. EXE 化のために長さ 1 の文字列定数については , の整合性のチェックやプールファイルの読 を作り , その WEAVE. EXE を使って , WE その唯一の文字の文字コードがそのまま文 み込みなどの処理は , すべてアプリケーシ AVE. WEB から WEAVE. TEX を作ることに 字列定数の番号として使われます。そのた ョンにまかされています。 なります (Fig. 10 ) 。図そのものはちょっと め , プールファイルに登録される文字列定 TeX などて、は , 実際にこのプールファイ 複雑て、すが , TANGLE. EXE のようにルー 数の番号は , 先頭から順に 256 , 257 , ルを使った文字列の管理が行われています。 プがあるわけて、はないのて、 , 手作業て、ソー となります。古いバージョンの TANGLE て、 スを変換する羽目にはなりません。 は , 使われる文字コードが 0 から 127 の範囲 VE WEAVE でのドキュメント生成 だけて、あると考えて , これが 128 , 129 , ・ となっていましたが , 現在て、は , 8 ビットの TANGLE が WEB から Pascal への変換を WEAVE て、は , WEB ファイルのうち , T 符号に対応するために 256 からに変更されて 行うのに対して ,WEAVE は WEB から TeX eX て、書かれた部分については , ほとんどそ います。 への変換を行います。 TANGLE の場合と同 のまま TeX ファイルに出力しますが , Pasc プールファイルの中身は , 様に , WEAVE そのものの図を Fig. 8 に , W al て、書かれた部分については , 高度なプリテ llbuffer size EAVE による WEB ソースの印刷方法を Fig. イプリンティングを行います。 09P06 size 9 に示します。 プリテイプリンティング COp8()] とは , 17number of strings 実際に , WEB て、書かれたファイルを WE プログラムのソースコードをより読みやす のように , テキストファイルの各行の先頭 AVE を通して印刷するには , くするために , 構文を意識して , インデン に , その行の長さが 10 進数 2 桁て、入った形に WEAVE FILE. WEB トや改行位置などを変史する , という処理 なっています。この各行が , それぞれひと TEX FILE. TEX TabIe 1 WEAVE での演算子の変換 つの文字列定数に対応します。 DVlxx FILE. DVI WEB ファイル Pascal ファイル プールファイルの最後の行には , などとします。 DVIxx として何を使うか * 238369450 は , 出力デバイスによって異なります。 という形て、 , 文字列のチェックサムが入っ さて , TANGLE の場合と異なり , WEA ています。 WEB のソース中て、は , @$ とい VE そのものの実行形式を作る場合には , 「ニ うコントロールコードて、 , このチェックサ ワトリと卵」に悩む必要はありません。 WE ムをソースに組み込むことがて、きます。し AVE. WEB から WEAVE. PAS を作るには , たがって , 実行時に読み込んだプールファ TANGLE を使えばいいのて、すから。 イルに書かれていたチェックサムと , TAN むしろ複雑なのは , WEAVE. WEB からド GLE が@$ の位置に展開しておいたチェック キュメントを作ってプリントアウトしたい サムの定数とを比較することによって , プ というときて、す。とはいっても , これにつ Fig. 8 WEAVE Fig. 9 WEAVE による WEB ソースの印刷 * . WEB * . TEX く < > not 0 「 * . DVI 第 W W:WEB T:TeX →プリンタへ W:WEB T:TeX D:DVI W W → 第 D D WEAVE TeX 24 C MAGAZINE 1992 3

9. 月刊 C MAGAZINE 1992年3月号

または , WEAVE FILE. WEB FILE ℃ H とします。すると , TANGLE や WEAVE は , FILE. WEB と同時に FILE ℃ H を読み込 み , FILE ℃ H に示された変更前の内容が FI LE. WEB の中のある部分にマッチしたら , FILE. WEB のその部分の代わりに , FILE ℃ H に書かれている変更後の内容を , 入力デー タとして処理します。 この機能によって , WEB ソース本体に手 を入れずに , WEB て、書かれたプログラムに 対して : ーー機種依子の変更などが行えます。 さらに , WEAVE には , チェンジファイルによって影響を受け た箇所だけを出力する という拡張機能があります。この機能を使 うと , あるプログラムの機種依存の変更箇 所だけをプリントアウトするといった , まて、可能になります。 この拡張機能は , WEAVE そのものの中 に組み込むことによって初めて可能になる TabIe 2 WEB のコントロールコード ものて、 , diff や patch のような外部プログラ ムを使って実現することはまず不可能て、し よう。 WEB のファイルが実際にどう書かれてい るかを , TANGLE. WEB を例にとって紹介 します。誌面が限られているのて、 , List 1 に は , TANGLE. WEB のごく一部だけを抜き 出して載せてあります。付録ディスクに完 全な TANGLE. WEB を収録してありますの て、 , 必要に応じて参照してください List 1 を見てください。これは TANGLE. WEB の先頭近くにある記述て、 , プログラム 全体の構造を定義している部分て、す。 初めの、、 @ 凵〃は , 「モジュールの開始」を示 します。 WEB のソースは , たくさんのモジ ュールによって構成されており , WEAVE て、は各モジュールが番号をつけて印刷され ます。普通の文章て、は「パラグラフ」にあた ファイルの記述例 コントロール @d @f @p @く @t @十 26 C MAGAZINE 、、@″そのものを表す モジュールの開始 グループの開始 マクロ定義 フォーマット定義 Pasc 引部の開始 8 進数 ( 例 : @' 100 ニ 64 ) モジュール名の定義開始 改行してもよい WEAVE の場合だけ改行する 小さな空白を入れる モジュール名に下線を引かない モジュール名に下線を引く 改行する Pasc 引ソースにそのまま出力する Pasc 引形式でフォーマットする 索引へユーサ定義の方法で登録 索引へタイプライタ体で登録 索引ヘローマン体で登録 前後のトークンの接続 ( 例 : t @& y @& p @& e : type) Pasca ロード内のコメント終了 Pasca ロード内のコメント開始 プールのチェックサム 1 6 進数 ( 例 . @” DODO ニ 53456 ) 1992 3 : と同じだが , WEAVE で印刷されない テフォルトで入る空白をなくす WEAVE の場合だけ改行し , 行間に少し空白を入れる る概念て、す。たとえば , このモジュールに は 2 という番号がつけられます。 次の行の、、 @ ・ を索引に登録せよ」という命令て、す。ここて、 は , 索引の「機種依存」という項目にこのモ シュールが登録されます。これは WEAVE によって処理されるときだけて、 , TANGLE て、は無視されます。 、、@d" が , WEB のマクロを定義する命令 て、す。標準 PascaI て、はラベルに識別子が使 えず , 数値しか許されていないのて、 , て、はラベル end of TANGLE を , 整数 9999 として定義しています。これによって , れ以降に現れる end of TANGLE はすべて 9999 に展開されます。 次の、、@p 〃以降が , Pascal のコードて、す。 ・・という名前 それて、は , これらのモジュールがどこて、 ています。 も同様にほかのモジュールの展開を指定し 、、 @ <GIobals in the outer block@ > 〃など 、、 @ <Types in the outer block@ > 〃 く、、 @ < Constants in the outer block@ > 〃 開せよ , という意味になります。これに続 されているのて、 , それを見つけてここに展 則のモジュールがどこかほかの場所て、定義 , こて、は , 、、 Compiler directives" という名 のモジュールを展開せよ」という指定て、す。 義となります。この場合 , グローバル変数 べてつないだものが , そのモジュールの定 数回定義されていると , それらの定義をす このように , 同じ名前のモジュールが複 ように定義されています。 りません。モジュール 13 の中て、も , List 3 の 義されているのは , モジュール 9 だけて、はあ 実は , 、、 Globals in the outer block 〃が定 することがて、きます。 〃を使って省略 字だけを書いて , あとは、、 . ル名と区別て、きる限り先頭のいくっかの文 います。モジュール名は , ほかのモジュー ュール 9 の中て、 , List 2 のように定義されて ば , 、℃ lobals in the outer block" は , モジ 定義されているかを探してみます。たとえ

10. 月刊 C MAGAZINE 1992年3月号

ドキュメント作成支援システム 特集 Fig. IO WEAVE 自身の印刷 WEAVE. WEB W ダ→ W W ントロールコード WEB のコントロールコードは , 、、 @ 〃十文 字という形になっています。そのため , 覚 えるのはなかなかたいへんて、す。 Table 2 に コントロールコードの一覧を示します。 WEAVE. EXE M M WEAVE. PAS ーⅣ 、ジファイル TANGLE Pasca ロンバイラ WEAVE. TEX WEAVE. DVI WEAVE. WEB D →プリンタへ D W 、Ⅳ → T T T W:W E B P:Pascal M : 機械語 T:TeX D:DVI UNIX の diff というユーティリティは , ふ たつのテキストファイルを比較して , それ らの相違点を出力する , ということがて、き ます。この相違点を記述したファイルのこ とを「差分ファイル」と呼びます。 また , patch というフリーソフトウェアを 使うと , この比較の際に使われたふたつの ファイルのうち , 一方のファイルだけしか ないときに , diff が生成した差分ファイルを もとに もう一方のファイルを復元すると いうことがて、きます。 のことて、す。 UNIX 上て、はこの機能を利用して , ソフト ウェアのバージョンアップや , 特定の機種 WEAVE て、は , これらの変更だけて、な く , TeX の機能を活用して , フォントを , への移植情報などを , この diff を使ったパッ 予約語 ポールド WEB ファイルの全体の構造について説明 チの形式て、配布するのが一般的て、す。最近 識別子 . は MS-DOS 上て、もこの方式が使われるよう イタリック します。 文字列定数 . タイプライタ体 WEB ファイルは , モシュールによって構 になってきました。 さて , WEB て、は , この diff の差分ファイ と使い分けるほか , 演算子については Tabl 成されています。各モジュールには , ルと同じ考え方て、 , 「チェンジファイル」と e 1 のような変換を行います。 ① TeX 部 . コメントを書く このほか WEAVE て、は , ドキュメントの ②定義部 : マクロを定義する いう機能を導入しています。 索引の生成も行います。 ③ PascaIÉß . プログラムを書く チェンジファイルの中には , が , この順序て、現れますが , どれも省略可 能て、す。 ( 変更前の内容 ) モジュールの先頭には、、 @ 凵クという記号を 書きます ( 編注 : 本稿て、は凵という記号は空 ( 変更後の内容 ) WEB の文法のすべてを紹介するのは頁数 白スペースの意味て、用いています ) 。いくっ @z の都合て、無理なのて、 , より詳しく知りたい かのモジュールをまとめて , グループとし という形式て、 , いくつかの変更内容が書か 方は , WEB のマニュアルて、もある論文 [ K てタイトルをつけることがて、きます。グル れています。 n83 ] を参照してください。この論文はスタ ープの先頭のモジュールには , 、、 @ 凵クの代わ これらのチェンジファイルによる変更を クと書きます。 ンフォード大学のテクニカルレポートて、す りにヾ @ * ・ ・・〃がグル 行ってから , プログラムやドキュメントの が , UNIXTeX などの配布ファイルに , w ープのタイトルーとして使われます。 生成を行いたいときには , TANGLE や WE ebman. tex という名前てこの論文の TeX のソ AVE を起動する際に ースが入っています。 TANGLE FILE. WEB FILE ℃ H 特集ドキュメント作成支援システム 25 WEAVE. EXE TeX の構造 WE の文法