ellisp

出典: 謎の百科事典もどき『エンペディア(Enpedia)』
ナビゲーションに移動 検索に移動

ellispは、仮想プログラミング言語の一種。仮想機械上の仮想言語に落とされ、仮想機械上で実行される。
もともとは漢字ローマ字交じりテキストを処理するために、1992年ごろに島田正雄によって実装された。 「lisp(プログラミング言語)」には「舌足らずの」の意があり、「ellipse(楕円)」には「不足した」の意味があるため、「ちょっと足りないおバカな言語」ということで命名された。

概要[編集]

もともとのアイデアは数学者(数学基礎論)の島内剛一による「島内式ローマ字かな変換」である。
構文は基本的にはひとつしかなく(辞書用のバリエーションはある)、
[構文要素1] - "{"マッチングパターン1"|"マッチングパターン2"}" - [構文要素2];
で記述できるが、解釈処理系をいじることで いろいろと省略できる。ローマ字入力の「島内式ローマ字かな変換」の項を参照のこと。

ふりがなの表記[編集]

文字列の表記においては、「読み」と「表記」、「どこからどこまでに、どのようなルビを振るか」「行末禁則と競合しないか」といったことをコンピューターに正確に伝えなければならない。そのため、ellisp は"{}|"を用いる形式を取っている。
たとえば "文字列"は"{文字列|もじれつ}"などと表記する。

具体例[編集]

ローマ字かな変換であれば、

  「[文字] - {"s"|} - [サ行音];」 

あるいは

  「[文字] - "{s|}" - [サ行音];」 

と定義としておいて、

   [サ行音] - {"ha"|"シャ"} - [文字の終わり];
   [サ行音] - {"hi"|"シ"} - [文字の終わり];
   [サ行音] - {"hu"|"シュ"} - [文字の終わり];
   [サ行音] - {"he"|"シェ"} - [文字の終わり];
   [サ行音] - {"ho"|"ショ"} - [文字の終わり];

などとしておけば、「sa・si・su・se・so」と「sha・shi・shu・she・sho」の処理は統合できる。これにより、「どの候補を選択するか」という問題に帰着するため、あとはユーザに選んでもらえばいいし、「このユーザはどのルールを優先するか?」はパソコンが学習できる。 「sya・syu・syo」や「tsu」「cha・chi・chu・che・cho」も同様に扱える。

「Microsoft IME」はローマ字かな変換において「接続テーブル法」を使っている模様である(「ローマ字のオプション」の項を参照のこと)。 ところが、ローマ字かな変換だけでも「26文字×26文字」のテーブルには収まりきれず、しかもテーブルの中身はスパース(スケスケ)であるため、保守の手間が半端ではない。それゆえ現今のローマ字かな変換システムおよび IME の変換精度は低いままである。 その点、島内式であれば文字列のパターンマッチングと属性定義によって関連のあるところだけを定義すればいいため、可読性が高くコンパクトな記述になることが期待される。

なお、マッチングパターン文字列を逆に解釈すると、同じ記述が「かなローマ字変換」にも使えることを指摘しておく。 主に ひらがな表記の一部のみを示しておく。ひらがなでは音引き(「ー」)が使われることが少ないので、省略する。

   [文字] - {"a"|"あ"} - [文字の終わり];
   [文字] - {"i"|"い"} - [文字の終わり];
   [文字] - {"u"|"う"} - [文字の終わり];
   [文字] - {"e"|"え"} - [文字の終わり];
   [文字] - {"o"|"お"} - [文字の終わり];
   [文字] - {"k"|} - [カ行音];
   [文字] - {"k"|"く"} - [文字の終わり];
   [カ行音] - {"a"|"か"} - [文字の終わり];
   [カ行音] - {"i"|"き"} - [文字の終わり];
   [カ行音] - {"u"|"く"} - [文字の終わり];
   [カ行音] - {"e"|"け"} - [文字の終わり];
   [カ行音] - {"o"|"こ"} - [文字の終わり];
   [カ行音] - {"ya"|"きゃ"} - [文字の終わり];
   [カ行音] - {"yu"|"きゅ"} - [文字の終わり];
   [カ行音] - {"yo"|"きょ"} - [文字の終わり];
   [文字] - {"c"|} - [C行音];
   [文字] - {"c"|"く"} - [文字の終わり];
   [C行音] - {"a"|"か"} - [文字の終わり];
   [C行音] - {"i"|"スィ"} - [文字の終わり];
   [C行音] - {"i"|"ち"} - [文字の終わり];
   [C行音] - {"i"|"し"} - [文字の終わり];
   [C行音] - {"i"|"サイ"} - [文字の終わり];
   [C行音] - {"u"|"く"} - [文字の終わり];
   [C行音] - {"e"|"せ"} - [文字の終わり];
   [C行音] - {"o"|"こ"} - [文字の終わり];
   [文字] - {"g"|} - [ガ行音];
   [文字] - {"g"|"ぐ"} - [文字の終わり];
   [ガ行音] - {"a"|"が"} - [文字の終わり];
   [ガ行音] - {"i"|"ぎ"} - [文字の終わり];
   [ガ行音] - {"u"|"ぐ"} - [文字の終わり];
   [ガ行音] - {"e"|"げ"} - [文字の終わり];
   [ガ行音] - {"o"|"ご"} - [文字の終わり];
   [ガ行音] - {"ya"|"ぎゃ"} - [文字の終わり];
   [ガ行音] - {"yu"|"ぎゅ"} - [文字の終わり];
   [ガ行音] - {"yo"|"ぎょ"} - [文字の終わり];
   [文字] - {"s"|} - [サ行音];
   [文字] - {"s"|"す"} - [文字の終わり];
   [サ行音] - {"a"|"さ"} - [文字の終わり];
   [サ行音] - {"i"|"し"} - [文字の終わり];
   [サ行音] - {"u"|"す"} - [文字の終わり];
   [サ行音] - {"e"|"せ"} - [文字の終わり];
   [サ行音] - {"o"|"そ"} - [文字の終わり];
   [サ行音] - {"ya"|"しゃ"} - [文字の終わり];
   [サ行音] - {"yu"|"しゅ"} - [文字の終わり];
   [サ行音] - {"yo"|"しょ"} - [文字の終わり];

実装[編集]

記述言語[編集]

C 言語はお奨めしない。文字コードと可変長データの格納領域の管理に配慮すると、おそらくは Java で実装するのが楽であろうと思われる。

構成[編集]

仮想マシンではあるが、日本語処理などの大規模処理に対応する必要が生じ、データベースとのインターフェースが欠かせなくなくなる。

辞書表現[編集]

何万語もある辞書を ellisp によって記述したのでは堪ったものではない。そこで、辞書記述用の表記がある。
たとえば「高見の見物(名詞)」であれば、
{たかみ|高見}の{けんぶつ|見物}[名詞]
と記述して[1]、単語の文法属性までの部分から「たかみのけんぶつ」という見出し語と「高みの見物」という本表記に分けて個別に処理する。なお、文法属性は ellisp の開始属性と終端属性との関連を示すテーブルとするが、形容詞・動詞の場合には「語幹の部分を切出すための、連体形の活用語尾」も含めてテーブルとして持つ。
現在のパソコンの主記憶領域は充分に広いため、「漢字かな交じりの日本語テキストを読みに開いたり、HTML のルビ付き文書に変換する」くらいは造作もない。

関連項目[編集]

脚注[編集]

  1. 語釈などは、この後ろにつける。行の末尾にはセミコロンをつけておくと、一行コメントが見やすい。