C言語ライクな特定分野向け言語で、
コンパイラの実行時のバックエンドの処理過程がXMLファイルに
Rubyをはじめ各種スクリプト言語を埋め込む形で記述されているために
コンパイラ内のXMLパーサが複数のパーサやインタプリタを呼び出すようになっている。
その上、C言語用パーサとその埋め込みスクリプト用パーサ用の
パーサジェネレータ用ソースはRubyスクリプトでジェネレートされている。
そんなコンパイラ。
ついでに構文エラーメッセージはどのパーサが発した場合でも全て"PARSE_ERROR"としか表示しない。
(即ち内蔵されている複数のパーサのうちどれがどのファイルを読んでいるときのエラーだかサッパリ不明。)
488 :
デフォルトの名無しさん:2005/10/11(火) 12:29:53
↑分かりにくいぞ
489 :
487:2005/10/11(火) 12:44:36
そう、実際分かりにくいんだよ。
490 :
487:2005/10/11(火) 13:06:10
・コンパイラAはC言語ライクな特定分野向け言語である
・C言語パーサはC言語ライクな特定分野向け言語の抽象構文木をつくる(フロントエンド)
・よってAにはC言語パーサが含まれる
・Aの最適化やコード生成などのバックエンドの動作は実行時に読み込まれるXMLファイルによって決まる
・そのXMLファイルはXMLの要素内に抽象構文木を書き換えるスクリプト言語や簡易言語を埋め込む形で書かれる
・よってAにはXMLパーサとスクリプト言語インタプリタ、簡易言語パーサが含まれる
・それらのインタプリタや簡易言語パーサはXMLパーサの中から呼び出される
・ちなみにスクリプト言語のインタプリタの一つはRubyである
・でもって簡易言語はオリジナルである
・ここでC言語パーサもXMLパーサも簡易言語パーサも構文エラーのメッセージは共通でただ一種類"PARSE_ERROR"である
・おまけになぜかC言語パーサと簡易言語パーサのパーサ・ジェネレータ用ソースはわざわざRubyスクリプトで生成されている
整理してみたが結局やっぱりわかりにくいな。
まぁドキュメントはないし、書いてるのは外国人だしで、
開始後3年目になるこのコンパイラの開発プロジェクトに放り込まれて
ここまで構造が把握できるまで数ヶ月かかったしな・・・。
491 :
487:2005/10/11(火) 14:11:23
ううぐぅるむぅ、Bison++のに食わせるYACCソース2つのみならず
2つあるXMLパーサ(正確にはSAXハンドラが2つ)のソースも
Rubyスクリプトで生成してあるのに今気づいた。
(デバッガが使えない状態でプリント文方式デバッグ用に入れたコードが
makeすると消えるのでよくよくMakefile読んだらそうなっていた。)
修正とデバッグが無茶苦茶面倒だ・・・。
(大体ソース2つ生成するのに同じくらい長々しいRubyコードが3つあるんじゃ
全然省力化できとらんやんけ!)
これ以上ナニなコンパイラになる前に誰かヤツを、
あのフランス人を止めろ(パタリ