命令 def の処理でバグが・・・
def proc x: statements: end
これで x がグローバル変数になってしまうというもの。
def func(x): statements: end
では発生しません。なんでかなーと探ってったら
1. 識別子の解決を yylex() 側でやってて、
2. 名前空間の切り分け(global/local)は文法側から yylex に指示してる
のがダメということが判明。
関数名/命令名を reduce した時に、yylex に対して「次からローカル変数な!」と指示してるのだけど、yacc は LALR(1) 法なので、常に token を一つ先読みします。
1そうだね プレイ済み