《编译原理基础》实验基于教学内容的一个简单语言的编译实验可选实验语言:Java,C,C++等Tableofcontents1.实验目的2.实验对象语言3.实验任务4.实验考核5.参考方案21.实验目的通过编程实践进一步理解和应用《编译原理基础》课堂所讲授的原理性知识:词法分析、语法分析、语义分析、中间代码生成、目标代码生成等;根据实验任务能够选择恰当的数据结构,使用合适的编程语言进行编程,巩固已学知识并提高分析和解决问题的能力。32.实验对象语言一个简单的面向过程编程语言SPL(SimpleProgrammingLanguage)–类型:整型变量、整型常量;(先声明变量后使用:“类型变量;”)–运算:加法、乘法;–语句:•顺序语句:“statement1;statement2;”•赋值语句:“被赋值变量=整型值;”•条件转移语句:“if(bool_expr)statements;”•循环语句:“while(bool_expr)statements;”–布尔表达式43.实验任务针对使用SPL编写的一个简单源程序,如:main(){inta;intb;intc;intd;if(ca)&&(cb)a=a+b;while(cd)a=d;a=(b+c)*a+d;}–完成词法分析、语法分析、语义分析与中间代码生成、汇编代码生成等任务。–规范命名变量或域、函数或方法。53.实验任务:词法分析接收SPL源程序,如果源程序没有词法错误则输出单词符号流,否则提示出错行号。具体要求:–正确使用文件的相关操作,分离源程序中单词符号。–按《编译原理基础》中的细分法中的5类(关键字、算符、界符(分隔符)、标识符和常量)将单词符号转换为相应编码。–使用合理的数据结构、数据库或文件保存单词符号流和符号表。–如果出现非法单词符号,需要提示所在行号。63.实验任务:语法分析接收词法分析的单词符号流,选择SLR(1)、LALR或LR(1)中的一种方法进行语法分析。如果没有语法错误则输出语法分析动作,否则提示语法错误。具体要求:–列表说明所使用文法(产生式需要有对应的编号)。–列出所用FIRST集和FOLLOW集,全部项目集及编号。–使用JFLAPv8.0beta(,3060KB,需要JRE)做识别活前缀DFA的状态转换图。–给出action子表和goto子表。–输出语法分析动作(语法制导翻译时还要输出中间代码)。73.实验任务:语义分析设计在语法分析时调用的语义子程序,归约时给出相应的语义运作,输出中间代码。如果有语义错误则提示相应的错误,例如哪个变量未声明等。具体要求:–给出正确的翻译方案。–正确使用回填技术。–选择四元式、三元式或间接三元式中的一种作为中间代码输出。83.实验任务:代码生成把语义分析得到的中间代码转化为汇编码并输出。具体要求:–根据中间代码形式确定汇编代码模式。–输出目标码。94.实验考核分组:一人一组程序设计语言:C、C++或Java等实验机时:4*4h提交时间:第4次实验课结束时提交(放在“学号姓名”文件夹下压缩后提交):–源代码(变量和函数等必须注释说明)、相关类库文件和数据库(用到则需提交)、配置说明;–演示录屏视频(简要说明变量或域、函数或方法,程序的运行过程与结果,不超过5分钟,分辨率适中,录屏和语音清晰即可,文件大小控制在10MB内);–实验报告电子版(.doc,体现实验任务具体要求,图表清晰,文字通顺);104.实验考核成绩:–不得抄袭;–实验的完整性、正确性;–代码的规范性;–实验报告的规范性;–演示录屏视频讲解的条理性。114.参考方案demo及存在的问题JFLAP的具体操作演示12