上記の電卓。言語としては LL(1) のようだ。しかし、これを私の直感的な bnf にしてしまうと、うまく LL(1) でアクセプトできるように書けない、、、
E ::= E + T | T
T ::= T * F | F
F ::= ( E ) | number
見たいになってしまう。あるいは、言語プロセッサという本の例にあるように
cond ::= expr "+" expr | expr "*" expr
とか。これを自力で考えて LL(1) でアクセプトできるようにしていくのはかなりしんどいので自動化してしまいたい。なんか大学のときに習ったような、、、