http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2883
構文解析とは何だったのか。
解法
- 例として
[+c[+a[^bd]]]
をO[c][O[a][X[b][d]]]
に変換します。 - O、A、Xはそれぞれ2引数を取りor、and、xorするProcで、カリー化されています。
- 変換された文字列は正しいプログラムなので、evalでバッチリです^^
Python
- Pythonはfunctools.partialはありますが演算子の形でカリー化することができないので、自前で関数をネストしてカリー化を行います。
- なおPythonはRubyのProcで必要な特別扱いが必要ないので、括弧は丸括弧を使います。
- (ところで答案内のtranslateのインポート方法に癖がありますが、Py2/3対応にするにはやむを得ないものです。)