
编译原理
文章平均质量分 74
Shawon
什么都懂一点,但是不精
展开
-
完整cmm解释器构造实践(三):语法分析
完整cmm解释器构造实践(三):语法分析语法树节点我的语法分析器不仅会判断cmm代码的语法是否正确, 同时会存储分析过程中得到的信息, 完成语法树的构建. 为什么要有语法树呢, 其实还是为了计算机方便做进一步的处理才用的, 语法树里面存储了从代码里面提取的信息, 我们生成语法树之后再通过遍历语法树来得到中间代码. 当然直接遍历语法树并解释执行也是可以的, 我们老师非得让我们有中间原创 2015-02-07 17:36:05 · 7531 阅读 · 3 评论 -
完整cmm解释器构造实践(五):解释执行与GUI
解释执行接下来要做的事情就是解释执行, 我们只需要将中间代码一条一条执行下来就行. 我们可以模仿CPU的执行方式, 使用一个叫pc的变量存储下一条需要执行的指令的序号. 每次执行一条执行就将pc+1, 当然, 如果是跳转指令要求跳转, 就将值赋给pc, 而不是加1. 中间代码的意思可以自己理解, 根据代码很容易完成. 上一次忘记讲了, 在生成代码的时候, 由于TreeNode的存储结构, 导致表原创 2015-02-17 23:13:33 · 3306 阅读 · 1 评论 -
完整cmm解释器构造实践(四):语义分析与代码生成
语义分析语法分析只是分析了代码在语法上是不是合法的, 但是代码仍然有可能存在问题, 比如一些需要上下文才能分析的错误, 语法分析就不能分析出来. 比如下面的代码a = 10;从语法上来看, 这是一句合法的赋值语句. 但是从语义上看, 我们并不知道a有没有被声明为变量, 类型是否和10匹配. 这一次我们将介绍语义分析.分析内容不同的人做语义分析, 分析的内容都有不同, 比如有些人会把数组越界作为分析的原创 2015-02-17 21:54:30 · 5256 阅读 · 1 评论 -
完整cmm解释器构造实践(一):搭建环境
事先声明:本教程弱化编译理论,侧重实践,如果想详细了解编译原理,务必自己看书!从一个编译器的角度来看,我这个解释器做的实际上功能不强,也就是说如果想增加函数等的功能,可能需要比较多的思考和代码,但是对于cmm解释器的功能来说是绝对够用了。原创 2015-01-23 16:05:31 · 4238 阅读 · 1 评论 -
完整cmm解释器构造实践(二):词法分析
cmm是c的一个子集,保留字只有如下几个if else while read write int real特殊符号有如下几个+ - * / = ( ) ; { } [ ] /* */标识符:由数字,字母或下划线组成的字符串,且不能使关键字,第一个字母不能是数字如果了解c很容易明白上面的是什么意思,也会明白cmm其实有的东西并不多,所以做cmm解释器相对来说比较简单。原创 2015-01-23 18:22:24 · 5689 阅读 · 1 评论