2007-11-06

编译器——课程练习(转载)

关键字: 编译器,练习
 编译的方法是,在yacc分析文法时生成代码,yacc分析表达式时内部有一个分析栈,文法单元入栈顺序和执行顺序是一样的 比如,2+3*4,这个式子234依次入栈,然后3*4规约,再和2规约,这正是这个式子执行时的顺序 因此可以边分析文法别生成代码,代码使用“双栈”结构,一个用于运算表达式,另一个就是存放局部变量,正常用途 实际上就在一个栈中就可以实现,因为一个函数局部变量的大小是可以确定的 所以,EBP作为栈的基址用于索引,而ESP指向栈顶,用于运算表达式,栈区布局如下 operand operand .... var(-8) var(-4) ebp ...