




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编 译 原 理 实 验 报 告 实验一实验一 一 实验名称 一 实验名称 词法分析器的设计 二 实验目的 二 实验目的 1 词法分析器能够识别简单语言的单词符号 2 识别出并输出简单语言的基本字 标示符 无符号整数 运算符 和界符 三 实验要求 实验要求 给出一个简单语言单词符号的种别编码词法分析器 四 实验原理 四 实验原理 1 词法分析程序的算法思想 算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号 其基本思想是根据扫描到单词符号的第一个字符的种类 拼出相应的单词符号 2 程序流程图 1 主程序 2 扫描子程序 输入要分析的语句 调用扫描 分析程序 输出单词符号二元组 结束 判断读入字符是否为 3 各种单词符号对应的种别码 单词符号种别码助记符内码值 while1while if2if else3else switch4switch case5case 标识符 6id id 在符号表中的 位置 常数 7num num 在常数表中的 位置 8 9 10 11relopLE 11relopLT 11relopEQ 12 13 Token 清空 当前字符 标示符常数表中查找结束 Error 输出二元式 基本字用户标示符 结束 Get 五 实验内容 五 实验内容 1 实验分析 编写程序时 先定义几个全局变量 a token 均为字符串数组 c s char 型 i j k int 型 a 用来存放输入的字符串 token 另一个则用来帮助识别单词符号 s 用来表示正在分析 的字符 字符串输入之后 逐个分析输入字符 判断其是否 若是表示字符串输入分析完毕 结束分析程序 若否则通过 int digit char c int letter char c 判断其是数字 字符还是算术符 分 别为用以判断数字或字符的情况 算术符的判断可以在 switch 语句中进行 还要通过函数 int lookup char token 来判断标识符和保留字 2 实验词法分析器源程序 include include include int i j k char c s a 20 token 20 0 int letter char s if s 97 else return 0 void get s a i i i 1 void retract i i 1 int lookup char token 20 if strcmp token while 0 return 1 else if strcmp token if 0 return 2 else if strcmp token else 0 return 3 else if strcmp token switch 0 return 4 else if strcmp token case 0 return 5 else return 0 void main printf please input string n i 0 do i i 1 scanf c while a i i 1 j 0 get while s memset token 0 20 switch s case a case b case c case d case e case f case g case h case i case j case k case l case m case n case o case p case q case r case s case t case u case v case w case x case y case z while letter s digit s token j s j j 1 get retract k lookup token if k 0 printf d s 6 token else printf d k break case 0 case 1 case 2 case 3 case 4 case 5 case 6 case 7 case 8 case 9 while digit s token j s j j 1 get retract printf d s 7 token break case printf NULL break case printf null break case printf null break case E E E E E E E E E E 0 1 2 3 9 根据此文法编写程序时 算术表达式的求解过程需要用到算术符号的优先判断 定义两个字符串 数组 optr opnd 用来模拟栈 存放算术符和操作数 用 a 来存放表达式字符串 在分析时还要 通过函数 int f char c 和 int g char c 判断运算符之间的优先关系 根据不同情况作各种不同 操作 流程图如下 输入算数表达式 以 结束 初始化 loptr 1 用 get 取一个待分析字符 s Optr 1 和 s 是否同时为 判断 S 是否为运算量 Floptrj g s 其他情况 error 当前字符栈 optr栈顶元素出栈 结束 存入 opnd get 2 实验程序源代码 include char a 21 optr 10 op s int opnd 10 i j k x1 x2 x3 int operand char s if s 48 else return 0 int f char s switch s case return 4 break case return 6 break case i return 6 break case return 2 break case return 6 break default return 0 int g char s switch s case return 3 break case return 5 break case i return 7 break case return 7 break case return 2 break default return 0 void get s a i i void main printf 请输入表达式 以 结束 n i 0 do i scanf c while a i i j k 1 optr j get while optr j k get else if f optr j g s op optr j j x1 opnd k 1 x2 opnd k 2 k k 2 switch op case x3 x1 x2 break case x3 x1 x2 break default break opnd k x3 k printf c d d d n op x2 x1 x3 else j get 3 实验结果 心得体会 心得体会 通过本次实验
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025第二人民医院冰敷推拿技术考核
- 沧州市中医院会阴体修补术技能考核
- 2025儿童医院放疗剂量计算考核
- 张家口市人民医院护理教学文化建设考核
- 北京市中医院腹腔镜结直肠癌根治术术者分级认证考核
- 2025吉林省矿业集团有限责任公司遴选31人考前自测高频考点模拟试题及答案详解(新)
- 北京市中医院神经重症监护室主任岗位竞聘考核
- 秦皇岛市中医院护理学科团队建设考核
- 2025年芜湖经济技术开发区招聘公办幼儿园教职工26人模拟试卷及答案详解(考点梳理)
- 邢台市人民医院重大疑难手术主刀资格认证
- 男朋友男德守则100条
- 食品安全风险管控日管控检查清单
- 乡村振兴汇报模板
- 津16D19 天津市住宅区及住宅建筑内光纤到户通信设施标准设计图集 DBJT29-205-2016
- 医院感染科室院感管理委员会会议记录
- 高分子物理-第2章-聚合物的凝聚态结构课件
- CNAS体系基础知识培训课件
- 三字经全文带拼音打印版带翻译
- 河蟹健康养殖与常见疾病防治技术课件
- 儿童牙外伤讲稿
- GB∕T 41491-2022 配网用复合材料杆塔
评论
0/150
提交评论