习题及解答:习题及解答:第一章1
什么是编译程序
什么是解释程序
1、编译程序:是一种翻译程序,它特指把某种高级程序设计语言翻译成具体计算机上的低级程序设计语言
2、解释程序:解释程序(interpreter)也是一种翻译程序,将某高级语翻译成具体计算机上的低级程序设计语言
两者区别:(1)前者有目标程序而后者无目标程序;(2)前者运行效率高而后者便于人机对话2、叙述编译程序的逻辑结构和实现机制•根据语言和环境的不同,编译程序实现时是把图中的各阶段划分成若干遍;典型的情况是两遍的编译程序:•第一遍:词法分析、语法分析和语义分析
即前端完成分析,一般与机器无关
•第二遍:目标代码生成和目标代码优化
即后端完成综合,一般与机器有关
每遍中的各阶段的工作是穿插进行的,•例如:•使语法分析器处于核心位置,而把词法分析器作为子程序;当语法分析需要下一个单词时,就调用词法分析器,识别一个单词
词法分析语法分析语义分析代码生成源语言目标语言错误处理符号表管理优化处理第二章第二章1、P36:8;i+i*i最左E->E+T->T+T->F+T->i+T->i+T*F->i+F*F->i+i*F->i+i*ii+i*i最右E->E+T->E+T*F->E+T*i->E+F*i->E+i*i->T+i*i->F+i*i->i+i*ii*(i+i)最左E->T->T*F->F*F->i*F->i*(E)->i*(E+T)->i*(T+T)->i*(F+T)->i*(i+T)->i*(i+F)->i*(i+i)i*(i+i)最右E->T->T*F->T*(E)->T*(E+T)->T*(E+F)->T*(E+i)->T*(T+i)->T*(F+i)->T*(i+i)->F*(i+i)->i*(i+i)2、试构造下述语言L的文法:L={ambn|m≥0,n≥1};S->ABA