已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计报告课程设计报告 2012 2013 年度第 1 学期 名 称 编译技术课程设计 题 目 L 语言编译器的设计与实现 院 系 计算机系 班 级 学 号 学生姓名 指导教师 设计周数 2 周 成 绩 日期 2012 年 12 月 27 日 1 编译技术编译技术 课程设计课程设计 任任 务务 书书 一 一 目的与要求目的与要求 1 任务 实现一个简单的编译程序 能够对指定程序设计语言进行编译 2 目的 加深对课堂讲授知识的理解 熟练掌握编译程序设计原理及常用的技术 建立编译程序的整体概念 使得学生初步具有研究 设计 编制和调试编译程序的能力 3 要求 熟悉有关定义 概念和实现算法 设计出程序流程框图和数据结构 编写 出完整的源程序 进行静态检查 设计出输入数据 显示输出数据 基本功能完善 方便 易用 操作无误 通过课程设计学会编译程序设计与实现的常用技术 具备初步分析 设 计和开发编译程序的能力 具备分析与检查软件错误 解决和处理实验结果的能力 4 学生要求人数 2 人 1 人负责扫描器和目标代码生成器的设计和实现 另 1 人负 责语法分析器和语法制导翻译程序的设计和实现 二 二 主要内容主要内容 下面是课程设计主要内容的简介 详细内容请见 编译技术课程设计指导书 1 扫描器设计 该扫描器是一个子程序 其输入是源程序字符串 每调用一次输出一个单词符号 为 了避免超前搜索 提高运行效率 简化扫描器的设计 假设程序设计语言中 基本字不能 用作一般标识符 如果基本字 标识符和常数之间没有确定的运算符或界符作间隔 则用 空白作间隔 2 语法分析器设计 以算法优先分析方法为例 设计一个算符优先语法分析程序 算符优先分析属于自下 而上的分析方法 该语法分析程序的输入是终结符号串 即单词符号串 以一个 结尾 如果输入串是句子则输出 YES 否则输出 NO 和错误信息 当然 也可采用预测 分析等方法设计语法分析器 具体方法自定 3 语法制导翻译程序设计 采用语法制导翻译方法 实现算术表达式 赋值语句和基本控制语句等的翻译 本语 法制导翻译程序的输入是终结符号串 即单词符号串 以一个 结尾 如果输入符号 串是句子 则按照其语义进行翻译 输出等价的四元式序列 4 目标代码生成器设计 2 将程序设计语言的中间代码程序翻译为目标代码程序 其输入是四元式序列 输出是 一个汇编代码文件 三 三 进度计划进度计划 序号序号设计内容设计内容完成时间完成时间备注备注 1 任务布置 资料查询 方案制定第一周周一 2 算法设计 程序实现第一周周二至第二周周四 3 撰写报告 软件验收第二周周五 4 四 设计成果要求四 设计成果要求 1 完成规定的课程设计任务 所设计软件功能符合要求 2 完成课程设计报告 要求格式规范 内容具体而翔实 应体现自身所做的工作 注重对设计思路的归纳和对问题解决过程的总结 五 五 考核方式考核方式 1 平时成绩 验收答辩 实验报告 2 五级分制 学生姓名 指导教师 2011 年 12 月 12 日 3 词法分析词法分析 1目目 的的 通过设计调试词法分析程序 实现从源程序中分出各种单词的方法 加深对课堂教学 的理解 提高词法分析方法的实践能力 掌握词法分析器作为子程序以及一遍的处理过程 源程序词法分析程序 符号表文件 token 文件 2任任 务务 1 能对任何 L 语言源程序进行分析 2 采用问答方式输入源程序文件名 然后进行词法分析 3 分割单词并转换成机内表示形式 形成 token 文件 单词序列 符号表文件 4 删除空格等无用符号 5 错误处理 给出的错误信息包括 总的出错个数 每个错误所在行号 错误编号及说明 只处理以下两种错误 其它可不必考虑 1 非法字符 删除 即 不写入 token 文件 2 错误单词 a 包括三种形式 i 数字开头的数字 字母串 如 3a56 ii 实数中出现两个小数点 如 3 14 15 iii 实数的小数部分出现字母 如 5 26B78 b 处理方式 截去后面出错部分 使其成为一个正确单词 即 常数 如 3a56 转换为 3 3 14 15 转换为 3 14 5 26B78 转换为 5 26 3数据结构数据结构 3 1输入输入 L 源程序 为文本文件 3 2输出输出 一个单词序列文件 即 token 文件 和一个符号表文件 并输出错误信息 1 token 文件结构文件结构 typedef struct token 4 int label 单词序号 char name 30 单词本身 int code 单词的机内码 int addr 地址 单词为保留字时为 1 为标识符或常数时为大于 0 的数值 即在符 号表中的入口地址 token 单词的机内码表示 单词单词编码编码单词单词编码编码单词单词编码编码单词单词编码编码 and1or11 21 31 begin2program12 22 32 bool3real13 23 33 do4then14 24 34 else5true15 25 35 end6var16 26 36 false7while17 27 37 if8标识符18 28 integer9整数19 29 not10实数20 30 2 符号表文件结构符号表文件结构 符号表用来存放 L 语言源程序中出现的标识符和常数 文件结构如下 typedef struct symble int number 序号 int type 类型 char name 30 名字 symble 5 4词法分析程序流程图词法分析程序流程图 1 token 表生成的主要流程如下 vt syn 为 19 时往 symp txt 中存入整数 为 20symp txt 中存入实数 小数 为 1 时显示错误 其他值时 symp txt 中存入字符串 包括关键字与标识符 2 symple 表的生成 由于他是与 token 表同时生成的 基本流程大致相同 因此用文字叙述与 上面流程的差异 A 以字母开头时 为关键字时 st type 等于 2 为标识符时为 18 B 以数字开头时 小数时 st type 为 20 整数时为 19 C 为 时 st type 为 0 D 其他情况均为 1 当 st type 为 18 时往 symple txt 中存入标识符 为 19 时往 symple txt 中存入整数 为 20 时 往 symple txt 中存入实数 小数 5 实验算法思想 包含主程序的示意图 实验算法思想 包含主程序的示意图 1 主程序的示意图如下图所示 输入字符串 6 否返回 是 6 实验结果 实验结果 调用 scanner 函数进行分析 判断是什么类型 分类型写入 token 文件中 symp txt 是标志符 整数 实数则分析类型后写入 symple 文件中 symple txt 是否结束 结束 7 目标代码生成目标代码生成 1目目 的的 实践目标代码的生成方法 2任任 务务 编写一个目标代码生成程序 将 L 语言的中间代码程序翻译为目标代码程序 汇编语 言程序 如下图 目标代码生成程序目标代码程序 符号表文件 四元式序列文件 目标机说明 目标机说明 以 8086 微处理机为目标机 生成 8086 汇编指令 8086 是 16 位微处理器 数据总线为 16 位 地址总线为 20 位 可寻址 1MB 的空 间 8086 有 8 个 16 位通用寄存器和一个标志寄存器 这 8 个寄存器 AX DI 都可以 用作累加器 其中 BX 和 BP 基地址指针 寄存器通常用于指定数据区的基址 称为基址寄存器 SI 和 DI 大多用来表示相对基址的偏移量 称为变址寄存器 8086 的地址空间是分段的 每段 64KB 简单起见 本实验不涉及段间寻址 数据与代码都放在一个段内 实验中选用以下寻址功能 圆括号表示取其内容 寄存器寻址 MOV AX BX 功能 AX BX 直接寻址 MOV AX DATA 功能 AX DATA 常用指令 传送指令 r 表示寄存器 m 表示内存单元 MOV r r m r r m r m 表示 r 或 m MOV r m r r m r MOV r m imm r m imm imm 是立即数 运算指令 包括 ADD SUB MUL DIV CMP 等 下面以 ADD 为例说明 其用法 ADD r r m r r r m ADD r m r imm r m r m r 或 imm 8 CMP 只影响标志位 不影响操作数的大小 转移指令 Z 是标志位 S 是符号位 O 是溢出位 指令码指令码意义意义条件条件 JZ JE结果为 0 或相等则转Z 1 A B JNZ JNE 结果不为 0 或不相等则 转 Z 0 A B JNL JGE大于等于转 S O 0 A B JL JNGE小于转 S O 1 A B JMP无条件转移 3 数据结构数据结构 3 1 输入输入 四元式序列文件和符号表文件 其结构与语法 语义分析程序的输出一致 3 2 输出输出 一个汇编代码文件 并无特殊数据结构 4 程序参考结构 程序参考结构 将中间代码程序 四元式序列 翻译成汇编程序可按以下步骤进行 1 划分基本块 2 对每个基本块生成基本块的目标代码 目标代码程序 符号表文件 四元式序列文件 划分 基本块 生成目 标代码 为了划分和记录基本块 对四元式结构作以下修改 typedef struct GenStruct int label char op 4 int code int addr1 int addr2 int result int out port 记录该四元式是否为一个基本块的入口 是则为 1 否则为 0 GenStruct 9 5 寄存器分配策略寄存器分配策略 主要采用四个通用寄存器 ax bx cx dx 其中 ax cx 的作用固定 ax 用作累加器 cx 用作循环计数器 在四元式翻译时直接应用不再分配 所以分配策略只用于 bx 与 dx 具体算法如下 if bx 未被使用或已分配给了变量 a bx 分配给变量 a else if dx 未被使用或已分配给了变量 a dx 分配给变量 a else 其它策略 注 注 a 为变量在符号表的入口地址 6 代码生成器的模块结构及说明代码生成器的模块结构及说明 ProduceInitTargetSortDGA Target 汇编指令 实现时 整个程序的四元式表和目标代码文件说明为全局数据 调用划分基本块模块 之后 返回新的四元式序列 带入口标记 先根据基本块的入口 再查找下一入口 两个 入口之间就是该基本块 7 程序思想流程程序思想流程 if strcmp fourCom i opera 0 printf MOV AX 1s n fourCom i arg1 printf MOV 5s Ax n fourCom i result printf n if strcmp fourCom i opera 0 printf MOV AX 1s n fourCom i arg1 printf ADD Ax 1s n fourCom i arg2 printf MOV 1s Ax n fourCom i result 10 printf n if strcmp fourCom i opera 0 printf MOV AX 1s n fourCom i arg1 printf SUB Ax 1s n fourCom i arg2 printf MOV 1s Ax n fourCom i result printf n if strcmp fourCom i opera 0 printf MOV AL 1s n fourCom i arg1 printf MUL 1s n fourCom i arg2 printf MOV 1s Ax n fourCom i result printf n if strcmp fourCom i opera 0 printf MOV AX 1s n fourCom i arg1 printf DIV 1s n fourCom i arg2 printf MOV 1s AL n fourCom i result printf n if strcmp fourCom i arg2 goto 0 printf JNC 1s n fourCom i result n printf n if strcmp fourCom i arg2 goto 0 printf n 通过语义生成的四元式得到一系列的 fourCom i 结构体组 用该结构体里的 opera 与算 符及界符比较以及 arg1 和 arg2 与 goto 比较得出相应的汇编指令代码 由于涉及到四元式 的生成 该程序将语义分析的大部分放了进来导致程序较为冗长 但是生成目标代码的主 要部分比较简单 同时由于课本上的寄存器分配部分较为艰深 为了简便处理只用了一个 寄存器 8 实验结果实验结果 11 实验总结实验总结 本次实验我负责词法分析和目标代码生成部分 总体感觉此次课程设计较难 而且由 于开始时对实验难度认识不足以及考试复习的原因导致前面两三天的时间没能充分利用 导致目标代码生成部分没能得出完善的结果 词法分析是我做的较为满意的地方 不仅可以方便的判别小数 还可以对一些错误进 行正确的处理 完全满足了实验的要求 但是这个程序花了也我大部分的时间 由于实验 难度大 且需要注意的地方多 比如小数的判断 比如区别小数点后加一个字母这种类型 真的是让我一边写一遍调试一边修改 改了无数次后才终于得到一个还算完美的结果 虽 12 然难 但是很大程度上锻炼了我分析处理问题的能力 不停地调试修改过程中也让程序变 得更加简洁明了了 目标代码生成因为要用到语义分析的结果 所以我将大部分的语义代码加了进来 导 致代码较为冗长 由于时间不够 且用多个寄存器还涉及到活跃变量等复杂问题 为了简单 处理 只用到了一个寄存器 除了这个问题 其他都较好 如对 if 和 while 的跳转语句 如有条件跳转和无条件跳转 实验让我切实的感受到了理论知识与具体实现之间的差距 那些平时上课时觉得很容 易懂的知识 要通过自己在计算机上进行实现并不像想象中的那么容易 我们能理解的知 识用计算机语言表述成计算机能理解的语言 这不仅需要很扎实的编程基础 更要彻彻底 底的搞懂所学的理论知识 并达到将所学知识融会贯通的程度 这样才能自由的应付实现 时出现的细节问题 两周的实验让我学到了很多 比如对文件流的应用 c 语言和 c 的区别 也对编译原 理中语法词法中间代码目标代码以及 L 语言有了更深的认识 附录一 词法分析程序代码附录一 词法分析程序代码 include include include include include include include include usingusing namespacenamespace std std typedeftypedef structstruct tokentoken char char name 30 name 30 intint syn syn token token typedeftypedef structstruct symplesymple charchar name 30 name 30 intint type type sym sym tokentoken vt vt symsym st st charchar prog 80 prog 80 charchar ch ch intint p m x n sum p m x n sum 13 charchar rwtab 17 and begin bool do else end false if integer not rwtab 17 and begin bool do else end false if integer not or program real then ture var while or program real then ture var while intint i 0 k c sumint f i 0 k c sumint f charchar fenshu 80 sum1 80 fenshu 80 sum1 80 doubledouble sumf 0 fudian sumf 0 fudian intint shuzi shuzi if ch 0 if ch 0 vt syn 20 elseelse vt syn 2 vt syn 2 returnreturn vt syn vt syn voidvoid scaner scaner for n 0 n 8 n for n 0 n a vt name m ch st name x ch st name x ch 14 ch prog p ch prog p vt name m 0 vt name m 0 st name x 0 st name x 0 ch prog p ch prog p vt syn 18 vt syn 18 for n 0 n 17 n for n 0 n 0 if ch 0 st name x c c st type 20 st type 20 for n 0 n k n for n 0 n 0 k for k i 2 k 0 k sumf sumf 0 1 fenshu k 0 0 1 sumf sumf 0 1 fenshu k 0 0 1 计算浮点数的小数部分计算浮点数的小数部分 fudian sumint sumf fudian sumint sumf 浮点数计算浮点数计算 vt syn 20 vt syn 20 p c p c 16 else else ch prog p ch prog p 若是整数 若是整数 chch 等于原来的值等于原来的值 sum 0 sum 0 st type 1 st type 1 while ch 0 while ch 0 sum sum 10 ch 0 ch prog p ch prog p st name x ch st name x ch st type 19 st type 19 st name x NULL st name x NULL ch prog p ch prog p vt syn 19 vt syn 19 elseelse switch ch switch ch casecase m 0 if ch vt syn 35 vt syn 35 vt name m ch vt name m ch elseelse vt syn 34 vt syn 34 p p break break casecase m 0 st type 1 m 0 st type 1 vt name m ch vt name m ch ch prog p ch prog p if ch if ch vt syn 37 vt syn 37 vt name m ch vt name m ch elseelse vt syn 36 vt syn 36 p p break break casecase m 0 st type 1 m 0 st type 1 vt syn 32 vt syn 32 18 vt name m ch vt name m ch break break casecase m 0 m 0 st type 1 st type 1 vt syn 23 vt syn 23 vt name m ch vt name m ch break break casecase m 0 m 0 st type 1 st type 1 vt syn 24 vt syn 24 vt name m ch vt name m ch break break casecase m 0 st type 1 m 0 st type 1 vt syn 25 vt syn 25 vt name m ch vt name m ch break break casecase m 0 st type 1 m 0 st type 1 vt syn 26 vt syn 26 vt name m ch vt name m ch break break casecase m 0 st type 1 m 0 st type 1 vt syn 27 vt syn 27 vt name m ch vt name m ch break break casecase m 0 st type 1 m 0 st type 1 vt name m ch vt name m ch vt syn 27 vt syn 27 break break casecase m 0 m 0 st type 1 st type 1 vt syn 21 vt syn 21 vt name m ch vt name m ch 19 break break casecase m 0 m 0 st type 1 st type 1 vt syn 22 vt syn 22 vt name m ch vt name m ch break break casecase m 0 m 0 st type 1 st type 1 vt syn 38 vt syn 38 vt name m ch vt name m ch break break casecase m 0 m 0 st type 1 st type 1 vt syn 39 vt syn 39 vt name m ch vt name m ch break break casecase m 0 st type 1 m 0 st type 1 vt syn 30 vt syn 30 vt name m ch vt name m ch break break casecase m 0 m 0 st type 1 st type 1 vt name m ch vt name m ch ch prog p ch prog p if ch if ch vt syn 31 vt syn 31 vt name m ch vt name m ch elseelse vt syn 29 vt syn 29 p p 20 break break case m 0 case m 0 vt syn 0 vt syn 0 st type 0 st type 0 vt name m ch vt name m ch break break default default vt syn 1 vt syn 1 st type 1 st type 1 vt name m 0 vt name m 0 voidvoid main main p 0 p 0 cout cout Welcome Welcome 词法分析词法分析 endl endl cout ncout n pleaseplease inputinput a a string endstring end withwith endl endl dodo scanf c scanf c prog p ch prog p ch while ch while ch p 0 p 0 intint x 0 x 0 intint y 0 y 0 ofstream ofstream f1 d token txt f1 d token txt ofstreamofstream f2 d symple txt f2 d symple txt ofstreamofstream f1 d symp txt f1 d symp txt if f2 return if f2 return cout cout tokentoken 表输出 表输出 d symp txt endl d symp txt endl dodo 21 scaner scaner x x switch vt syn switch vt syn casecase 19 f1 x19 f1 x vt syn sum endl break vt syn sum endl break casecase 1 f1 x 1 f1 x error endl break error endl break casecase 20 f1 x20 f1 x vt syn fudian endl break vt syn fudian endl break default f1 xdefault f1 x vt syn vt name endl break vt syn vt name endl break while vt syn 0 while vt syn 0 cout cout symplesymple 表输出 表输出 d symple txt endl d symple txt endl p 0 p 0 dodo scaner scaner switch st type switch st type casecase 18 18 y y f2 yf2 y st type st name endl break st type st name endl break casecase 19 19 y y f2 yf2 y st type st name endl break st type st name endl break casecase 20 20 y y f2 yf2 y st type st name endl break st type st name endl break while st type 0 while st type 0 f2 close f2 close f1 close f1 close 22 system pause system pause 目标代码程序代码目标代码程序代码 include include include include include include include include usingusing namespacenamespace std std charchar prog 80 prog 80 存放所有输入字符存放所有输入字符 charchar token 8 token 8 存放词组存放词组 charchar ch ch 单个字符单个字符 intint syn p m n i syn p m n i syn syn 种别编码种别编码 doubledouble sum sum intint count count intint isSignal isSignal 是否带正负号是否带正负号 0 0 不带 不带 1 1 负号 负号 2 2 正号 正号 intint isError isError intint isDecimal isDecimal 是否是小数是否是小数 doubledouble decimal decimal 小数小数 intint isExp isExp 是否是指数是否是指数 intint index index 指数幂指数幂 intint isNegative isNegative 是否带负号是否带负号 doubledouble temp temp intint temp2 temp2 intint repeat repeat 是否连续出现是否连续出现 intint nextq nextq intint kk kk 临时变量的标号临时变量的标号 intint ntc nfc nnc nnb nna ntc nfc nnc nnb nna charchar rwtab 9 main int float double char if else do while rwtab 9 main int float double char if else do while charchar rwtab1 6 begin if then while do end rwtab1 6 begin if then while do end 23 struct struct charchar result 10 result 10 字符串 字符数组 字符串 字符数组 charchar arg1 10 arg1 10 charchar opera 10 opera 10 charchar arg2 10 arg2 10 fourCom 20 fourCom 20 结构体数组结构体数组 voidvoid MZDM MZDM voidvoid lrparser lrparser voidvoid staBlock intstaBlock int nChain nChain 语句块语句块 voidvoid staString intstaString int nChain nChain 语句串语句串 voidvoid sta intsta int nChain nChain 语句语句 voidvoid fuzhi fuzhi 赋值语句赋值语句 voidvoid tiaojian inttiaojian int nChain nChain 条件语句条件语句 voidvoid xunhuan xunhuan 循环语句循环语句 char char E E Expresiion Expresiion 表达式表达式 char char T T Term Term 项项 char char F F Factor Factor 因子因子 charchar newTemp newTemp 自动生成临时变量自动生成临时变量 voidvoid backpatch intbackpatch int p intp int t t 回填回填 intint merge intmerge int p1 intp1 int p2 p2 合并合并 p1p1 和和 p2p2 voidvoid emit charemit char res char res char num1 char num1 char op char op char num2 num2 生成四元式生成四元式 voidvoid scanner scanner 扫描扫描 voidvoid lrparser lrparser intint nChain nChain nfc ntc 1 nfc ntc 1 nextq 1 nextq 1 if syn 1 if syn 1 main main scanner scanner 24 if syn 26 if syn 26 scanner scanner if syn 27 if syn 27 scanner scanner staBlock staBlock elseelse printf printf 缺少右括号缺少右括号 n n elseelse printf printf 缺少左括号缺少左括号 n n elseelse printf printf 缺少缺少 main n main n voidvoid staBlock intstaBlock int nChain nChain 语句块语句块 if syn 28 if syn 28 scanner scanner staString nChain staString nChain backpatch nChain nextq backpatch nChain nextq if syn 29 if syn 29 scanner scanner 读下一个读下一个 elseelse printf printf 缺少缺少 号号 n n 25 elseelse printf printf 缺少缺少 号号 n n voidvoid staString intstaString int nChain nChain 语句串语句串 sta nChain sta nChain backpatch nChain nextq backpatch nChain nextq while syn 31 while syn 31 scanner scanner sta nChain sta nChain backpatch nChain nextq 1 backpatch nChain nextq 1 voidvoid sta intsta int nChain nChain 语句语句 if syn 10 if syn 10 fuzhi fuzhi nChain 0 nChain 0 elseelse if syn 6 if syn 6 if if tiaojian nChain tiaojian nChain 26 elseelse if syn 8 if syn 8 do do xunhuan xunhuan if if voidvoid tiaojian inttiaojian int nChain nChain charchar res 10 num1 10 num2 10 op 10 res 10 num1 10 num2 10 op 10 intint nChainTemp nChainTemp if syn 6 if syn 6 if if scanner scanner strcpy num1 E strcpy num1 E if syn 26 if syn 26 scanner scanner strcpy num1 E strcpy num1 E if syn 32 if syn 32 switch syn switch syn casecase 32 32 strcpy op strcpy op break break casecase 33 33 strcpy op strcpy op 27 break break casecase 34 34 strcpy op strcpy op break break casecase 35 35 strcpy op strcpy op break break casecase 36 36 strcpy op strcpy op break break casecase 37 37 strcpy op strcpy op break break default default printf error printf error scanner scanner strcpy num2 E strcpy num2 E strcat num1 op strcat num1 op strcat num1 num2 strcat num1 num2 nfc nextq 1 nfc nextq 1 ntc nextq ntc nextq 记住记住 ifif 语句位置语句位置 emit 0 if num1 goto emit 0 if num1 goto nfc nextq nfc nextq if if 中表达式为假中表达式为假 emit 0 goto emit 0 goto 第一个第一个 0 0 已回填已回填 backpatch ntc nextq backpatch ntc nextq ntc ntc 链接的所有四元式都回填链接的所有四元式都回填 nextqnextq 28 if syn 27 if syn 27 scanner scanner staBlock staBlock 语句块语句块 nChain merge nChainTemp nfc nChain merge nChainTemp nfc do do while while voidvoid xunhuan xunhuan charchar res 10 num1 10 num2 10 op 10 res 10 num1 10 num2 10 op 10 intint nChainTemp nChainTemp if syn 8 if syn 8 do do nnc nextq nnc nextq 记住记住 ifif 语句位置 语句位置 emitemit 之后之后 nextqnextq 就变了就变了 emit 0 if num1 goto emit 0 if num1 goto scanner scanner staBlock staBlock 语句块语句块 if syn 9 if syn 9 while while scanner scanner if syn 26 if syn 26 29 scanner scanner strcpy num1 E strcpy num1 E if syn 32 if syn 32 switch syn switch syn casecase 32 32 strcpy op strcpy op break break casecase 33 33 strcpy op strcpy op break break casecase 34 34 strcpy op strcpy op break break casecase 35 35 strcpy op strcpy op break break casecase 36 36 strcpy op strcpy op break break casecase 37 37 strcpy op strcpy op break break default default printf error printf error scanner scanner 30 strcpy num2 E strcpy num2 E strcat num1 op strcat num1 op strcat num1 num2 strcat num1 num2 nnb nextq nnb nextq emit 0 if num1 goto emit 0 if num1 goto backpatch nnb nnc backpatch nnb nnc nna nextq nna nextq emit 0 goto emit 0 goto backpatch nna nextq backpatch nna nextq if syn 27 if syn 27 scanner scanner voidvoid fuzhi fuzhi 赋值语句只有赋值语句只有 1 1 个操作数个操作数 charchar res 10 num 10 res 10 num 10 num num 操作数操作数 if syn 10 if syn 10 字符串字符串 strcpy res token strcpy res token 结果结果 scanner scanner if syn 21 if syn 21 scanner scanner 31 strcpy num E strcpy num E emit res num emit res num elseelse printf printf 缺少缺少 号号 n n char char E E Expression Expression 表达式表达式 charchar res num1 op num2 res num1 op num2 res charres char malloc 10 malloc 10 num1 charnum1 char malloc 10 malloc 10 op charop char malloc 10 malloc 10 num2 charnum2 char malloc 10 malloc 10 strcpy num1 T strcpy num1 T while syn 22 syn 23 while syn 22 syn 23 if syn 22 if syn 22 strcpy op strcpy op elseelse strcpy op strcpy op scanner scanner strcpy num2 T strcpy num2 T strcpy res newTemp strcpy res newTemp emit res num1 op num2 emit res num1 op num2 strcpy num1 res strcpy num1 res 32 returnreturn num1 num1 char char T T Term Term 项项 charchar res num1 op num2 res num1 op num2 res charres char malloc 10 malloc 10 num1 charnum1 char malloc 10 malloc 10 op charop char malloc 10 malloc 10 num2 charnum2 char malloc 10 malloc 10 strcpy num1 F strcpy num1 F while syn 24 syn 25 while syn 24 syn 25 if syn 24 if syn 24 strcpy op strcpy op elseelse strcpy op strcpy op scanner scanner strcpy num2 F strcpy num2 F strcpy res newTemp strcpy res newTemp emit res num1 op num2 emit res num1 op num2 strcpy num1 res strcpy num1 res returnreturn num1 num1 char char F F Factor Factor 因子因子 charchar res res res charres char malloc 10 malloc 10 33 if syn 10 if syn 10 字符串字符串 strcpy res token strcpy res token scanner scanner elseelse if syn 20 if syn 20 二进制数二进制数 itoa int sum res 10 itoa int sum res 10 整数转换为字符串整数转换为字符串 scanner scanner elseelse if syn 26 if syn 26 scanner scanner res E res E if syn 27 if syn 27 scanner scanner elseelse isError 1 isError 1 elseelse isError 1 isError 1 returnreturn res res charchar newTemp newTemp charchar p p charchar varTemp 10 varTemp 10 p charp char malloc 10 malloc 10 34 kk kk itoa kk varTemp 10 itoa kk varTemp 10 strcpy p 1 varTemp st
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025届浙江省宁波四中生物高一第一学期期末学业质量监测模拟试题含解析
- 2025届吉林省油田十一中英语高三上期末预测试题含解析
- 青海省西宁市第二十一中学2025届数学高三上期末教学质量检测试题含解析
- 2025届西藏自治区拉萨市拉萨那曲第二高级中学高一上数学期末联考试题含解析
- 2025届贵州省遵义市求是高级中学高二数学第一学期期末学业质量监测模拟试题含解析
- 2025届江西省赣州市宁都县宁师中学数学高二上期末综合测试试题含解析
- 2025届山西省翼城中学高二数学第一学期期末达标检测模拟试题含解析
- 吉林省延边市长白山第一高级中学2025届高三生物第一学期期末预测试题含解析
- 2025届湖北省黄冈市重点名校高二上数学期末联考模拟试题含解析
- 2025届吉林省榆树一中五校数学高三上期末监测试题含解析
- 辩论赛通才与专才
- 五行生克乘侮在临床中的运用
- 供应商考核稽查表
- 形式发票样本(Proforma Invoice)
- 九年级个人学习目标展示
- 等腰三角形(习题)教案
- QPCJ钢轨铝热焊接工艺4-2ppt课件
- 液压油缸计算器
- 绝世武林秘籍峨眉十二桩之八.附
- 高考英语3500词汇表(附音标无中文释译
- 二手设备买卖合同(范本)
评论
0/150
提交评论