构建自己的编译器(八)汇编器之二

 

现在大致明白了是怎么工作的了,它根据前向算的,获取出一个token之后就能判断它到底属于哪一个句型,对于C语言的确是如此,但是对于我这个语言来说,emmm,貌似也差不多,它维护着一个变量表,我完全可以用map实现,然后对于变量定义,真的不难。那么汇编器实际上也不用做,其也是解析成汇编语言然后放入虚拟机的,我可以更简单。

例如变量定义,用map做,而它说的函数调用,现在还没有看,但是它也是要编译成一段汇编然后存入代码段的吧,如果是这样的话,你怎么着也必须存着一个数据结构,树结构是非常好的选择,有没错,树结构就是用来解决赋值语句的。

我们知道,一个函数,它是在结束符之后的代码段,有一个ip指针,从头到尾的指,函数定义与变量定义一样,都需要一个表,编写汇编代码的,就是将变量压入堆栈,然后跳转就行,因此函数必须定义在前面,看看语句,对于语句来说,他区分if,while之类的,就是将其用goto语句转化,这个就是汇编码+ip的好处,你没办法用语法树表示出来,实际上,语法树是用来解析表达式的,那么你怎么做呢?能否用C++特殊的方式来简化呢?

所谓语句,实际上就是表达式+;也就是对于一个语句,都把它当成一个表达式来解析,有的时候它没有运算符,有的时候它有一个等于运算符,有的时候运算符很多,我们还是要给它断句,表达式的关键就是逆波兰表达式的使用。

。。。说实话,看不懂,现在就先用yacc+lex实现吧。。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值