日本語ワードプロセッサー(略してワープロ)などに代表される文書処理ソフトを使用して、日夜文書作成に励んでいらっしゃる多くの皆さんがいらっしゃると思います。 中には、パソコンを使って文章校正や文字処理のためのプログラムを書かなければならない(書いた方が効率良い)仕事の場面も、少なからずあるのではないでしょうか。

現在ではワープロも非常に高度化しています。 機能を一通り覚えるだけでも大変なことですが、いざ仕事や趣味に使用してみると、やっぱりあんなこともやりたい、こんなことができたら良いのになどと、使い慣れてくるにつれ、さまざまな要求が出てきます。 例えば、文字列の検索や置き換え機能などは大抵標準で利用できますが、表記のチェックなどをやってくれるソフトウェアは、なかなか見当たりません。 一方、ワープロを使って簡単にはできないことでも、その用途に向いた別のソフトウェア製品を購入すれば、それで済む場合もあるかもしれません。

しかし、値段が高過ぎて手が出ないという場合や、いざ購入してみたものの、期待外れだったりするときもあると思います。そのような状況で、自分の仕事に向いたオリジナルプログラムを作ろうと一大決心をして、難解なプログラム言語のマニュアルを片手に、頭をひねりながらパソコン画面に表示された無情なエラーメッセージや、警告メッセージと格闘したことがあるという経験をお持ちの方々も多くいらっしゃるのではないかと思います。

確かに最近はパソコンの高性能化と小型化によって、大掛かりな計算機施設などへ、わざわざ時間と交通費を使って足を運んで、さらに使用料(課金)を払わなければならないということもなくなりました。さらに、インターネットの驚くほどの普及もあって、自宅でワープロを打ちながら、欲しい情報も瞬時に得られるようになりました。その上、文書作成と同時にプログラムを組むということが簡単にできる世の中にもなってきました。

こういった社会背景もあって、日本語文書処理の仕事をする上で、便利なツールを作ろうというのが最初のスタートでした。しかし、そのうちにプログラム言語の中でも、ワープロのようにもっと日本語が多く使えたらいいのにと思うようになってきました。 世の中には同じような考えを持っている方々も多くいらっしゃるのではないかと思います。ここでは、日本語カスタマイザーと呼べるのかどうかは分かりませんが、日本語でプログラムをするためのFLEXというソウトウェアツールを利用した方法を思いつきました。 このサイトではFLEXを使った日本語文書処理をはじめ、数種のプログラミング言語で日本語を多く利用したサンプルなど、あれこれと試行した過程を掲載しています。

(追記)いろいろと試行をやっていくうちに、このカスタマイザーには日本語だけではなく多言語でも十分に実用化できる可能性もあることが分かってきました。また、C、C++、JavaにとどまらずReduce/Lisp、Python、ruby、HTMLといったプログラミング言語にも日本語(多言語)化できる可能性のあることを実証しています。 さらにこのカスタマイザーの特徴は、自分が日本語(多言語)で書きたいところを書きたい分だけカスタマイズすることができるというのも、他の日本語(多言語)プログラム言語にはない特徴だと思います。ついでに言わせてもらえば、これから日本語(多言語)プログラムをつくってみようとされる諸兄の方々にとって、このカスタマイザーが核(コア)技術として有用であるものと考えています。

それではこの日本語カスタマイザーというものは一体どのようなものかを説明しますが、その前にプログラム言語で日本語を多めに書くと、一体どのようなメリットが得られるかということについて述べてみます。

普通、人が読んで分かりやすいプログラムとは、やはり何度も何度も見直して、思ったとおりに動いてくれるかということだけではなく、さまざまな名前の付け方に気を配ります。それは日本語で文章を書くときと同じように、何度も推敲を重ねて読みやすい文章に仕上げていく過程に相通じるものがあるのではないでしょうか。

しかし、プログラムを書いた後、しばらくたってからまた自分のプログラムを眺めてみると、一体どのような考え方に基づくプログラムだったのかを理解するのに苦労することがあります。これはやはり大部分が英語で書かれていることにより、直接的な理解を防げている一面があるのではないかと考えられます。

われわれ日本人がC言語に限らずプログラムを書くときに、なぜ変数名や関数名に漢字や平仮名が使えないのだろうと疑問に思った人はいるのではないでしょうか。そこでプログラムの中に何とか日本語を多めに利用できないものかと考えた結果、高機能エディタのマクロ機能を利用したやり方などもあるということですが、今回は次のようなアイデアが浮かびました。それはUNIX上のツールであるLexという字句解析ツールの後継にあたるFLEX(これはGNUプロジェクトから入手可能)というツールを利用することで日本語化をやろうということです。

GNUプロジェクトによって、UNIX上だけではなく、WindowsXP上でもFLEXは簡単に利用できるようになりました。筆者もここからダウンロードしたものを使っております。こ のサイトで日本語を多めに書いてみたプログラム言語は、Windows環境とubuntu環境で使うということを前提にしております。 

このFLEXというツールはC言語の処理系がないと動きませんので、Windows環境では、私がよく利用しておりますボーランド社 (2008年よりエンバカデロ・テクノロジーズ社に買収)のBCC32.EXE(C++バージョン5.5.1、リンカーバージョン5.00)という市場で評判の良いソフトを使って、このFLEXツールを動かしてみました。 またubuntu環境では、gccでFLEXを動かしております。FLEXのプログラムは、実は一度C言語に変換されます。それをC言語処理系により、実行可能ファイルにしていますので、FLEXのプログラムも 実はC言語の一種と考えてよいのかもしれません。

C言語の処理系(コンパイラ)は、今日LALR(1)と呼ばれている左から右へ1トークン(トークンとは予約語、識別子、定数、文字列リテラル、演算子、区切り子など)だけ先読みして、構文解析をする方法で実装されている処理系が多いといわれています。この処理系の動作部分を日本語が利用できるように変更することは、 C言語のユーザーである私達が、簡単に手を加えてできるものではありません。

カスタマイザーの方針としては、処理系とは 別個に独立しており、処理系そのものには全く影響しないような方法が良いだろうと考えました。それにはまず、日本語の変数名や関数名で書いてあるプログラムをこのFLEXツールで前処理を行い、その結果出力されたファイルを通常のC言語の処理系で翻訳、実行できるようにしておけばよいということに気が付きました。

ツールの仕様としては、次のように前処理のための日本語多めのC言語ファイル内に 、特別な日本語定義命令を書いておくだけで、以下のように自動的に変数名として英数文字を定義する機能を持つことです。

#日本語定義 変数の名前

また、関数名も同様に次のように書いておくだけで、自動的に英数文字として割り当てるようにします。

#日本語定義 関数の名前

さらに日本語でC言語の予約語などを表わしたい場合や、日本語を特定の英数文字列で表わしたいときには 、次のように書きます。

#日本語定義 印字 "printf"

#日本語定義 大域的変数1 "global_var1"

また、今回作成したツールは、WinowsXPのコマンドプロンプトで動作するFLEX(少々古めのバージョン2.5.4)のプログラムです。 このFLEXツールはNo.1とNo.2に分かれており、FLEX No.1プログラムの方は、日本語の変数名や関数名が書かれたファイル(拡張子が.jc)を解析し、 さらにこの拡張子が.jcファイルを再び読み込むためのFLEX No.2プログラムを自動的に出力します。 (いわゆる2パスというやつです)

このFLEX No.2プログラムを実行させて、日本語定義された.jcファイルから通常のC言語処理系で処理可能な.cファイルを生成するというものですが、この一連の操作はバッチファイルによって自動的に行われます。(図1を参照)

図1 処理の流れ

ここまでC言語の場合について、簡単に説明しました。FLEX自体がC言語を利用しますので、最初に日本語を多めに書く言語としてC言語を選ぶことは、大変都合が良いといえます。また、他の言語の場合でも、基本的には日本語定義ファイルをFLEXの2パスで各言語のソースファイルに変換するというような仕組みです。

(補足)カスタマイザーという言葉はカスタマイズ(custom-ize)という、ソフトウェアの仕様をそれぞれの趣向に合わせて適用させるという意味に「er」という接尾語を付けたものです。この用語自体は英語辞書を開いても見当たりませんので、和製英語とみられることもあると思いますが、最近Javaの世界ではカスタマイザークラスという用語が使用されているようですので、このサイトでも学術的な用語かどうかは別にして「カスタマイザー」という言葉を使用しております。

学会講演

2010年(平成22年)3月 、情報処理学会 九州支部

火の国シンポジウム2010

2006年(平成18年)9月、電気関係学会九州支部連合会

1998年(平成10年)10月、電気関係学会九州支部連合会

その他未発表の論文

2002年(平成14年)英文タッチタイプ練習プログラムにおける
テキストの比較アルゴリズム

具体的な例示集は以下の言語編を参照してください。

Windows版

C言語編

C++言語編

Java言語編

ubuntu版

C言語編

Java言語編

NEW その他の言語


(注)このサイトのプログラムには、平成の年月日を指定すると曜日を求めるプログラムが掲載されていますが、平成の元号は天皇陛下の御退位に伴い終了し、新元号が2019年5月1日より始まります。プログラムの変更は新元号が発表された後に行う予定です。

FLEXを利用した日本語文書処理の活用例です。

Windows版

NEW FLEX日本語活用編

ubuntu版

NEW FLEX日本語活用編

当ペ-ジのコンテンツは予告なく変更する場合があります。また、万が一にも、本サイトに掲載しているプログラムを利用した結果、損害が生じたとしても、本サイトでは一切対処できませんので、すべて自己責任にてご利用をお願いいたします。 さらに、当ベージのプログラムについては、試行実験的な要素もあることから、安全な定番コードを掲載しているというわけではありません。処理系のメーカーやバージョンの違いによっては、動作しないことも十分予想されます。ご使用にあたっては、この辺りのことも配慮していただきますよう、お願いいたします。

Office Noguchi 1999-2018 All rights reserved