5

まず、セマンティック ルールと抽象構文木ルールは同じですか。

さて、言語仕様があり、CFG がある場合、抽象構文ツリー規則を構築するにはどうすればよいでしょうか。どんなソースでも大歓迎です。ありがとう。

4

2 に答える 2

5

「抽象構文ツリー」ルール (これは奇妙な用語です) は、解析が進むにつれて抽象構文の構築を形成するルールとして解釈される場合があります。これらは通常、非終端記号 T の文法規則で、T の補助句を解析することによって生成される抽象構文ツリーのコンストラクタとして記述されます。

 T = '(' A ';' B ')' ;

は文法規則であり、T の AST コンストラクターは次のようになります。

   T(A,B)

A および B サブパース用に構築された AST である子を持つ T ノードの構築を意味します。

セマンティック ルールは、単なる構文を超えて、プログラムが正当であるために満たさなければならない制約です。したがって、(「規則」から) 抽象構文木を構築できます。そうすることは、プログラムが構文的に正しいことを示すだけです。しかし、抽象構文は、意味的に単に無意味なことを言うことができます。

  "declare s as function; ...  s=7; ..."

一般的にこれをチェックする唯一の方法は、抽象構文ツリーを調べて事実をローカルに収集することです (たとえば、「s は関数です」は宣言ステートメントから抽出された事実です。「s は整数に割り当てられています」は代入から収集されます)。 )、それらの事実が一致し、互換性がないことが示されるまで伝播します。

于 2012-03-06T01:20:31.060 に答える
0

2 番目の質問に答えるために、文法と構文ツリーの概念を結び付け、いくつかの構文解析アルゴリズムを検討する記事を次に示します。

http://www.cs.purdue.edu/homes/xyzhang/spring11/notes/ast.pdf

記事から:

The resulting grammar is called the concrete grammar.  
The corresponding derivation tree is called the parse tree.

具体的な構文ツリーまたは構文解析ツリーは、形式文法に従って文字列の構文構造を表すツリーです。

以下は、文法からの解析ツリーの派生例へのリンクです。

http://www.cs.rochester.edu/~nelson/courses/csc_173/grammars/parsetrees.html

これは、あいまいな文法を扱う問題も浮き彫りにします。

于 2012-03-05T21:09:10.057 に答える