ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:32.38KB ,
资源ID:4078888      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4078888.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理课程设计C语言编译器.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

编译原理课程设计C语言编译器.docx

1、编译原理课程设计C语言编译器( 编译原理课程设计报告课题名称: C-语言编译器设计 提交文档学生姓名: 李杰 )提交文档学生学号: 00 同组 成 员 名 单: 无 指导 教 师 姓 名: 金军 N不指导教师评阅意见: . . 提交报告时间: 2010年 6 月 10日1.课程设计目标实验建立C-编译器。只含有scanner和parser部分。2.分析与设计(1)实现方法:.编程语言为C语言。编程方法:scanner部分根据DFA图用switch-case结构实现状态转换;parser部分用递归下降分析方法实现。(2)扫描器:C惯用的词法1、语言的关键字:else if int return

2、void while 2、专用符号:+ - * / = = != = ; , ( ) /* */ 3、其他标记是ID和NUM,通过下列正则表达式定义:ID = letter letter* NUM = digit digit* letter = a|.|z|A|.|Z digit = 0|.|9?4、空格由空白、换行符和制表符组成。空格通常被忽略,除了它必须分开ID、NUM关键字。 5. 注释用通常的C语言符号/ * . . . * /围起来。注释可以放在任何空白出现的位置(即注释不能放在标记内)上,且可以超过一行。注释不能嵌套各单词的状态转换图(DFA图如下)词法结构见文件中。#(3)分析器

3、:分析树结构见文件中。C的BNF语法如下:(4)代码设计说明:#程序结构:语法分析函数parse通过调用词法分析函数getToken实现语法分析。文件和函数的设计说明:文件包含相应头文件,及main函数的实现;文件包含符号表和分析数的数据结构及在其它文件中使用的变量;文件 和实现与词法分析和语法分析输出相关的函数printToken和printTree,以及分析树节点初始化相关的函数newStmtNode,newExpNode(Expkind)和copyString;文件 和实现词法分析,主要函数为getToken;文件 和实现语法分析,函数为与文法规则对应的函数。关键数据结构3.程序代码实现

4、文件代码如下:=NULL) strcat(pgm,.tny); 。 source=fopen(pgm,r); if(source=NULL) fprintf(stderr,file %s not found n,pgm); return -1; listing=stdout; fprintf(listing,n C-COMPILATION: %sn,pgm); else EOF_Flag=TRUE; return EOF; else return lineBuflinepos+;=;=;=;!=;错误用例:/* A program to perform Eucilds Algorithm to

5、 compute gcd. */int gcd (int u, int v) returk; re9; ! if (v=0) return u; else return gcd(v,u-u/v*v);! /* u mod v */语法分析用例:正确用例:()/* A program to perform selection sort on a 10 element array. */int x10;-int minloc (int a,int low,int high) int i; int x; int k; k=low; x=alow; i=low+1; while (ihigh) if

6、(aix)% x=ai; k=i; i=i+1; return k;void sort (int a,int low,int high), int i;int k; i=low; while (ihigh-1) int t; k=minloc (a,i,high); t=ak; ak=ai; ai=t;、 i=i+1; void main (void) int i; i=0; while (i10)* xi= input; i=i+1; sort (x,0,10); i=0; while (i=;compiler sou C-COMPILATION: 1: /* A program to pe

7、rform Eucilds! 2: Algorithm to compute gcd. */ 3: int gcd (int u, int v) 3:reserved word: int 3:ID, name= gcd 3:( 3:reserved word: int 3:ID, name= u 3:, 3:reserved word: int 3:ID, name= v 3:) 4: 4: 5: if (v=0) return u; 5:reserved word: if 5:( 5:ID, name= v 5:= 5:NUM, val= 0 5:) 5:reserved word: ret

8、urn 5:ID, name= u 5:; 6: else return gcd(v,u-u/v*v); 6:reserved word: else 6:reserved word: return 6:ID, name= gcd 6:( 6:ID, name= v 6:, 6:ID, name= u 6:- 6:ID, name= u 6:/ 6:ID, name= v 6:* 6:ID, name= v 6:) 6:; 7: /* u-u/v*v= u mod v */ 8: 9: 9: 10: void main(void) 10:reserved word: void 10:ID, na

9、me= main 10:( 10:reserved word: void=;= 16:; 16:compiler sour C-COMPILATION: 1: /* A program to perform Eucilds 2: Algorithm to compute gcd. */ 3: int gcd (int u, int v)【 3:reserved word: int 3:ID, name= gcd 3:( 3:reserved word: int 3:ID, name= u 3:, 3:reserved word: int 3:ID, name= v! 3:) 4: returk

10、; re9; 4: 4:ERROR: 4:ID, name= returk 4:; 4:ID, name= re 4:NUM, val= 9。 4:; 5: ! if (v=0) return u; 5:ERROR: ! 5:reserved word: if 5:( 5:ID, name= v 5:= 5:NUM, val= 0 5:) 5:reserved word: return 5:ID, name= u 5:; 6: else return gcd(v,u-u/v*v); 6:ERROR: 6:reserved word: else 6:reserved word: return 6

11、:ID, name= gcd 6:( 6:ID, name= v 6:, 6:ID, name= u 6:- 6:ID, name= u 6:/; 6:ID, name= v 6:* 6:ID, name= v 6:) 6:; 7: /* u mod v */ 8: 8:* 9:EOFC:Documents and Settings计算机学院专业实验室桌面compilerDebug语法分析的结果输出:正确结果:C:Documents and Settings计算机学院专业实验室桌面compilerDebugcompiler sour C-COMPILATION: Syntax tree: In

12、t Id: x Vark: 10 Int Id: minloc Hanshu Int Id: a Vark: -1 Int Id: low Int Id: high¥ Hanshuti Int Id: i Int Id: x Int Id: k Assign to: k Id: low Assign to: x Id: a Id: low Assign to: i Op:+ Id: low Const: 1。 While Op: Id: i Id: high Hanshuti If Op: Id: a( Id: i Id: x Hanshuti Assign to: x Id: a Id: i

13、 Assign to: k Id: i Assign to: i Op:+ Id: i Const: 1 Return Id: k Void Id: sort( Hanshu Int Id: a Vark: -1 Int Id: low Int Id: high Hanshuti Int Id: i Int Id: k Assign to: i Id: low While Op: Id: i Op:- Id: high Const: 1 Hanshuti Int Id: t Assign to: k Id: minloc Id: a Id: i Id: high Assign to: t Id

14、: a Id: k; Assign to: a Id: a Id: i Assign to: a Id: t Assign to: i Op:+ Id: i Const: 1 Void Id: main Hanshu Void Hanshuti Int Id: i, Assign to: i Const: 0 While Op: Id: i Const: 10 Hanshuti Assign to: x Id: input Assign to: i Op:+ Id: i Const: 1 Id: sort Id: x Const: 0$ Const: 10 Assign to: i Const

15、: 0 While Op:cd 桌面compilerDebugC:Documents and Settings计算机学院专业实验室桌面compilerDebugcompiler sour, C-COMPILATION: Syntax error at line 4: unexoected token- Syntax error at line 5: unexoected token-reserved word: return、 Syntax error at line 12: unexoected token-reserved word: int Syntax error at line 16

16、: code end beforeSyntax tree: Int Id: gcd Hanshu Int Id: u Int Id: v Hanshuti If Op:= Id: v Const: 0 Return Id: u Return Id: gcd Id: v Op:- Id: u Op:* Op:/ Id: u Id: v Id: v Void Id: main Hanshu Void Hanshuti Int Id: x Int Id: y Int Id: z Assign to: x Id: input Assign to: y Id: input Id: output Id:

17、gcd Id: x Id: yC:Documents and Settings计算机学院专业实验室桌面compilerDebug4.总结收获:1、熟悉C语言的结构、指针、文件方面的使用。2、学会用startUml构造状态图,及用switch-case结构实现状态转换实现词法分析。3、学会用递归下降方法实现EBNF文法规则,进而实现语法分析。4、熟悉构造编译器的步骤及程序实现的框架及部分方法。不足:1、程序语法实现部分只用了递归下降分析一种方法。2、此程序框架与教材编译原理及实践附录B Tiny编译器的程序框架相似。3、递归下降分析方法手工实现应经验少程序逻辑错误多,调试费时久,不能保证程序的高健壮性。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1