SSブログ

日本語プログラミング言語の実装・再考 [wython]

これは日本語「スクリプト」言語wythonとは、関係はあるが、別のプロジェクトなので、混同しないように。どう違うのか、と言うと、まず、wythonは、完全なPythonの日本語ラッパー言語で、Pythonコードへのトランスレータとして実装している。言語仕様を少しずつ決めながら、基本的な実装を進めているが、正規表現を駆使した(といっても、アクロバティックに駆使しているのではなく、単純な置換や検索を「たくさん」使っている、という意味。)テキスト処理にすぎない。つまり、プログラム言語の構造などは、全くお構いなしで、それはPythonにお任せ。wythonは単に入力された一行一行のみを、日本語を解釈し、それを取り去り、Pythonのコードに置き換える、というやり方で作っている。

 これはこれで、そんなに根を詰めなくても少しずつプログラムしていくことができるし、僕自身が使う教育用言語としてなら、十分使えるものができるだろうと思う。さらにwythonの素晴らしいところは、実装ができてなくても、言語仕様だけだっていいということにある。それはPythonのプログラムを書くときの、日本語擬似コードとして、それなりに形式化された言語だということができるからだ。実行できなくても、wythonで書くことで、プログラムを日本語で考えることができ、しかも、それは無理な日本語ではなく、Pythonを下敷きにした言語なので、書きやすく、またPythonのコードに書き直すのも、何も機械に頼らなくたって、とても簡単にできる。やってみてほしい。

 それに対して日本語「プログラムミング」言語の実装というのは、言語仕様はwython流でいいが、それをちゃんとコンパイラで何らかのコードに変換するものを考えている。ちゃくとコンパイラで、ということは、字句解析をし、構文解析をし、そこから何からのコード生成をする、という手順をちゃんと踏まえるということである。

 なぜ、そういうものを考えているのかというと、wythonはPythonがインストールされていることが前提となっているが、できれば、コンパイラーないしはインタープリターとして、単独で実行できるようにしたいからだ。それから、構文解析をするために文法をきちんと構造的に定義することができれば、wythonのように、いくつかのサンプルを想定して、それを正規表現で検索置換する、などという原始的なことをしないでも、論理的・構造的に動かすことができるだろうか。

 しかし、どういう風に作ったらいいか、これを長いこといろいろいと考えたり、調べたり、サンプルを探したりしてきたが、単独で動くようにするのは、結構大変であることが分かってきた。そもそも、目指すのがPythonのサブセットとはいえ、教育用として十分な機能を持っていてほしい、と思う。どのくらいならいいかと言うと、せいぜい、オブジェクト指向、例外処理、モジュール機構などを取り去ったくらいの言語だ。もちろん、ライブラリなどは付けられないので、必要があれば直接Pythonのモジュールを呼び出せるようにはしておきたい。ということは、言語の文法としては、かなりのものをカバーしていることになる。

 これを実装するとなると、大抵のコンパイラの学習用サンプルでは間に合わない。よくある多機能電卓やPL/0(およびその拡張言語)程度では、全然機能が足りないので、参考にならない。そんなことで探していたら、「プログラミング言語を作る」というページが見つかった。これは、crowberというスクリプト言語を作ってみようという前橋和弥という人のページだった。この人は、結構いろいろな本を書いている人で、別にプログラミング言語作りを趣味にしているわけでもなさそうなので、どちらかというと、こういうのを作るのも楽しいでしょう、というのりの教育的ページ(うまくできたら、本にもしたい。)ではないかと思う。

 この言語の仕様という規模がちょうど、今考えているものと同じ程度のものだ。しかし、これは、lexとyaccを使っているが、相当に行数の嵩むソースである。ガベージ・コレクタもあるし、変数には型はないし、で、本格的である。これを、言語の仕様を変えて書き直せば何とかなりそうなのだが、行数の多さに、よほど本腰を入れないとできそうにない。

Rubyを256倍使うための本 無道編

Rubyを256倍使うための本 無道編

  • 作者: 青木 峰郎
  • 出版社/メーカー: アスキー
  • 発売日: 2001/02
  • メディア: 単行本

 もう一つ、もっと楽をして、Rubyのパーサ・ジェネレータであるRaccを使ったインタプリタの例が、そのRaccの作者青木峰郎という人の書いた『Rubyを256倍使うための本 無道編』に載っている。これは、内部的にはRubyに処理を任せてしまう、という方針のインタープリタを徐々に作っていくという内容の本だ。つまり、Rubyに似た言語をRaccで構文解析のパーサを使って、Rubyのコードに書き直す、という、どこかで聞いたような言語を作るという話である。つまり、これをRubyのコードではなく、Pythonのコードに書き直せばいいではないか、ということになる。つまり、言語仕様を少し返るけど、規模とかレベルは同じようなものを作るのである。

 最初は、Rubyで作ってみて、うまく行けば、Pythonに移植する。幸い、Pythonにもyaccやlexに相当するPLYというツールがあるので、Racc用のコードをPLYに移植すればいい。こうしてバックエンド部分をこれに任せられれば、あとは、「日本語」プログラミング言語の「日本語」の部分の処理に集中すればいい。これを考慮して言語仕様を考えていけばいいのである。wythonでは、何の構造も考えずに処理していたものを、文法構造として日本語の部分をどのように処理できるか、に考察の中心を移せるのである。

 というわけで、二つの選択肢があることはあるが、手間と時間を考えた場合、やはり後者の方が費用対効果がずっといいだろう。これが最終的な選択肢になると思う。といっても、実際には僕が実装するわけではないので、一つの提案と受け取って頂きたい。


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。