extLP for ver.

飯倉宏治

拡張辞書 extLP は、 簡易的な文芸的プログラミング(Literate Programming)を実現するための拡張辞書です。

この拡張辞書では、ワード <!DOCTYPE と </code> を /* の別名とし、 ワード </html> と <code> を */ の別名とします。 これにより、次に示すような HTML ファイルそのものを Paraphrase のプログラムとして 読み込むことが可能となります。 もちろん、この HTML ファイルをブラウザで閲覧することにより、 通常の HTML 文書としても使用することが可能となります。 もちろん、css を用いたスタイルの指定もできます。

注:"ext/extLP.so" import (Windows の場合は extLP.dll)とすれば、 以下の HTML ファイルは Paraphrase の正しいプログラムリストとして解釈されます。

↓ DOCTYPE タグでコメント開始
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <link rel="stylesheet" href="sample.css">
    <title>switch - dispatch の使い方</title>
  </head>
  <body>
    <h1>switch - dispatch の使い方</h1>
    C などのプログラミング言語同様、
    Paraphrase でも switch ワードにより複数の条件分岐が可能です。
      (中略)
    使用方法を以下に示します。
    <code> ←ここでコメント終了
      ↓ 以下、有効な(=コメントではない)コード
      "FizzBuzz" :
        switch
          case 15 % 0? -> "FizzBuzz" break
          case 5 % 0? -> "Buzz" break
          case 3 % 0? -> "Fizz" break
        dispatch
      ;
    </code> ← 再びコメント開始
    上記のコードで定義している FizzBuzz ワードは、
      (中略)
  </body>
</html> ← /html タグでコメント終了

上記の HTML ファイルを FizzBuzz.html とすると、

> "ext/extLP.so" import
  ok.
> "FizzBuzz.html" load
  ok.
> 10 20 do i FizzBuzz . loop
  Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz ok.
という結果を得ます。

本拡張辞書は、以下のコードと同等です。

"<!DOCTYPE" "/*" alias
"<!doctype" "/*" alias
"</html> "*/" alias

"<code" "*/" alias
"<code>" "*/" alias
"</code>" "/*" alias

Forth や Factor では入力バッファにアクセスすることで (ワードからスキャナを操作することで) コメントを実現していますが、 Paraphrase では新たな実行モード(シンボルモード)を導入しているため、 スキャナを操作することなくワードとしてコメントの終了機能を実現しています。 加えて、Forth 系ということもあり、 HTML タグと同名のワードも定義・使用できます。 Paraphrase は、このような特徴を有しているため、 タグ名と同じワードをコメントの開始・終了ワードの別名として定義するだけで、 簡易的文芸的プログラミングが実現できます。