| |
 |
|
 |
 |
|
 |
Tiny 代码生成及“虚拟机”
|
|
|
至此,一个简单的编译器已经做好了,学到了不少,不过真正的编译器才刚刚开始。 有点遗撼的是:在代码生成的过程中,并没有采用回填技术,而是简单地增加标号,然后在tm“虚拟机”中重新根据标号整理顺序 如 if x < 9 then write x end 生成如下: * TINY Compilation to TM Code * File: test.tm * Standard prelude: 0: LD 6,0(0) load maxaddress from location 0 1: ST 0,0(0) clear location 0 2: LD 0,0(5) load id value 3: ST 0,0(6) op: push left 4: LDC 0,9(0) load const 5: LD 1,0(6) op: load left 6: SUB 0,1,0 op < 7: JLT 0,2(7) br if true 8: LDC 0,0(0) false case 9: LDA 7,1(7) unconditional jmp 10: LDC 0,1(0) true case 12: LD 0,0(5) load id value 13: OUT 0,0,0 write ac 11: JEQ 0,3(7) if: jmp to else 14: LDA 7,0(7) jmp to end 15: HALT 0,0,0 在tm“虚拟机”机中会重排成如下所示: 0: LD 6, 0(0) 1: ST 0, 0(0) 2: LD 0, 0(5) 3: ST 0, 0(6) 4: LDC 0, 9(0) 5: LD 1, 0(6) 6: SUB 0,1,0 7: JLT 0, 2(7) 8: LDC 0, 0(0) 9: LDA 7, 1(7) 10: LDC 0, 1(0) 11: JEQ 0, 3(7) 12: LD 0, 0(5) 13: OUT 0,0,0 14: LDA 7, 0(7) 15: HALT 0,0,0 另外,我想说:简单的虚拟机也不过如此,只要敢想,一切都是可能的。
 |
| 文件: | 代码生成及虚拟机tm.rar |
| 大小: | 23KB |
| 下载: | 下载 |
|
|
|
|
发表于: 2008-06-10,修改于: 2008-06-10 00:12,已浏览160次,有评论0条
推荐
投诉
|
|
 |
|
 |
|  |
|
 |
|