ボトムアップパーサーを使用して、たとえば入力文字列1 + 2 * 3
を「下」から「上」に移動する方法を理解するのに問題があります。
これが私が使用している文法です(Crafting aCompilerで見つかったものなので正しいと思います)
E = E plus T
| T;
T = T times integer
| integer;
これは私の逆の派生です:
int(1)
T(1)
E(1)
E(1) plus int(2)
E(1) plus T(2)
E(1) plus E(2)
E(1) plus E(2) times int(3)
E(1) plus E(2) times E(3) <-- can't do anything here
問題は、入力として整数を取得するたびに、整数が自動的に「変換」されることE
です。
私は与えられた文法が正しいことをかなり確信しています。また、いくつかの入力文字列(私が作成したPretty Printerの訪問者を利用)を使用してsableccで試してみましたが、すべて正しい結果が得られます。
そうすれば、問題は文法そのものではなく、自分にあることがわかります。では、私は何を間違っているのでしょうか。
ありがとう!