C语言词法分析器_内容说明注释完整_可运行代码.doc

1. 实验目的及要求 本次实验通过用 C 语言 设计、编制、调试一个词法分析子程序,识别单词,实现一个 C 语言词法分析器,经过此过程可以加深对编译器解析单词流的过程的了解。 运行环境运行环境 硬件windows xp 软件visual c6.0 2. 实验步骤 1.查询资料,了解词法分析器的工作过程与原理。 2.分析题目,整理出基本设计思路。 3.实践编码,将设计思想转换用 c 语言编码实现,编译运行。 4.测试功能,多次设置包含不同字符,关键字的待解析文件,仔细察看运行结果,检测该分 析器的分析结果是否正确。 通过最终的测试发现问题, 逐渐完善代码中设置的分析对象与关 键字表,拓宽分析范围提高分析能力。 3. 实验内容 本实验中将 c 语言单词符号分成了四类关键字 key(特别的将 main 说明为主函数) 、 普通标示符、常数和界符。将关键字初始化在一个字符型指针数组*key中,将界符分别由 程序中的 case 列出。在词法分析过程中,关键字表和case 列出的界符的内容是固定不变的 (由程序中的初始化确定) ,因此,从源文件字符串中识别出现的关键字,界符只能从其中 选取。标识符、常数是在分析过程中不断形成的。 对于一个具体源程序而言, 在扫描字符串时识别出一个单词, 若这个单词的类型是关键 字、普通标示符、常数或界符中之一,那么就将此单词以文字说明的形式输出每次调用词 法分析程序,它均能自动继续扫描下去,形成下一个单词,直到整个源程序全部扫描完毕, 从而形成相应的单词串。 输出形式例如void 关键字 流程图流程图 、程序、程序 流程图 开始 输入源文 件路径 路径是否有 效 是 初始化文件指针 否 将字符加入字符数 组Word 是空格,空白或换 行吗 是字母吗是数字吗否否是界符吗否 打开源文件 跳过该字符 是 是 文件结束 否 将字符加入字符数 组Word 否 将字符 加入字 符数组 Word 是 指向下一字符 识别指针内容 指向下一字符 是字母惑数字 吗 是 将word与关键 字表key进行匹 配 否 匹配 是 输出word 为关键字 输出word为 普通标示符 否 将字符加 入字符数 组Word 指向下一字符 输出word 为常数 识别指针内容 回退 是数字吗 是 否 输出word 为界符 指向下一字符 结束是 输出Word 内容为不 可识别 将字符 加入字 符数组 Word 程序 include include include include 定义关键字 char *Key10“main“,“void“,“int“,“char“,“printf“,“scanf“,“else“,“if“,“return“; char Word20,ch; 存储识别出的单词流 int IsAlphachar c 判断是否为字母 ifcacA return 1; else return 0; int IsNumchar c 判断是否为数字 ifc0 else return 0; int IsKeychar *Word 识别关键字函数 int m,i; fori0;i9;i ifmstrcmpWord,Keyi0 ifi0 return 2; return 1; return 0; void scannerFILE *fp 扫描函数 char Word200 int i,c; chfgetcfp; 获取字符,指针 fp 并自动指向下一个字符 ifIsAlphach 判断该字符是否是字母 Word0ch; chfgetcfp; i1; whileIsNumchIsAlphach 判断该字符是否是字母或数字 Wordich; i; chfgetcfp; Wordi00 代表字符结束空格 fseekfp,-1,1; 回退一个字符 cIsKeyWord; 判断是否是关键字 ifc0 printf“st普通标识符nn“,Word;不是关键字 else ifc2 printf“st主函数nn“,Word; else printf“st关键字nn“,Word; 输出关键字 else 开始判断的字符不是字母 ifIsNumch 判断是否是数字 Word0ch; chfgetcfp; i1; whileIsNumch Wordich; i; chfgetcfp; Wordi0 快快快快快快快快可 回退 printf“st无符号实数nn“,Word; else 开始判断的字符不是字母也不是数字 Word0ch; switchch case case case case case case case, case“ caseprintf“st界符nn“,Word; break; casechfgetcfp; Word1ch; ifch printf“st运算符nn“,Word;运算符“” else ifch printf“st运算符nn“,Word; 判断结果为“” else fseekfp,-1,1; printf“st运算符nn“,Word; 判断结果为“” break; case-chfgetcfp; Word1ch; ifch printf“st运算符nn“,Word; else ifch- printf“st运算符nn“,Word; 判断结果为“” else fseekfp,-1,1; printf“st运算符nn“,Word; 判断结果为“-” break; case* case/ case casechfgetcfp; ifch printf“st运算符nn“,Word; else fseekfp,-1,1; printf“st运算符nn“,Word; break; casechfgetcfp; Word1ch; ifch printf“st运算符nn“,Word; 判断结果为运算符 “” else ifch printf“st运算符nn“,Word; 判断结果为“” else fseekfp,-1,1; printf“st运算符nn“,Word; 判断结果为“chfgetcfp; Word1ch; ifch printf“st运算符nn“,Word; else fseekfp,-1,1; printf“st运算符nn“,Word; break; casechfgetcfp; Word1ch; ifchprintf“st运算符nn“,Word; ifIsAlphach printf“st类型标识符nn“,Word; else fseekfp,-1,1; printf“st取余运算符nn“,Word; break; defaultprintf“无法识别字符nn“; break; main char in_fn30; 文件路径 FILE *fp; printf“n 请输入源文件名(包括路径和后缀名)“; while1 getsin_fn; scanf“s“,in_fn; iffpin_fn,“r“NULL break; 读取文件内容,并返回文件指针,该 指针指向文件的第一个字符 else printf“文件路径错误请重新输入“; printf“n* 词法分析结果如下 *n“; do chfgetcfp; ifch break; 文件以结尾,作为扫描结束条件 else ifch chtchn 忽略空格,空白,和换行 else fseekfp,-1,1; 回退一个字节开始识别单词流 scannerfp; whilech; return0; 4.实验结果 解析源文件 void main int a3; ab; printf“d“,a; return; 解析结果 5.实验总结分析 通过本次实验,让再次浏览了有关 c 语言的一些基本知识,特别是对文件,字符串进行 基本操作的方法。C 语言中没有 string 类型,因此本实验中的对字符串提取与识别均借助 include及字符型数组来实现。 让我练习对字符串函数应用的同时也提高了自己 的逻辑思维能力。 在本次实验中,我纠正了一个一直以来的概念错误main 不是关键字,它定义为程序 的入口,是主函数在本实验中,虽然我把 main 初始化在关键字表 (字符指针类型数组)*Key10中,当与该数组中字符串进行比较时,若与 main 匹配成功, 则返回 2,若为其他关键字则返回 1,以此来把 main 从关键字中区别出来。 在本实验中的关键字表只初始化了几个常用的关键字, 还可继续扩充 (只需扩大数组, 向其中补充要添加的关键字) 。 如果要对本程序中未识别的 c 语言中的一些其他的字符进行扩充(目前处理为不可识别字 符) ,可在程序代码中继续添加 case 选项,分别对相应要识别的特殊字符加以描述

词法分析器c语言带注释,C语言词法分析器内容说明注释完整可运行代码.doc-资源下载在线文库www.lddoc.cn...相关推荐

  1. c语言程序阅读题库,C语言程序设计-阅读程序题库及答案.doc-资源下载在线文库www.lddoc.cn...

    C语言程序设计-------阅读程序题库及答案.doc 阅读程序题 2 1 以下程序的输出结果是 main D float a a 1 100000000 printf g a A 0 00000e ...

  2. C语言输入函数换行符赋给变量B,C语言程序设计第3章顺序结构程序设计.pptx-资源下载在线文库www.lddoc.cn...

    C语言程序设计第3章 顺序结构程序设计.pptx 第 6章 数组第 7章 函数第 8章 结构体.共用体和枚举类型第 9章 指针第 10章 文件目录页 Contents page第 1章 初识 C语言第 ...

  3. A13在c语言中是合法变量吗,C语言中局部变量和全局变量等在内存中的存放位置.doc-资源下载在线文库www.lddoc.cn...

    C语言中局部变量和全局变量_等在内存中的存放位置.doc C 语言中局部变量和全局变量 变量的存储类别static,extern,auto,register 8.8 局部变量和全局变量在讨论函数的形参 ...

  4. 2020华师c语言程序客观题作业和答案,18秋华师C语言程序设计B在线作业-3辅导资料.docx-资源下载在线文库www.lddoc.cn...

    18秋华师<C语言程序设计B>在线作业-3辅导资料.docx 18秋华师C语言程序设计B在线作业-31.C 2.D 3.D 4.D 5.A 一.单选题共50题,100分1.以下关于运算符优 ...

  5. 数值计算方法上机c语言编程,数值计算方法上机实验报告.doc-资源下载在线文库www.lddoc.cn...

    <数值计算方法>上机实验报告.doc 华 北 电 力 大 学实 验 报 告实验名称 数值计算方法上机实验 课程名称 数值计算方法 专业班级电力实 08 学生姓名李超然学 号20080100 ...

  6. 计算机基础c语言试题,计算机应用基础C语言测试题.doc-资源下载在线文库www.lddoc.cn...

    <计算机应用基础C语言>测试题.doc 计算机应用基础C语言测试题一选择题(每空2分,共70分).从下列每题提供的A.B.C.D供选择的答案中,选出一个正确的答案,填在对应的( )内.1在 ...

  7. 在c语言中用来创建主菜单的对象是,百一测评C语言试题.docx-资源下载在线文库www.lddoc.cn...

    百一测评--C语言试题.docx 职业技能题库在线云笔试平台httpwww.101test.Com试卷名称 C语言试题试卷描述在线考试.招聘笔试.微信考试试卷链接 单项选择题每题分值4分 是否题目乱序 ...

  8. 用函数求C15的值C语言,南开19春学期(1503、1509、1603、1609、1703)C语言程序设计在线作业-1辅导资料.docx-资源下载在线文库www.lddoc.cn...

    南开19春学期(1503.1509.1603.1609.1703)<C语言程序设计>在线作业-1辅导资料.docx 南开19春学期(1503.1509.1603.1609.1703)C语言 ...

  9. rsa加密c语言源码库,RSA加密算法源代码C语言实现.doc-资源下载在线文库www.lddoc.cn...

    RSA加密算法_源代码__C语言实现.doc RSA 算法 1978 年就出现了这种算法,它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作,也很流行.算法的名字以发明者的名字命名Ro ...

最新文章

  1. C++读写txt文件方式以及基于opencv的Mat数据类型读写txt文件
  2. bigquery按照小时来聚合数据
  3. [转]C++学习:VC++动态链接库(DLL)编程深入浅出(zz)
  4. 刚刚!6月榜单:JS跌惨,Python又霸榜,C++再无翻身可能!
  5. 【MM系列】SAP 关于更改物料的价格控制类型
  6. python elseif用法_Python关键字简介
  7. leetcode之逆波兰表达式
  8. 面向过程和面向对象的区别,通俗易懂
  9. Ubuntu视频教程
  10. PDF转Word时提示有密码两种常用解密技巧分享
  11. 深入浅出WPF笔记——属性
  12. mysql数据库修复工具_MySQL数据库修复软件(Recovery Toolbox for MySQL)
  13. 32位Linux系统时间截止,linux – 如果系统设置为2038年以后的日期,则ntpdate失败
  14. 最大约数(秋季每日一题 34)
  15. Netatalk CVE-2018-1160的发现与利用
  16. moses binarize-all问题
  17. Storyboard 之segue用法总结
  18. 1949. 坚定的友谊
  19. 牛客网 2018年全国多校算法寒假训练营练习比赛(第二场) A.吐泡泡-STL(stack)
  20. VTK笔记-裁剪分割-几何裁剪-vtkClipPolyData

热门文章

  1. c语言程序定义不知数量的一维数组,c语言程序设计10-第6章 利用数组处理批量数据 6.1 怎样定义和引用一维数组.ppt...
  2. linux的文件搜索命令,Linux文件搜索命令find的用法 | 术与道的分享
  3. java各种的不好_译文《最常见的10种Java异常问题》
  4. sql字符串拼接_Mybatis的SqlSession执行sql过程
  5. linux centos命令语法,linux-centos7
  6. @value 静态变量_Java中的变量——通过示例学习Java编程(4)
  7. python opencv录制视频_如何使用OpenCV和Python录制视频?
  8. MySQL笔记——多表查询
  9. 怎么跟踪php代码,第九节 PHP 跟踪调试代码 XDebug
  10. LSGO软件技术团队2015~2016学年第十二周(1116~1122)总结