まず、セマンティック ルールと抽象構文木ルールは同じですか。
さて、言語仕様があり、CFG がある場合、抽象構文ツリー規則を構築するにはどうすればよいでしょうか。どんなソースでも大歓迎です。ありがとう。
まず、セマンティック ルールと抽象構文木ルールは同じですか。
さて、言語仕様があり、CFG がある場合、抽象構文ツリー規則を構築するにはどうすればよいでしょうか。どんなソースでも大歓迎です。ありがとう。
「抽象構文ツリー」ルール (これは奇妙な用語です) は、解析が進むにつれて抽象構文の構築を形成するルールとして解釈される場合があります。これらは通常、非終端記号 T の文法規則で、T の補助句を解析することによって生成される抽象構文ツリーのコンストラクタとして記述されます。
T = '(' A ';' B ')' ;
は文法規則であり、T の AST コンストラクターは次のようになります。
T(A,B)
A および B サブパース用に構築された AST である子を持つ T ノードの構築を意味します。
セマンティック ルールは、単なる構文を超えて、プログラムが正当であるために満たさなければならない制約です。したがって、(「規則」から) 抽象構文木を構築できます。そうすることは、プログラムが構文的に正しいことを示すだけです。しかし、抽象構文は、意味的に単に無意味なことを言うことができます。
"declare s as function; ... s=7; ..."
一般的にこれをチェックする唯一の方法は、抽象構文ツリーを調べて事実をローカルに収集することです (たとえば、「s は関数です」は宣言ステートメントから抽出された事実です。「s は整数に割り当てられています」は代入から収集されます)。 )、それらの事実が一致し、互換性がないことが示されるまで伝播します。
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
これは、あいまいな文法を扱う問題も浮き彫りにします。