2012-05-21 16 views
7

私はC#抽象構文木を開発する上でいくつかの初心者の情報を探してインターネットを精査しましたが、私はすでに「知っている」人の情報しか見つけることができません。私はラインオブビジネスアプリケーション開発者であり、これらのようなトピックは頭がおかしいですが、これは私自身の教育のためのものですので、時間を費やして必要な概念を学びたいと思っています。抽象構文木を開発する

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

ありがとうございます!

+0

FWIW、コンパイラを使い始めるには、龍の本は(IMHO)素晴らしい本です。 http://en.wikipedia.org/wiki/Compilers:Principles,_Techniques,_and_Tools –

+0

@ James Manning:ありがとう、私はそれをチェックします! –

答えて

12

まず、構文解析の内容と抽象構文ツリーの内容を理解する必要があります。このためには、Wikipedia on abstract syntax treesに最初に目を通すことができます。

抽象構文木が構文解析にどのように関連し、構文解析中に構築できるかを理解するためには、コンパイラのテキストブックで実際に時間を費やす必要があります。古典的なリファレンスは、Aho/Ullman/Sethiの「コンパイラ」の本です(Web上で簡単に見つかります)。あなたは教えてAre there any "fun" ways to learn about Languages, Grammars, Parsing and Compilers?への答えを見つけることができます。

単純な文法のためにASTを作成する方法を理解したら、C#のようなものに注意を向けることができます。ここの問題は完全なスケールです。それは20の文法規則でおもちゃの言語で遊ぶことの一つです。数百から数千のルールの文法を扱うのも別です。小さなものは、大きなものがどのようにまとめられているのか、そしてそれらと一緒に暮らす方法を理解するのがずっと簡単になります。

おそらく、独自のC#文法を構築したり、C#標準の文法を実装したりしたくないでしょう。その非常に多くの仕事。あなたはC#ASTを手渡すことができるツールを手に入れることができます(Roslynはすでに言及されています; ANTLRにはC#パーサがあります)。

構文のハイライト表示にASTを使用することは可能ですが(実際はスレッジハンマーを使ってハングしているかもしれませんが)ほとんどの人が大したことを考えていないもの(しかし、コンパイラの書籍は強調しています)は、ASTを済ませた後に起こることです。ほとんどは彼ら自身が役に立たない。あなたは実際に何か面白いことをするためにはもっと多くの機械が必要です。 これを何度も繰り返すのではなく(同じ種類の質問が続きます)、詳細はLife After Parsingに関するディスカッションをご覧ください。

+0

ありがとう、ちょうど私が探していた答えのタイプ! –

+0

これはちょっと遅かったですが、[GOLD Parser](http://goldparser.org/)を見ましたか?このプログラムを使用すると、BNFルールを使用して文法を構築することができ、解析ツリーを処理する任意の言語のスケルトンコードを生成します。つまり、解析ツリーを歩いたりコードを生成するときにコードを解釈します。 – Intrepid

+0

@Mike Clarke:私はGOLDを解析したとしか思っていませんでした。それは実際に解析木を構築しますか?私がウェブページhttp://goldparser.org/doc/index.htmから見ることができる証拠はありません –

1

Roslynを見てください。私はそれがあなたが探しているものかもしれないと思う。これは、他の驚くべきことの中で、コンパイラASTにアクセスできるようにします。その向こう

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

、私は、コンパイラの教科書を示唆しています。

+0

私はRoslynが*抽象構文木の良い例ではないと思います。その構文木にはすべてのセミコロン、コメント、および空白が含まれており、非常に具体的な構文木になっています。しかし、構文の強調表示が目標だった場合、Roslynは良い選択になるでしょう。 – svick

+0

お勧めの教科書はありますか?私は実際に既製の解決策を探していません、私は自分自身を開発して自分を啓発しようとしています。 –

2

おそらくフィルTrelfordことで、この話を見てみる必要があります。

Write your own compiler in 24 hours

この人は天才である、とコンパイラについて学ぶために解雇あなたを残します。彼は文字通り、5歳の子供が理解するのに十分簡単に​​説明します。問題の5歳は彼の息子なので、おそらく不公平な利点がありますが、5つは5です。

関連する問題