12

質問:

Zephyr ASDL とは何ですか? また、レクサーやパーサー ジェネレーターなどの他のコンパイラ テクノロジとどのように関連していますか?

(あなたが十分に完全であるならば、私はそれを感謝しますが、それがかなり専門的なものになるときは、他の参考文献をオンラインで指摘してください。なぜなら、私がコンパイラーについて知っていることのほとんどは、yacc と flex で遊んだり、C で単純な最大ムンク字句解析器を書いたり、見たりすることから来ているからです)アップしてオンラインで読む)

質問の背景:

http://docs.python.org/devguide/compiler.htmlを読んでいて、次の行に出くわしました。

AST ノードの仕様は、Zephyr 抽象構文定義言語 (ASDL) を使用して指定されます。

一番下の引用に従って、 http ://www.cs.princeton.edu/research/techreps/TR-554-97 を見つけました 。

この記事を最初に読んだときはかなり混乱したものでした。再試行する前に、(コンパイル プロセスのコンテキストで) ASDL の目的をよりよく理解できることを願っていました。

4

3 に答える 3

8

レクサー ジェネレーターとパーサー ジェネレーターは、語彙素と文法の記述を受け入れ、対応するアーティファクトを実装するコードを生成します。Lex では、トークンを記述するために正規表現が必要です。パーサー ジェネレーターは、さまざまな種類の拡張 BNF 表記を使用します。

あなたが参照している論文は非常に明確です。ASDL は、一連のツリー ノード (それらのタイプとシグネチャ) を抽象的に記述するための小さな言語です。この言語を使用すると、これらの記述を、パーサーで使用するツリーを実装するために必要なレコード タイプのセットに変換するツールを作成できます (論文の著者もそうしました)。したがって、ADSL は、その目的がコンパイラの一部を生成するコード ジェネレータに供給されるという点で、Regexes や BNF に似ています。

拡張的な見解は、コンパイラはかなりよく理解された技術であり、さまざまな部分の記述からコンパイラを生成できるはずだというものです。正規表現/BNF/ADSL は、解析フェーズに不可欠なキーです。

理想的には、ターゲット命令セット、フロー分析、抽象ツリーからターゲット命令セットへの変換 (最大マンチについて言及)、および最適化を記述する方法の記述言語が必要です。次に、各部分に対応するツールを使用して、「仕様」からコンパイラ全体を構築できます。実際、この分野では多くの作業が行われてきました。人々はこれらすべてを別々に、または一緒に行ってきました。当然のことながら、その一部は以前プリンストンから出ていた "Zephyr" プロジェクトから来ています (そこにある Zephyr の Web サイトは現在死んでいるようです)。

とにかく、Google Scholar で「コンパイラ ジェネレータ」を探してみてください。

于 2012-01-16T02:25:54.293 に答える