6802用アセンブラを作る(3) プロトタイプ完成

構文解析部分で少し悩みましたが、ひとまずプロトタイプはできました。パーサーを自分で作るのとは異なり、ジェネレータを使うとエラー処理をうまく書くのが難しいです。いまのところ最低限の処理しか実装していません。またたまに例外を発生しますのでお気を付けを……。

2017/3/25追記
アセンブラの正式版の説明はこちらに移動しました。お手数をおかけします。

構文解析について

行の構文解析のところで二つの方式で悩みました。

方式1: 命令の正当性を構文規則で表現する

こんな規則になります。

この方式だと構文エラーが自動的に判定できるので(当たり前ですが)、アクションでは正しい構文であることを前提に書けばよいです。しかし命令とアドレシングモードの組み合わせだけ規則を書かないといけなくなるのが少しつらい。……と当初は思っていましたが、組み合わせは全部で203種類しかないので、いま考えるとこちらの方が良かったかという気がしています。作り直してみるか。

方式2:命令の正当性ををアクション側で判定する

今回採用した方式。

オペコード部分は対応する命令のクラスオブジェクトを返すようにして、operation規則のアクションではリフレクションを使ってコンストラクタを取得し、オブジェクトを生成します。命令とアドレシングモードの組み合わせの正当性は、各クラス自身でサポートするモードのリストを実装し、各命令の最上位の親クラス(Instructionクラス)のコンストラクタ内で正当性判定を行います。実際にはこんなコードになります。

この方式だと抽象的にコードが書けるのですが、構文規則でできることをわざわざアクション中ですべて実装しているのが、ちょっとやり過ぎ感が否めません。

比較のために方式1でも試してみようと思います(いずれ……)。

これまでの記録

投稿者: けむしろう

プログラミング、サーバ構築、電子工作、旅行が好きです。

コメントを残す

メールアドレスが公開されることはありません。