0

プログラミング言語は文法によって定義されます。たとえば、Java は JLS で定義されています。こちらを参照してください。

これは最小限の「圧縮された」文法であり、構成要素が 2 回使用されることはありません。結果は - 私にとっては - MethodDeclaratorRestのような役に立たない文法記述であり、ここでわかるようにMethodOrFieldDeclに追加されます。アプローチ"

MethodOrFieldDecl:
        型識別子 MethodOrFieldRest

MethodOrFieldRest:
        VariableDeclaratorRest
        MethodDeclaratorRest

MethodDeclaratorRest:
        FormalParameters {[]} [QualifiedIdentifierList をスロー] ( MethodBody | ; )

これは一般的には問題ありませんが、タイプMethodDeclarationのすべての必要な情報がリストされている次のような文法が必要です。これを「トップダウンアプローチ」と呼びます。

メソッド宣言:
   [ Javadoc ] { ExtendedModifier }
          [ ]
        ( タイプ | void ) 識別子 (
        [ 仮引数
             { , FormalParameter } ] ) {[ ] }
        [ TypeName { , TypeName } をスローする ] ( ブロック | ; )

「トップダウンの文法アプローチ」を検索して、「最小限の圧縮されたアプローチ」を使用して、Pete Jinks の Web サイトを見つけました

ここで、「トップダウンアプローチ」を使用して、プログラミング言語 C の文法定義を作成したいと思います。

4

2 に答える 2

1

そのフォームのソースがすぐに利用できるかどうかはわかりませんが、BNFバージョンの文法をテキストファイルとして取得し、一連のコピーアンドペースト操作を実行してそのフォームに変換するのはかなり簡単です。
http://www.cs.man.ac.uk/~pjj/bnf/c_syntax.bnfは、C言語の文法の基本的な形式です。

「トップダウンアプローチ」の問題の1つは、有用な拡張レベルを決定する必要があることです。しかし、そのすべての詳細に対して、translation_unitの単一の定義を持つことは本当に有用でしょうか?私は、いくつかのより小さな範囲の拡張が役立つ可能性があることに同意します。たとえば、関数の定義を少なくともステートメントレベルに分割すると、理解に役立つと思います。

一方、BNFは非常に一般的であり、そのフォームを読むことを学ぶことは学ぶ価値のあるスキルです...

お役に立てれば

于 2010-11-11T11:25:50.173 に答える
0

Kernighan と Ritchie 2e による "The C Programming Language" (pub. Prentice-Hall) には (E)BNF 文法が含まれています... オンラインでアクセスできるバージョンもあるかもしれません。

于 2011-04-12T07:39:07.420 に答える