Attribute grammar

論文で出てきた言葉をそのまま写しているだけだから,英語のタイトルばっかり続くけど,
attribute grammar というものが論文でしょっちゅうでてくるからメモ.

http://www.cs.uiowa.edu/~hzhang/c123/Lecture3.pdf

ようするに,構文解析結果に意味づけを付加するための仕組みらしい.

S -> A B とあったら, 下位の A と B から結果を作るだけでなく,
A と B を解析する際に, 上位 Sの内容 を下位に渡すことができるらしい.
具体例をあげると,

class Foo {
  int bar;
  String baz;
}

みたいなプログラムで,フィールドを解析している最中に,そのフィールドはどの
クラスに属しているかを知りたいときに便利.

 class := 'class' name:SYMBOL '{'  (Field)* '}'
   value(class) = new Class()
   name(value(class)) = name
   class(Field) = value(class)
 Field := type name:SYMBOL ';'
   value(fieldDecl)= new Field ()
   name(value(fieldDecl)) = name
   type(value(fieldDecl)) = type
   owner(value(fieldDecl)) = class(Field);

最後の行で class(Field) とあるのが,このフィールド宣言の
外側の class { ... } を指していることになる.