宣言型ミニ言語の作成とかなんとか

IBM からのお知らせ : 申し訳ございません。該当するURLのページが見つかりませんでした。
DSL云々はなるほどなーという感じだけど、Pythonの変な書き方も面白い。
こんなコードを書いて、

# magic_lex.py
import sys
import types

try: raise RuntimeError
except RuntimeError:
    e,b,t = sys.exc_info()
    caller_dict = t.tb_frame.f_back.f_globals
def lex():
    for t in caller_dict['tokens']:
        t_obj = caller_dict['t_'+t]
        if type(t_obj) is types.FunctionType:
            print t, '=', t_obj.__doc__
        else:
            print t, '=', t_obj

実行するとこんなふうになる。

In [1]: import magic_lex

In [2]: t_FOO = 'global var foo'

In [3]: t_BAR = 'bar too'

In [4]: tokens = ['FOO','BAR']

In [5]: copy_PLY.lex()
FOO = global var foo
BAR = bar too

In [6]: def t_f1():
   ...:     'docstring is here!'
   ...:     pass
   ...: 

In [7]: tokens.append('f1')

In [8]: copy_PLY.lex()
FOO = global var foo
BAR = bar too
f1 = docstring is here!
sys.exc_info()

ってなにかと思ったら、例外発生時の情報を取得できるのね。で、スタックトレース用に渡されるシンボルテーブルも取得できると。
なので、magic_ply.pyを読み込むタイミングに依存しちゃうけど、アプリ起動時に必ず呼んでおけば、読み込み時にわざと例外を発生させて、起動時のローカルシンボルテーブル、つまりグローバルシンボルテーブル(((あー、違うな。シンボルテーブルのスコープはモジュールローカルみたい?だからグローバルに云々はならないのか)))が取得できるのか。
なるほどねーって言う感じ。すぐどうこうしようとか思いつけないけど、いつか肥やしになればいいな。
2003年の記事だけど今のPythonだと扱いが違ったりしないのかな。