レクサー、構文チェッカー、およびセマンティクスを取得できたので、中間コードの生成に移りたいと思います。問題は、論理式の処理方法がわからないことです。E.true と E.false について読んだことがあります。この例はどこにでもありますが、私はそれを理解していませんでした。
たとえば、次のコードがある場合
if x>y and x<y or x == 1 then
//super duper code here
x = x+1
else
//super duper wow code here
y = y+1
endif
結果はこのようなものでなければなりません
1: > x y 3
2: jmp _ _ 9
3: < x y 7
4: jmp _ _ 5
5: == x 1 _
6: jmp _ _ 9
7: + 1 x $1
8: = $1 _ x
9: + 1 y $2
10: = $2 _ y
ただし、実際に if ステートメントの解析を完了するまで、ジャンプのラベルはわかりません。
そのため、クワッドを生成してからバックパッチする必要があります。この投稿の文法でどうすればできますか?
私は本当に混乱しているので、誰かがそれがどうなるか説明できますか.