大事なのはLookup力

Sublinear-space evaluation algorithms for attribute grammars という論文を見つける.1987年もの.attribute grammar というのは死に絶えた技術なんだろうか,それはさておき

ROOT -> exp
  exp.env = φ
exp -> exp + exp
  exp1.val = exp2.val + exp3.val
  exp2 .env = exp1 .env
  exp3.env = exp1 .env
exp -> exp - exp
  exp1 .val = exp2 .val - exp3 .val
  exp2 .env = exp1 .env
  exp3 .env = exp1 .env
exp -> let id = exp in exp ni
  exp1 .val = exp3 .val
  exp2 .env = exp1 .env
  exp3 .env = exp1 .env U ( (id, exp2 .val) )
exp -> id
  exp.val= LookUp(id, exp.env)
exp -> integer
  exp.val = ValueOf(integer)

これは典型的なattribute grammarの例としてこの論文に載っている.この中にある LookUp という関数はid と 環境(スコープ)をもとに値を探してくるものだが,その実装はAttribute Grammarでは規定されていない,というか書きにくい?このへんにAttribute Grammarの限界があるのかもしれない.