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

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

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

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

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

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

发布了163 篇原创文章 · 获赞 20 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/HeroIsUseless/article/details/104682529