質問

拡張バッカス・ナウア形式: EBNF

私は概念を解析するのが非常に初心者です。EBNF に似た文法を使用する boost::spirit ライブラリの文法を記述するための、読みやすく理解しやすい資料はどこで入手できますか?

現在検討中です EBNF ウィキペディアより。

役に立ちましたか?

解決

ウィキペディアの記事は正確です。アクセスできる方はぜひ読んでみてください ヴィルトのオリジナル記事 EBNFで。

もう 1 つ知っておくべきことは、EBNF はそれを実現するために設計されたということです。 簡単に手書きできる再帰降下パーサー 各構文構造が先頭に識別キーワードを持つ言語の場合。中括弧は次のように変換されます while ループ。角括弧 (オプション) は次のように変換されます。 if, 、および代替案は次のように変換されます。 if-then-else または case 発言。このように言語を設計する余裕がある場合は、パーサーをすぐにノックアウトできます。 そして 適切なエラーメッセージを表示します。

これが少し面倒になる唯一の場所は、さまざまな優先レベルを持つ中置演算子が存在する言語を使用している場合です。そのためにはデイブ・ハンソンの論文が必要です 式のコンパクトな再帰下降解析. 。おそらくプリンストンの技術レポート シリーズには無料版があり、いつでもコードを見ることができます。 Hanson's C フロントエンド.

他のヒント

BNF 自体はシンプルですが、コンパイラ作成者の考え方に慣れる必要があります。必ずしも読みやすいものではありませんが、以下はカリフォルニア大学バークレー校とスタンフォード大学の講義ノートです。

ここのPHPのEBNFパーサーです。

また、正規表現エンジンが実装されているかについて少し学ぶことは役立つかもしれません。試してみてください: RE2する

そうですね、次の 2 つの理由から、Wikipedia が最も簡単な方法だと思います。

  • 記事の中で最も関連性の高い点が記載されています
  • ページの下部に詳細を読むためのリンクがあります

また、以下を読むことをお勧めします 標準BNF その背後にあるアイデアを理解するためだけに。

少なくとも私もいつも Wikipedia から始めますし、ほとんどの場合それが役に立ちます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top