flex と bison を使用して単純なコンパイラを実装しようとしていますが、後置表記で行き詰まりました。(コンパイラは C++ コンパイラのように動作する必要があります)
問題は次のとおりです。次のコードを考えます。
int x = 0;
int y = x++ || x++ ; //y=1 , x = 2 this is understandable
int z = x++ + x++ ; // z = 0 , x=2
次の文法により、最初の行は問題ありません。
expression = expression || expression; // x=0
expression = 0 || expression // x= 1
expression = 0 || 1 //x=2
expression = 1 // x=2
y = 1
ただし、なぜz=0なのかわかりません。
私のバイソン文法が「変数」++を見ると、最初に変数値を返し、それから1だけインクリメントします.C++の仕組みだと思っていましたが、「z」変数では機能しません。
このケースを解決する方法について何かアドバイスはありますか?