[View] [Edit] [Attachments] [History] [Home] [Changes] [Search] [Help]

言語ゲームレポート

言語ゲームは、現在簡単なプロトタイプの作成が完了しています。プロトタイプ時点での言語ゲームの特徴には以下のものがあります。

機能の省略

本プロジェクトの目的は、グラフィカルなインタフェースを持つパーサジェネレータの構築と、その応用についてアウトラインを探ることです。特にユーザインタフェースに力点を置いている為、パーサジェネレータ自体の機能についてはかなり省略しています。以下に省略部分をはじめとする特徴を挙げます。

スキャナの省略

パーサージェネレータの構造としては、スキャナとパーサを組み合わせる方式が一般的ですが、今回のプロトタイプに置いてはスキャナを省略しています。このプロジェクトの特徴の一つは解析ツリーの視覚化であり、スキャナの開発は後回しにするべきだと考えました。現在、スキャナに関しては Squeak 自体の Scanner クラスを利用しています。従って、言語ゲームが理解するトークンは Squeak と同一の物となっています。

簡略化されたBNF

文法を指定する為に、BNF をベースとした表現を用いていますが、いくつかの簡略化があります。まず、"|" による並列表現が使えない事と、文法内で単語と非終端子を区別しない事です。つまり、文法

pair : animal animal
animal : Tom
animal : Jerry

は、Tom Jerry にマッチするだけでなく、Tom aminal にもマッチしてしまいます。

単純なパーサー

パーサーの動作原理としては上向きの構文解析を行っています。しかし LR 遷移表をたどる方式ではなく、単にスタックの右端を文法の上から順番にマッチするルールを探すと言う方式をとっています。この方式は効率や正確さの点で良くないのですが、動作原理が単純なため、最初の段階としては十分だと思います。

Smalltalk の文法を利用したアクション


構文解析後のパーサはアクションに従って動作しますが、その表現として Smalltalk のブロックコンテキストを利用しています。個々のノードはブロックコンテキストを評価した結果の任意のオブジェクトを値として持つ事により演算を行う事が可能です。また、bindingOf メソッドの利用により、モルフなどの外部オブジェクトをグローバル変数として利用する事が出来ます。

構文木のグラフィカル表現


解析された構文木は GTile クラスのサブクラスとして画面上に出力されます。抽象クラス GTile を実装する事により、標準のツリー形式以外に様々な表現方法をプログラムする事が可能です。

Links to this Page

propella home