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