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

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 选项,分别对相应要识别的特殊字符加以描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HDU - 2516 】取石子游戏 (Fibonacci博弈)

题干&#xff1a; 1堆石子有n个,两人轮流取.先取者第1次可以取任意多个&#xff0c;但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍。取完者胜.先取者负输出"Second win".先取者胜输出"First win". Input 输入有多组.每组第1行是2<n<…

打印心形c语言,C语言打印心形

#include int main() {for (float y 1.5f; y > -1.5f; y - 0.1f) {for (float x -1.5f; x < 1.5f; x 0.05f) {float a x * x y * y - 1;putchar(a * a * a - x * x * y * y * y < 0.0f ? ‘*‘ : ‘ ‘);}putchar(‘\n‘);}}**********************************…

【HDU - 1564 】Play a game (博弈问题,找规律,奇偶博弈)

题干&#xff1a; New Year is Coming! ailyanlu is very happy today! and he is playing a chessboard game with 8600. The size of the chessboard is n*n. A stone is placed in a corner square. They play alternatively with 8600 having the first move. Each time…

c语言学生对老师的评教系统,学生对老师的评价

学生对老师的评价1、老师授课的方式十分适合我们&#xff0c;他根据本课程知识结构的特点&#xff0c;重点突出&#xff0c;层次分明。理论和实际相结合&#xff0c;透过例题使知识更条理化。但授课速度有点快&#xff0c;来不及记录。2、老师在生活工作中给人的感觉是生活朴素…

*【HDU - 1517】【POJ - 2505】A Multiplication Game(博弈,递推找规律或SG函数)

题干&#xff1a; Stan and Ollie play the game of multiplication by multiplying an integer p by one of the numbers 2 to 9. Stan always starts with p 1, does his multiplication, then Ollie multiplies the number, then Stan and so on. Before a game starts, t…

android 怎么获取app 字体颜色,android app 修改字体

android中可能会遇到修改字体的情况&#xff0c;虽然说需求比较少&#xff0c;但是偶尔还会遇到可以使用三方框架来帮助我们简单做到api "uk.co.chrisjenx:calligraphy:2.2.0"在style文件中添加一个字体的stylefonts/Roboto-Thin.ttf我app中的main/assert/fonts/Robo…

【HDU - 1254 】推箱子 (双bfs)

题干&#xff1a; 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不能拉箱子,因此如果箱子被推到一个角上(如图2)那么箱子就不能再被移动了,如果箱子被推到一面墙…

android 退出函数,android – 关闭应用程序与退出按钮

下面使用main.xml文件android:orientation"vertical" android:layout_width"fill_parent"android:layout_height"fill_parent">android:layout_height"wrap_content" android:id"id/txt1" android:text"txt1" …

算法讲解 -- 莫队算法

摘要&#xff1a; 莫队算法是一个对于区间、树或其他结构离线&#xff08;在线&#xff09;维护的算法&#xff0c;此算法基于一些基本算法&#xff0c;例如暴力维护&#xff0c;树状数组&#xff0c;分块&#xff0c;最小曼哈顿距离生成树&#xff0c;对其进行揉合从而产生的一…

android标题栏消失,安卓标题栏为什么没有显示

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼用Eclipse开发的APP&#xff0c;其中一个Activit的标题栏没有显示&#xff0c;但没对Activity做过任何配置。由于不知道哪里出问题&#xff0c;下面把Activity的java文件、布局文件和Mainfest全部放出来Activity.java-------------…

知识点 组合数学 卡特兰数

关于卡特兰数 卡特兰数是一种经典的组合数&#xff0c;经常出现在各种计算中&#xff0c;其前几项为 : 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 914…

android滑动菜单图标,Android实现简单底部导航栏 Android仿微信滑动切换效果

Android仿微信滑动切换最终实现效果&#xff1a;大体思路&#xff1a;1. 主要使用两个自定义View配合实现; 底部图标加文字为一个自定义view,底部导航栏为一个载体,根据需要来添加底部图标;2. 底部导航栏的设置方法类似于TabLayout的关联,View需要创建关联方法,用来关联VIewPag…

【HDU - 2149】Public Sale (巴什博奕)

题干&#xff1a; 虽然不想&#xff0c;但是现实总归是现实&#xff0c;Lele始终没有逃过退学的命运&#xff0c;因为他没有拿到奖学金。现在等待他的&#xff0c;就是像FarmJohn一样的农田生涯。 要种田得有田才行&#xff0c;Lele听说街上正在举行一场别开生面的拍卖会&…

Android万能遥控菜单选择添加,Android万能遥控器小应用

在很久很久以前&#xff0c;手机是有红外功能的&#xff0c;后来随着蓝牙技术的成熟&#xff0c;红外逐渐被蓝牙取代&#xff0c;不再是标配了。红外本身还是有些优点&#xff0c;比如操作简便&#xff0c;成本低。要想在手机上添加红外功能&#xff0c;就要外接一个转换模块。…

android studio 库工程,Android Studio 添加已有工程方法

准备工作&#xff1a;修改 excluded-paths和android.iml&#xff0c;修改内容详见下图。(目的&#xff1a;过滤和优先在sourcefolder查找&#xff0c;若没有再到JAR包中查找)BorqsUI/LINUX/android/development/tools/idegen$ mm编译出来&#xff1a;[100% 3/3] Install: out/h…

【HDU - 3951】Coin Game (博弈,猜规律,对称博弈)

题干&#xff1a; After hh has learned how to play Nim game, he begins to try another coin game which seems much easier. The game goes like this: Two players start the game with a circle of n coins. They take coins from the circle in turn and every time…

android textview 白色,android – AutoCompleteTextview默认情况下,颜色设置为白色

我在我的Android应用程序中使用了一个AutoCompleteTextView&#xff0c;它正常工作。我唯一遇到的问题是&#xff0c;默认情况下&#xff0c;建议的颜色为白色&#xff0c;我无法看到任何建议。所以当我开始打字时&#xff0c;列表会以白色条目(不可见)扩展&#xff0c;但是当我…

【HDU - 1527】【POJ - 1067】取石子游戏 (威佐夫博弈)

题干&#xff1a; 有两堆石子&#xff0c;数量任意&#xff0c;可以不同。游戏开始由两个人轮流取石子。游戏规定&#xff0c;每次有两种不同的取法&#xff0c;一是可以在任意的一堆中取走任意多的石子&#xff1b;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取…

android okgo参数,Android OkGo基本操作

或许不是很全面&#xff0c;也都是从网上粘的&#xff0c;自己记下以后使用方便点。如有不对的地方 欢迎指教。首先添加依赖&#xff1a;implementation com.lzy.net:okgo:3.0.4设置初始化和全局配置&#xff1a;public class App extends Application {Overridepublic void on…

【CodeForces - 334B】Eight Point Sets(水题模拟,有坑)

题干&#xff1a; Gerald is very particular to eight point sets. He thinks that any decent eight point set must consist of all pairwise intersections of three distinct integer vertical straight lines and three distinct integer horizontal straight lines, ex…