《编译原理》实验报告_第1页
《编译原理》实验报告_第2页
《编译原理》实验报告_第3页
《编译原理》实验报告_第4页
《编译原理》实验报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编译原理编译原理 实验报告实验报告 专业 计算机科学与技术 班级 学号 姓名 指导老师 时间 1 实验一实验一 无符号数的词法分析无符号数的词法分析 一 实验目的 1 培养学生初步掌握编译原理的实验技能 2 验证所学理论 巩固所学知识并加深理解 3 对学生进行实验研究的基本训练 二 实验内容 掌握词法分析的基本思想 并用高级语言编写无符号数的词法分析程序 三 实验要求 从键盘上输入一字符串 包括字母 数字等 最后以 结束 编写程序识别出其中的无 符号数 无符号数文法规则可定义如下 E E 0 1 2 8 9 读无符号数的程序流程图见下图 2 开 始 0 w p j 1 e 出 错 数字否 数值 d w 10 d w 取下一字符 数字否 是 否 是 E 否 退一字符 整形 CJ1 取下一字符 数字否 dw 10 d w j 1 j 取下一字 符符 数字否 是 E 否 取下一字 符 是 否 是 否 数字否 数值 d p 10 d p 取下一字 符 数字否 退一字符 实型 CJ1 w 10 d w j 1 j2 出 口 取下一字 符符 出 错 出 错 N Y Y Y Y N N N Y Y Y Y N N Y Y Y Y Y Y N Y Y N N Y Y N Y Y 1 e Y Y Y Y NY Y Y Y N N 3 三 实验代码 include iostream h include define N 200 int main void char b do int w 0 p 0 j 0 e 1 int i n int d char a N cout a n strlen a for i 0 i n i cout a i if a 0 9 cout 您输入的数据不正确 endl else for i 0 i 0 w w 10 d else if a i if a i 1 9 cout 数据有错 endl else for i i 1 i 0 w 10 w d j j 1 else 4 if a i E e if a i 1 e 1 if a i 2 9 cout 数据有错 endl else for i i 1 i 0 p p 10 d else if a i 1 if a i 1 9 cout 数据有错 endl else for i i 1 i 0 p p 10 d else if a i 1 9 cout 数据有错 endl else for i i 1 i 0 p p 10 d 5 else if a i E e if a i 1 if a i 2 9 cout 数据有错 endl else for i i 1 i 0 p p 10 d else if a i 1 if a i 1 9 cout 数据有错 endl else for i i 1 i 0 p p 10 d else if a i 1 9 6 cout 数据有错 endl else for i i 1 i 0 p p 10 d cout 经运行 数据的输出为 w E e p j endl cout b cout endl while b y Y 五 实验结果 六 实验心得 通过实验我基本掌握了词法分析应该注意的问题 能够编写一些简单的词法分析程序 初步了解了做编译实验应该注意的问题 对自己所学的知识有了一定的巩固 7 实验二实验二 逆波兰式生成程序逆波兰式生成程序 一 试验课程的性质 目的和任务 1 培养学生初步掌握编译原理试验的技能 2 验证所学理论 巩固所学知识并加深理解 3 对学生进行试验研究的基本训练 二 内容 掌握词法分析的基本思想 并用高级语言编写逆波兰式生成程序 要求 利用波兰式生成算法编写程序 将从键盘上输入的算法表达式转化成逆波兰式 如上表所示的优先关系矩阵表示了 等七种运算符之间的相互优先 关系 三种符号分别代表大于 小于 等于三种优先关系 左边的 与右边的 之 间没有优先关系存在 所以表中为空白 逆波兰表达式生成算法的关键在于比较当前运算符与栈顶运算符的优先关系 若当前 运算符优先级高于栈顶运算符 则当前运算符入栈 若当前运算符的优先级低于栈顶 运算符 则栈顶运算符退栈 右 左 三 实验源程序代码 逆波兰式 cpp 定义控制台应用程序的入口点 include include define max 100 char ex max 存储后缀表达式 void trans 将算术表达式转化为后缀表达式 char str max 存储原算术表达式的值 char stack max 作为栈使用 char ch int sum i j t top 0 printf n printf 输入一个求值表达式 以 号结束 n printf n printf 算术表达式 i 0 获取输入表达式 以 号结束 do i scanf c while str i 关 系 左 8 sum i t 1 i 1 ch str i i while ch switch ch case top stack top ch break case while stack top ex t stack top top t top break case case while top 0top t top stack top ch break case case while stack top stack top ex t stack top top t top stack top ch break case break default while ch 0 t ch str i i i ex t t ch str i i while top 0 ex t stack top t top ex t 9 printf n t原来的表达式 for j 1 j sum j printf c str j printf n t后缀表达式 ex for j 1 j 0 字符到数字的转化 ch ex t t top stack top d 10 ch ex t t printf n t计算结果 g n stack top void main whi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论