2012-04-14 3 views
1

私はflex + bisonを使って簡単なアセンブラを書いています。アセンブリ言語にプリプロセッサ(マクロ)を追加したいと思います。フレックス+バイソンを使ってみるのは初めてのことですが、これについてどうやって行くのか分かりません。flex + bisonアセンブラにプリプロセッサを追加する方法はありますか?

flex + bisonのインスタンスを別に追加し、前処理を完全に個別に行うのは適切ですか?あるいは、処理のさまざまなフェーズで異なる構造を表現することをサポートしていますか?

好奇心が強い場合は、DCPU-16アーキテクチャの場合はthe assembler is hereです。

答えて

3

あなたは間違いなく別のパーサが必要です。これがgccのやり方です。前処理だけでコンパイルを止めることができます(-E、私は信じています)。技術的には単一のパーサとして書くことは可能かもしれませんが、それはもっと問題になるでしょう。なぜそれが有用なのか特別な理由はありませんが、別々のものを保つことは前処理だけでコンパイルを止めることができますプリプロセッサ/アセンブラ自体だけでなく、それを使って書かれたプログラムだけでなく、エラーを追跡することも容易になります。

+0

あなたは望ましい*効果*を記述します。私が求めているのはメソッドです:flex + bisonの1つの "インスタンス"(およびパーサーコールバックのフェーズを処理する)の両方を表現するか、完全に別々のflex + bisonインスタンスを持つことです。 – blueshift

+2

2つの別々のレクサーとパーサを記述します。接頭辞ディレクティブを使用すると、衝突しません。 – Kevin

+0

ありがとうございます。賢明に聞こえる。 – blueshift

2

鉱山を見ることができます。 P You can find it hereこれは、式をサポートしていますが、前方参照をサポートするには、astが必要であることがわかりました。たぶんNotchは、修正されていないサイズのオペコードがアセンブラを作るのが難しいと判断したときに、彼はそれを変更します:)

対象のまともな本はFlex and Bisonです。ファイルバッファを変更します。それはちょうどそのためのパーサー/レックスを非道的に示しています。それは私の学習の多くを助けました:)

+0

ありがとう、私は見てみましょう。そして、シンボルを含む短いリテラルをサポートしたい場合は、ASTが必要です。彼らは人生をもっと難しくしますが、確かにそれは0x10c世界の挑戦の一部と考えることができますか? :) – blueshift

関連する問題