3

以下は、C# 言語仕様の文法セクションからの抜粋です。

ここに画像の説明を入力

  1. これは特定の形式で書かれていますか?私が見つけた古い C++ ISO の文法セクションを調べたところ、同じ形式に従っているように見えましたが、この文法を記述するためにここで使用されている標準はありますか? 文法を直接貼り付けて、すぐに C# パーサーを動作させることができるツールを作成できるようにしたいのでお願いします。

  2. Microsoft は C# 仕様を無料でリリースしているようですが、C++11 形式はどこにも見つかりません。見るためにこれ買わなきゃいけないの?

4

5 に答える 5

2

これは、Yacc で使用される BNF の変種です。yacc は通常、構文の一部として を持っていますが、それを変更すること自体が非常に重要;な C# や C++ のような言語では物事が単純になります。;ほとんどの BNF バリアントとは異なり、:BNF が頻繁に使用する場所があります=(Van Wijngaarden grammar も参照してください。すぐに、この答えが得られたわずかな知識以上のものを知ることができます)。

ISO には、標準でどの文法を使用する必要があるかについての規則がないため、他の組織は BNF、ABNF、EBNF、Wirth 構文などを使用します。

ISO 規格は、多くの場合、国家規格またはその他の規格として作成され、その後 ISO によって採用されます。異なる標準化団体は異なる文法を使用しているため (IETF は RFC で ABNF を使用し [RFC 5234 で定義されています]、BSI と W3C は EBNF の異なるバリアントを使用するなど)、ISO の文法はしばしばその起源を反映しています。

これはここに当てはまります。Kernigan と Ritchie は、この形式を著書The C Programming Languageで使用しました。ANSI 標準とその後の ISO 標準は文法自体が異なりますが、同じ形式を使用しており、それ以来、他の C ライクな言語で使用されています。

于 2012-08-23T14:45:49.970 に答える
1

C++ 標準は無料では入手できません。webstore.ansi.org で 30 米ドルでコピーを購入できます。ドキュメント番号 14882 を検索し、C++ 標準を探します。

于 2012-08-23T14:14:09.493 に答える
1

各標準は独自のことを行います。しかし、コンパイラの作成者の間では、文法を記述するためのかなり標準的な方法があり、それがここと C++ 標準で見られるものです。

于 2012-08-23T14:10:42.007 に答える
1

これは、ここに表示されているbackus naur 形式の文法のバリエーションです。厳密には標準的な形式ではありませんが、かなり似ています。これは一般に、言語がどのように解析されるかを示す標準的な方法であり、パーサー ジェネレーターへの共通の入力です。

于 2012-08-23T14:12:29.197 に答える
0

文法を記述する一般的な方法は、Backus-Naur Form (BNF)またはExtended Backus-Naur Form (EBNF)を使用することです。C# で簡単に言語を解析したい場合は、C# 用の言語ツールキットであるIronyを見てください。EBNF に非常によく似たものを使用して文法を記述できます。

これらの文法に加えて、構文解析式文法 (PEG)もありますが、BNF や EBNF ほど一般的ではないと思います。

于 2012-08-23T14:18:30.010 に答える