@@ -29,50 +29,49 @@ Programs are represented internally using a series of increasingly lower-level d
29291. **Abstract Syntax Tree (AST)**:
3030 ```haskell
3131 data Program = Program Function
32- data Function = Function
33- { name :: Text
34- , body :: Statement
35- }
32+ data Function = Function Text Statement
3633 data Statement = Return Expr
3734 data Expr
38- = Constant { value :: Int }
39- | Unary { operator :: UnaryOp, operand :: Expr }
35+ = Constant Int
36+ | Unary UnaryOp Expr
37+ | Binary BinaryOp Expr Expr
4038 data UnaryOp = Complement | Negate
39+ data BinaryOp = Add | Subtract | Multiply | Divide | Remainder
4140 ```
4241
43422 . ** TACKY IR** :
4443 ``` haskell
4544 data Program = Program Function
46- data Function = Function
47- { name :: Text
48- , body :: [Instruction ]
49- }
45+ data Function = Function Text [Instruction ]
5046 data Instruction
51- = Return { value :: Val }
52- | Unary { operator :: UnaryOp , src :: Val , dst :: Val }
47+ = Return Val
48+ | Unary UnaryOp Val Val
49+ | Binary BinaryOp Val Val Val
5350 data Val = Constant Int | Var Text
5451 data UnaryOp = Complement | Negate
52+ data BinaryOp = Add | Subtract | Multiply | Divide | Remainder
5553 ```
5654
57553 . ** Assembly AST **:
5856 ```haskell
5957 data Program = Program Function
60- data Function = Function
61- { name :: Text
62- , instructions :: [Instruction ]
63- }
58+ data Function = Function Text [Instruction ]
6459 data Instruction
65- = Mov { src :: Operand , dst :: Operand }
66- | Unary { operator :: UnaryOp , operand :: Operand }
67- | AllocateStack { bytes :: Int }
60+ = Mov Operand Operand
61+ | Unary UnaryOp Operand
62+ | Binary BinaryOp Operand Operand
63+ | Idiv Operand
64+ | Cdq
65+ | AllocateStack Int
6866 | Ret
6967 data Operand
7068 = Imm Int
7169 | Register Reg
7270 | Pseudo Text
7371 | Stack Int
7472 data UnaryOp = Neg | Not
75- data Reg = Ax | R10
73+ data BinaryOp = Add | Sub | Mult
74+ data Reg = Ax | DX | R10 | R11
7675 ```
7776
7877
@@ -220,7 +219,7 @@ The compiler provides detailed error reporting for:
220219### The Basics
221220- [x] A minimal compiler
222221- [x] Unary operators
223- - [ ] Binary operators
222+ - [x ] Binary operators
224223- [ ] Logical and relational operators
225224- [ ] Local variables
226225- [ ] if statements and conditional expressions
0 commit comments