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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

编译原理课程设计报告词法语法分析器Word文件下载.docx

1、二元组(syn,token或sum)构成的序列。词法分析程序可以单独为一个程序;也可以作为整个编译程序的一个子程序,当需要一个单词时,就调用此法分析子程序返回一个单词.为便于程序实现,假设每个单词间都有界符或运算符或空格隔开,并引入下面的全局变量及子程序:1) ch 存放最新读进的源程序字符2) strToken 存放构成单词符号的字符串3) Buffer 字符缓冲区4)struct keyType 存放保留字的符号和种别源程序输入缓冲区预处理子程序扫描缓冲区1扫描缓冲区2词法分析子程序返回一个单词调用数据 待分析的简单词法 (1)保留字 break、case、char、const、int、d

2、o、while(2)运算符和界符 = 、+、 -、 * 、/、%、,、;、(、)、# 各种单词符号对应的种别码单词符号种别码 种别码IDsizeof24INT1static25auto2struct26break3switch27case4typedef28char5union29const6unsigned30continue7void31default8volatile32do9while33double10=34else11+35enum12-36extern 13*37float14/38for15%39goto16,40if17;41int18(42long19)43register

3、2044return21clear45short22#46signed23lettet(letter|digit)*47dight dight*48 状态转换图6.详细设计(数据结构,子程序) 算法思想: 首先设置3个变量:strToken用来存放构成单词符号的字符串;ch用来字符;struct keyType用来存放单词符号的种别码。扫描子程序主要部分流程如下图所示。子程序结构:子程序名功能GETCHAR()读一个字符到 ch 中GETBC()读一个非空白字符到ch 中CONCAT()把CHAR 中字符连接到strToken 之后LETTER()判断CHAR 中字符是否为字母DIGIT()判

4、断ch 中字符是否为数字RESERVE()用strToken中的字符串查找保留字表,并返回保留字种别码,若返 回零,则非保留字RETRACT()把CHAR 中字符回送到缓冲区7.程序清单eyname) = 0) return Keyi.value; return 0;void Retract() alue; else if (ch = 0&ch 9) ConCat(); GetChar(); while (Digit() ConCat(); GetChar(); Retract(); strcpy, strToken); = 1; else = Reserve(); return tempke

5、y;/*主函数*/int main() 行结果E:/作业/编译原理/运行结果 九、 实验体会通过本次次法分析设计实验,我加深了对词法分析过程的理解。并在实际的设计过程深入的了解了编译原理思想。对编译原理课程有了更深的理解课程设计二:设计简单的语法分析器一、 题目二、 设计内容用算符优先分析方法设计一个分析解释程序,对输入的赋值语句、输出语句、清除语句进行词法分析、语法分析、表达式求值并存储于指定变量中;若存在错误,提示错误相关信息。三、 设计目的了解掌握算符优先分析的基本方法、内容;四、 设计环境五、 概要设计设计思路语法分析的任务: 把单词符号作为基本单位,分析程序是否为合法的程序.算符优先

6、分析法是自下而上的语法分析方法,即根据文法,对输入字串进行归约,若能正确地归约为文法的初始符号,则表示输入字串是合法的.主要研究对输入的赋值语句、输出语句、清除语句进行词法分析、语法分析、表达式求值并存储于指定变量中;文法表示: Sv=E|E|clear EE+T|E-T|T TT*F|T/F|F F (E)|v|c 单词种别码设计符号vcN六、 详细设计 变量及函数说明变量及函数名表示内容及操作int priorityNUMNUM优先关系矩阵struct WordType单词种别码结构struct VarWord变量表中的元素结构mainStack归约栈wordStack单词串Getword

7、Stack()输入串转化成单词串GetWord()从单词串中取单词ClearwordStack()、ClearmainStack()清空单词串和归约栈CheckvarTable(char a)查看变量在变量表中的位置AddvarTable(VarWord a)变量表添加变量InitmainStack()初始化归约栈AddmainStack(WordType a)归约栈添加Handle()归约处理程序MainHandle()归约子程序七、 程序清单 eyname) = 0)void Retract() alue; bool GetwordStack() int i; = 0; keyType t

8、emp; while (strlen(buffer) temp = ReturnWord(); ord, ; .value = 10; else if = 0) ord, ; .value = 9; else for (i = 0; iNUM; i+) if (strcmp, wordTypei.word) = 0) arname) = 0) return i; else if (i = M - 1) return -1;添加变量void AddvarTable(VarWord a) = a; +;void InitmainStack() 0 = wordType12; = 1;添加归约栈vo

9、id AddmainStack(WordType a)归约bool Handle() alue = 10) - 1.value = 13; alue = 9) i = CheckvarTable - 1.word); if (i0) printf(n变量 %s 未定义!, - 1.word); return false; else strcpy - 1.word, i.value); alue = 1) if - 3.value = 9) i = CheckvarTable - 3.word); if (i VarWord temp; strcpy, - 3.word); strcpy, -

10、1.word); = true; AddvarTable(temp); else strcpyi.value, - 1.word); strcpy - 3.word, - 1.word); - 3.value = 13; else if - 3.value = 13) = - 2; alue = 3) int a, b; a = atoi - 1.word); b = atoi - 3.word); a = a + b; itoa(a, - 3.word, 10); else if - 2.value = 5) a = a*b; alue = 2 & - 1.value = 13 & - 2.

11、value = 12) printf(n表达式的值为 %s = 0; alue = 12 & 0.value = 12) return true;bool MainHandle() while if (priority - 1.value0.value != 1) AddmainStack(GetWord(); if ord, i.value); Handle(); break; if MainHandle(); return true; int ok = 1; WordType temp; int ii = 0; while (ok) n);输入第 %d 语句串:,+ii); scanf(%s, buffer);单词串: if (!GetwordStack() return 0; for (int i = 0; i+)(%s,%d), i.word, i.value);n当前归约栈: InitmainStack(); MainHandle(); printf(结束n八、 运行结果通过本次语法分析设计实验,我加深了对语法分析过程的理解。

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

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