Skip to content

Instantly share code, notes, and snippets.

@obscuren
Created July 11, 2015 23:25
Show Gist options
  • Save obscuren/18955f2a718c87516973 to your computer and use it in GitHub Desktop.
Save obscuren/18955f2a718c87516973 to your computer and use it in GitHub Desktop.
go tool yacc -o ast/cll.go ast/cll.y
conflicts: 1 shift/reduce
go install ./cmd/cllc
cllc --debug ./examples/basic.cll
AST
0 *ast.BlockStmt{
1 . List: []Stmt (len = 5) {
2 . . 0: *ast.GenDecl{
3 . . . Decl: *ast.DeclObj{
4 . . . . Id: a
5 . . . }
6 . . . Value: *ast.LiteralNode{
7 . . . . Type: NUM
8 . . . . Value: "10"
9 . . . }
10 . . }
11 . . 1: *ast.GenDecl{
12 . . . Decl: *ast.DeclObj{
13 . . . . Id: b
14 . . . }
15 . . . Value: *ast.Ident{
16 . . . . Name: a
17 . . . }
18 . . }
19 . . 2: *ast.AssignExpr{
20 . . . Lhs: *ast.Ident{
21 . . . . Name: b
22 . . . }
23 . . . Rhs: *ast.Ident{
24 . . . . Name: a
25 . . . }
26 . . }
27 . . 3: *ast.IfExpr{
28 . . . Cond: *ast.BinaryExpr{
29 . . . . X: *ast.Ident{
30 . . . . . Name: a
31 . . . . }
32 . . . . Op: ==
33 . . . . Y: *ast.Ident{
34 . . . . . Name: b
35 . . . . }
36 . . . }
37 . . . Body: *ast.BlockStmt{
38 . . . . List: []Stmt (len = 1) {
39 . . . . . 0: *ast.GenDecl{
40 . . . . . . Decl: *ast.DeclObj{
41 . . . . . . . Id: c
42 . . . . . . }
43 . . . . . . Value: *ast.LiteralNode{
44 . . . . . . . Type: NUM
45 . . . . . . . Value: "10"
46 . . . . . . }
47 . . . . . }
48 . . . . }
49 . . . }
50 . . . Else: *ast.IfExpr{
51 . . . . Cond: *ast.BinaryExpr{
52 . . . . . X: *ast.Ident{
53 . . . . . . Name: b
54 . . . . . }
55 . . . . . Op: ==
56 . . . . . Y: *ast.Ident{
57 . . . . . . Name: c
58 . . . . . }
59 . . . . }
60 . . . . Body: *ast.BlockStmt{
61 . . . . . List: []Stmt (len = 1) {
62 . . . . . . 0: *ast.GenDecl{
63 . . . . . . . Decl: *ast.DeclObj{
64 . . . . . . . . Id: c
65 . . . . . . . }
66 . . . . . . . Value: *ast.LiteralNode{
67 . . . . . . . . Type: NUM
68 . . . . . . . . Value: "20"
69 . . . . . . . }
70 . . . . . . }
71 . . . . . }
72 . . . . }
73 . . . . Else: *ast.BlockStmt{
74 . . . . . List: []Stmt (len = 1) {
75 . . . . . . 0: *ast.GenDecl{
76 . . . . . . . Decl: *ast.DeclObj{
77 . . . . . . . . Id: d
78 . . . . . . . }
79 . . . . . . . Value: *ast.LiteralNode{
80 . . . . . . . . Type: NUM
81 . . . . . . . . Value: "30"
82 . . . . . . . }
83 . . . . . . }
84 . . . . . }
85 . . . . }
86 . . . }
87 . . }
88 . . 4: *ast.AsmExpr{
89 . . . Asm: "PUSH1 10 PUSH1 10 ADD "
90 . . }
91 . }
92 }
93
IR
0 PUSH1 10
1 PUSH1 10
2 ADD
3
600a600a0100
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment