2025 01,29 07:59 |
|
2007 03,17 11:12 |
|
今年に入ってから、仕事でインタープリタを実装しています。BASICやスクリプト言語のようなインタープリタではなく、どちらかというと、マクロプロセッサに近いもので、テキストの一部を置換するのが目的のものです。その意味では、C言語のプリプロセッサとか、m4とか、PHPなんかに近いのかもしれません。
インタープリタの実装経験は初めてではありませんが、それまではどちらかというと動作させるだけのものでした。そんなわけで、動作させること自体はそれほど難しくもないのですが、結構面倒なのがエラー処理です。といっても、エラーを検出するだけなら割と簡単です。一番面倒なのは、エラーメッセージの生成に関する部分です。 特に、文法エラーが面倒です。例えば、 if 式 thenというコードがあったとして、仮にelseの綴りがekseになっていたとします。この場合でも、endifがあるので、ifブロック自体は成立してしまいます。今回作成しているような埋め込み型のインタープリタ(というかマクロプロセッサ)の場合、言語外の記述がソース中に普通に表れるので、人間が見ればすぐに間違いと分かる場合でも、ekseのスペルミスを指摘するようなエラーメッセージを出すのがなかなか困難です。 また、endifがなかったりスペルミスがあった場合でも、エラーの検出行のレポートが結構難しいのです。このような場合、エラーを検出した行は、ifが記述された行とするか、ソースファイルの終端行にするしかありません。しかし、いずれにしてもエラーメッセージを読んで、実際に問題がある行を特定するのはちょっと手間です。 そんなこんなで悩ましい部分もあるのですが、この手の仕事は面白いので、楽しくやっています。日程的に尻に火が付き出すと、楽しくとはいかないのでしょうけど。いずれ成果物を一般公開することになると思いますので、興味のある方は期待しておいてください。また、実装に使用しているBoost.Spiritに関するノウハウも、どこかで公開できればと考えています。 PR |
|
コメント |
shellやJavaScriptなどでインタプリタのお世話になりますが、エラーメッセージって不親切なものが多くて苦労します。IEのエラーメッセージでエラー箇所が分かったことなんて一度たりとも無いですし。
エラー箇所が分かりやすいインタプリタを作られたら、ユーザにすごい歓ばれると思います。 Re:大変そうですね
>エラー箇所が分かりやすいインタプリタを作られたら、ユーザにすごい歓ばれると思います。
そうですね。結構頑張ってはいるのですが、最終的にはどこかで妥協点を見いだすしかなさそうです。 どちらかというと機能面にばかり注目が集まり、エラーメッセージというのは日の当たりにくい地味な存在なのですが、ツールの使い勝手を決めるのは、そういった地味な部分の影響が大きいと思います。 |
コメント投稿 |
|
trackback |
トラックバックURL |
ソフトウェア開発 ホームページ制作 はんこ 忍者ブログ [PR] |