15

私はインターネットでC#抽象構文木の開発に関する初心者情報を探しましたが、すでに「知っている」人の情報しか見つけることができません。私は基幹業務のアプリケーション開発者なので、このようなトピックは少し頭に浮かびますが、これは私自身の教育のためであるため、時間をかけて必要な概念を学びたいと思っています。

一般的に、コード文字列からコードの抽象表現を開発する背後にあるテクニックについて学びたいと思います。具体的には、このASTを使用してC#構文の強調表示を実行できるようにしたいと思います。(構文の強調表示にASTは必要ないことはわかっていますが、これは「コンパイラ」レベルの手法を学ぶ良い機会のようです。)

この質問が少し広範である場合はお詫び申し上げますが、他にどのように質問すればよいかわかりません。

ありがとう!

4

3 に答える 3

21

まず、構文解析とは何か、抽象構文木とは何かを理解する必要があります。これについては、最初に抽象構文木についてウィキペディアを参照してください。

抽象構文木が構文解析にどのように関連していて、構文解析中に構築できるかを理解するには、コンパイラの教科書を実際に使用する必要があります。古典的なリファレンスは、Aho / Ullman / Sethiの「Compilers」ブック(Webで簡単に見つかります)です。言語、文法、構文解析、コンパイラについて学ぶための「楽しい」方法はありますか?に対するSOの答えを見つけることができます。有益です。

簡単な文法のASTを作成する方法を理解したら、C#のようなものに注意を向けることができます。ここでの問題は、規模の大きさです。20の文法規則を持つおもちゃの言語で遊ぶことは1つのことです。数百または数千のルールの文法を扱うのも別の方法です。小さなものを経験することで、大きなものがどのように組み立てられ、どのように一緒に暮らすかを理解しやすくなります。

おそらく、独自のC#文法を構築する(またはC#標準の文法を実装する)ことは望まないでしょう。かなり大変な作業です。C#ASTを提供する利用可能なツールを入手できます(Roslynについてはすでに説明しましたが、ANTLRにはC#パーサーがあります。他にもたくさんあります)。

シンタックスハイライトにASTを使用する可能性があるのは事実です(ただし、それはおそらくハンマーで大ハンマーを殺しているでしょう)。ほとんどの人はあまり考えていませんが(コンパイラの本は強調しています)、ASTを取得した後に何が起こるかです。ほとんどの場合、それらはそれ自体では役に立ちません。実際、何か面白いことをするためにはもっとたくさんの機械が必要です。これを何度も繰り返すのではなく(私は同じ種類の質問を見続けます)、詳細については、LifeAfterParsingに関する私の議論を見ることができます。

于 2012-05-21T01:21:19.017 に答える
5

PhilTrelfordによるこの講演をご覧ください。

24時間で独自のコンパイラを作成する

この男は天才であり、コンパイラについて学ぶためにあなたを興奮させます。彼はそれを5歳の子供が理解するのに十分簡単に​​文字通り説明します。問題の5歳は彼の息子であるため、おそらく不当なアドバンテージがありますが、5歳は5歳です。

于 2016-05-13T14:37:34.187 に答える
1

Roslynを見てください。それはあなたが探しているものかもしれないと思います。それはあなたに他の多くの驚くべきものの中でコンパイラASTへのアクセスを与えます!

http://blogs.msdn.com/b/visualstudio/archive/2011/10/19/introducing-the-microsoft-roslyn-ctp.aspx

それを超えて、私はコンパイラに関する教科書を提案します。

于 2012-05-21T00:07:48.343 に答える