2009-10-13 11 views
26

C#3.0コンパイラをC#で作成する予定です。パーサー生成のための文法はどこで入手できますか?C#3.0の文法はどこにありますか?

好ましくはANTLR v3で修正なしで動作するもの。

+6

C#3をコンパイルするコンパイラはすでに無料で出荷されています。 :-)しかし、真剣に、なぜあなたは自分自身を構築していますか?ちょうど楽しみのために、またはいくつかのビジネス目的はありますか? (私が尋ねる理由は、単純に「このソースコードのためにILを私に吐き出す」以外の "サービス"の人々が私たちのコンパイラから欲しいものを学ぶことに非常に興味があるからです)。 –

+1

Eric:しかし、私は時々、私がテストできると思ったいくつかの言語のアイデアを考え出します。 –

+0

@Mehrdad、いくつかのコードがあればそれで遊ぶことができます:) –

答えて

7

私はANTLR C# Grammar on CodePlexに遭遇しました。これは比較的新しいプロジェクトであり、ANTLR 3.2を使用しています。 C#4.0をサポートし、Eclipse Public License(EPL)の下でライセンスされています。

少し遊んだ。式を含むテストファイルがたくさんあります。それはラムダ、安全でないコンテキストをサポートしています...あなたが自然に期待しているように。これはC#ファイルを解析し、抽象構文木を渡します。あなたはそれで何でもできます。

3

thisthisのようなものをお探しですか?

C# ANLTR grammarもご参照ください。

+1

リンクされた文法はC#3.0ではありません。ラムダはサポートしていません。それは私にとって特に重要です。 –

+2

引数リストを定義するだけで済むので、文法の既存の構文の観点からlambdaのサポートを追加するのはかなり簡単です。しかし、これはおそらくLL(*)が必要になるでしょう。 '(a **'のようなもので、 'a(a ** b)'あなたが '=>'を打つまで、 'b 'の逆参照の結果)、またはラムダ式'(a ** b)=> 'を返します。私はそれがLL(*)のように見えますが、ANTLR3はオプトインLL(*)をサポートしているので問題ありません –

+0

@Pavel:それだけではありませんジェネリックスをサポートしていません。 –

3

COCO/Rを見てください。C# 3.0の言語仕様を持っているようです。

12

C# Language Specificationをご覧ください。文章B.文法に文法があります。

+0

もちろん、スペックには文法が含まれていますが、* Word文書*の文法は文書全体に散らばっています。 –

+8

全体に散在しているわけではありませんが、最後には一箇所にすべてのものが付いています。 dパーサジェネレータで動作させるためにいくつかの変更を加えます。 –

+1

Eric:ああ、その部分に気付かなかった。指摘してくれてありがとう。 –

関連する問題