TeXの識別子で悩む
TeXってアルファベットと数値との間でトークンが分かれるんだけど(知らない人の為に書いておくか)
\newcommand{\foo}{FOO} [\foo][\foo21] %-> [FOO][FOO21] \newcommand{\baz42}{BAZ} [\baz][\baz42] %-> 42BAZ [][42]
この挙動に忠実にパーサを作るべきかどうか悩ましい。昨日書いたパーサは忠実なんだけど、識別子に数字を使ってはいけないとかモダンな言語では考えにくいのでつまずきどころだよね。
ローカルの名前として\Sを作ったときに\Sigmaにマッチしてしまうのは困るな、ってことでトークンに刻もうと思っていたんだけど、defineの左辺に複数トークン来れるようにすると同じ問題が起きてしまうし、これないようにすると\S1みたいな名前は使えなくなるんだ。うーん。