「属性文法」の版間の差分

削除された内容 追加された内容
XYZ-0990 (会話 | 投稿記録)
編集の要約なし
編集の要約なし
5行目:
いくつかの手法では、合成属性は意味情報を構文解析木の上に渡すのに使われ、継承属性は逆に下に渡すのに使われる。例えば、言語変換ツールを作成する場合、属性文法は構文要素に意味(値)を設定するのに使われる。また、文法(構文規則だけでは明示的に示されない言語の規則)に従って意味論的検証を行うことも可能である。
 
属性文法を応用している、最も広まっているツールは[[yacc]](及び[[Bison]]などの互換ツール)である。yaccはLALR(1)のパーサを構文規則群から生成できる[[パーサジェネレータ]]だが、各規則に付けられる「セマンティックアクション」と呼ばれているコード片は、直接パーサのC言語のコード中に展開されて埋め込まれるというプリミティブな実現法ではあるが、子ノードの値を受け取って合成し(例えば、子ノードを葉とする枝のデータ構造を作り)、左辺の非終端記号の値として設定する、といったことができるという、属性を扱えるツールとなっている。一般には(具象)構文木を構築することが多いが、簡単な言語とターゲットであれば、ネイティブコードあるいは[[中間言語]]のコードをそこで生成することも不可能でもない。
属性文法は構文木を変換して特定マシン向けのコードを直接生成することもできる(あるいは[[中間言語]]を生成する)。
 
 
== 各種属性文法 ==