简单编译器的设计与实现1
C语言编译器前端的设计与实现 实训报告

第 1 章 绪论
1.1 C 语言及编译器概述
C 语言是在 70 年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正式 发表了 C 语言。同时由 B.W.Kernighan 和 D.M.Ritchit 合著了著名的“THE C PROGRAMMING LANGUAGE”一书。通常简称为《K&R》,也有人称之为《K&R》标准。但是,在《K&R》中并 没有定义一个完整的标准 C 语言,后来由美国国家标准学会在此基础上制定了一个 C 语言 标准,于一九八三年发表。通常称之为 ANSI C。C 语言是一种结构化语言。它层次清晰, 便于按模块化方式组织程序,易于调试和维护。C 语言的表现能力和处理能力极强。它不仅 具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的 物理地址,进行位(bit)一级的操作。由于 C 语言实现了对硬件的编程操作,因此 C 语言集 高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。 此外,C 语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上, 从而形成了多种版本的 C 语言。
2.3.1 自顶向下的语法分析...........................................................................................5 2.3.2 自底向上的语法分析...........................................................................................5 2.4 语义分析.........................................................................................................................6 2.5 符号表.............................................................................................................................6 2.6 类型检查.........................................................................................................................7 第 3 章 系统详细设计..................................................................................................................8 3.1 系统设计基本思路.........................................................................................................8 3.2 词法分析模块设计.........................................................................................................8 3.3 语法分析模块设计.......................................................................................................11 3.4 语义分析模块设计.......................................................................................................14 第 4 章 结束语............................................................................................................................16 参考文献...................................................................................................................................... 16 附录: 附录 1:词法分析核心代码............................................................................................17 附录 2:语法分析核心代码............................................................................................18
编译器设计与实现技术研究

编译器设计与实现技术研究随着计算机软硬件的不断更新,编译器作为一个重要的软件工具,也不断地发展和完善。
编译器是一种将高级语言代码转换成低级代码的程序,它可以将程序员编写的高级语言代码翻译成机器能够识别的汇编代码或者机器语言代码。
编译器的设计和实现技术对于软件开发有着至关重要的作用。
1.编译器的基本工作原理编译器的基本工作原理是将高级语言代码逐步解析成机器能够识别的低级代码。
首先,编译器将高级语言代码进行词法分析,将语句中的标识符、关键字、运算符等转换成对应的记号。
接着,编译器将这些记号进行语法分析,转换成语法树。
语法树表示了给定程序的语法结构,是编译器生成中间代码的重要依据。
编译器根据语法树生成中间代码,并对中间代码进行优化。
最后,编译器将优化后的中间代码转换成机器能够识别的机器码或者汇编代码。
2.编译器的设计与实现技术编译器的设计与实现技术主要包括以下几个方面:2.1.词法分析器词法分析器用于将高级语言代码转换成标记流。
它的主要任务是将输入的文本流转换为一个个逐个扫描的Token 序列,将每个Token 分类为特定的Token 类型,如标识符、关键字、运算符等。
常见的词法分析器生成器有 Flex 和 Lex。
2.2.语法分析器语法分析器用于将标记流转变成一棵语法树。
语法分析器的主要任务是将从词法分析器得到的Token 序列转换成一棵语法树,在语法树上进行语义分析和优化。
常见的语法分析器生成器有 Bison 和 Yacc。
2.3.中间代码生成器中间代码生成器用于将语法树转换成中间代码。
中间代码生成器的主要任务是将语法分析器生成的语法树转换成中间代码。
中间代码表示高级语言代码的语义,是生成目标代码的中间步骤。
常见的中间代码有三地址码、四元式、抽象语法树等。
2.4.中间代码优化器中间代码优化器用于对中间代码进行优化。
中间代码优化器的主要任务是提高目标代码的性能、减小目标代码的大小以及提高编译器的运行效率。
编译器实验报告

编译器实验报告编译器实验报告引言编译器是计算机科学中的重要组成部分,它将高级语言代码转换为机器语言代码,使计算机能够理解和执行人类可读的指令。
在本次实验中,我们将设计和实现一个简单的编译器,以加深对编译原理和计算机体系结构的理解。
一、背景知识1.1 编译器的基本原理编译器主要由两个阶段组成:前端和后端。
前端负责将源代码转换为中间代码,后端则将中间代码转换为目标机器代码。
1.2 词法分析词法分析是编译器的第一个阶段,它将源代码分解为一个个词法单元,如标识符、关键字、运算符等。
词法分析器通过正则表达式和有限自动机来实现。
1.3 语法分析语法分析是编译器的第二个阶段,它将词法单元按照语法规则组织成语法树。
语法分析器通常使用上下文无关文法和递归下降分析来实现。
二、实验设计2.1 实验目标本次实验的目标是设计一个简单的编译器,能够将一种自定义的高级语言转换为目标机器代码。
我们选取了一种类C语言的语法作为实验对象。
2.2 实验流程首先,我们需要编写词法分析器,将源代码分解为词法单元。
然后,我们使用语法分析器将词法单元组织成语法树。
接下来,我们需要进行语义分析,检查代码是否符合语义规则。
最后,我们将中间代码转换为目标机器代码。
三、实验过程3.1 词法分析在词法分析阶段,我们使用正则表达式和有限自动机来实现词法分析器。
我们定义了一系列正则表达式来匹配不同的词法单元,如标识符、关键字、运算符等。
通过扫描源代码,词法分析器能够将源代码分解为一个个词法单元。
3.2 语法分析在语法分析阶段,我们使用上下文无关文法和递归下降分析来实现语法分析器。
我们定义了一系列文法规则来描述语法结构,如函数声明、条件语句、循环语句等。
语法分析器能够将词法单元组织成语法树。
3.3 语义分析在语义分析阶段,我们检查代码是否符合语义规则。
例如,我们检查变量是否声明过、函数是否调用正确等。
如果发现错误,我们将生成错误信息并终止编译过程。
3.4 代码生成在代码生成阶段,我们将中间代码转换为目标机器代码。
编译技术原理及其实现方法

编译技术的分类
前端技术
前端技术是指将源代码转换成中间代码的过程, 包括词法分析、语法分析、语义分析等阶段。
后端技术
后端技术是指将中间代码转换成机器码的过程, 包括优化、代码生成等阶段。
解释器技术
解释器技术是指直接解释执行源代码的技术,不 需要将源代码转换成中间代码或机器码。
02
编译技术原理
词法分析
优化的目标是减少计算开销、减少内 存访问次数、提高指令级并行度等, 以提高程序的运行效率。
目标代码生成
01
目标代码生成是编译过程的最后一步,其任务是将中间代码转 换为特定机器上的目标代码。
02
目标代码是与特定机器相关的低级代码,可以直接被计算机硬
件执行。
目标代码生成器通常会考虑指令选择、寄存器分配、内存访问
THANKS
感谢观看
详细描述
语法制导的编译器设计方法将语法分析结果与语义分析、代码生成等过程相结合,实现编译器的整体 设计。它通过将语法规则与语义动作相关联,在语法分析过程中直接生成目标代码或中间代码,简化 了编译器的设计过程,提高了编译器的效率和可靠性。
04
编译技术的应用与挑战
编译技术在软件工程中的应用
代码优化
编译技术可以对源代码进行优化,提高程序的运行效率,减少资 源消耗。
编译技术的作用是将人类可读的源代 码转化为计算机可执行的机器码,实 现程序的自动化运行。
编译技术的历史与发展
编译技术的起源
编译技术的起源可以追溯到20世纪50年代,当时计算机程序 设计刚刚起步,人们需要将手写的程序代码转换成机器码。
编译技术的发展
随着计算机技术的不断发展,编译技术也在不断进步和完善 。现代编译器已经能够处理更复杂的高级语言,并提供了更 多的优化和调试功能。
编译原理课程设计C编译器词法分析与语法分析的实现

编译原理课程设计报告课落款称: C-编译器词法分析与语法分析的实现提交文档学生姓名:黄臻旸提交文档学生学号: 1043041227 同组成员名单:无指导教师姓名:金军指导教师评阅成绩:指导教师评阅意见:..提交报告时刻:2021年 6 月 5 日编译原理课程设计报告 (1)一、课程设计目标 (3)二、分析与设计 (3)2.一、说明所用的方式: (3)2.二、系统总图: (3)2.2.一、scanner部份: (3)2.2.二、parse部份: (5)2.2.3、代码设计说明 (7)3、程序代码实现 (10)3.一、获取输入部份(在main.c中): (10)3.二、词法分析部份(在scan.c中): (10)3.3、语法分析部份(在parse.c中): (15)3.4、输出与结点的成立(在util.c中) (29)3.五、TokenType、treeNode与结点类型的声明(在globals.h中) (35)4、测试结果 (36)五、总结 (40)5.一、收成 (43)5.二、不足 (43)一、课程设计目标本次实验,本C- 编译器要紧设计而且实现了C- 编译器的词法分析功能与语法分析功能。
二、分析与设计2.一、说明所用的方式:各部份的实现方式(scanner:手工实现、Lex;parser:递归下降、LL(1)、LR(0)、SLR(1)、2.二、系统总图:2.2.一、scanner部份:2.2.1.一、实验原理:扫描程序的任务是从源代码中读取字符并形成由编译器的以后部份(一般是分析程序)处置的逻辑单元。
由扫描程序生成的逻辑单元称作记号(token),将字符组合成记号与在一个英语句子中将字母将字母组成单词并确信单次的含义很相像。
在此程序中,我将记号分成了以下类型:typedef enum {ENDFILE,ERROR,IF,ELSE,INT,RETURN,VOID,WHILE,ID,NUM,ASSIGN,PLUS,MINUS,TIMES,OVER,L T,LET,BT,BET,EQ,NEQ,// = + - * / < <= > >= == !=LPAREN_1,RP AREN_1,SEMI,COM,LPAREN_2,RP AREN_2,LPAREN_3,RP AREN_3,LIN,RIN// { } ; , [ ] ( ) /*} TokenType;其中,关键字有:else、if、int、return、void、while;专用符号有:+、-、*、/、<、<=、>、>=、==、~=、=、;、,、(、)、[、]、{、}、/*、*/其他标记是ID、NUM,通过以下正那么表达式概念:ID = letter letter*NUM = digit digit*letter = a|..|z|A|..|Zdigit = 0|..|9小写大写字母是有区别的。
如何进行编译器设计和解释器开发

如何进行编译器设计和解释器开发编译器和解释器是软件开发中非常重要的工具,它们用于将源代码转换为可以被计算机执行的机器码或者解释执行源代码。
编译器是将源代码一次性地转换为目标代码,而解释器是逐行地解释源代码并执行相应的操作。
本文将介绍编译器的设计和解释器的开发过程,并提供一些实用的技巧和建议。
一、编译器设计编译器设计是一个复杂的任务,需要掌握词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等多个环节。
下面是编译器设计的一般流程:1.词法分析:将源代码分解为一个个token,例如关键词、标识符、数字、操作符等。
可以使用正则表达式或者有限状态自动机来进行词法分析。
2.语法分析:根据语法规则将token组成一个个语法结构,例如函数、表达式、语句等。
可以使用上下文无关文法和语法分析算法(如LL(1)或者LR(1))来进行语法分析。
3.语义分析:对语法结构进行语义检查,例如类型检查、作用域检查、类型转换等。
在这一阶段还可以进行符号表的构建,用于保存变量和函数的信息。
4.中间代码生成:将源代码转换为一种中间表示形式,通常是一个抽象的指令序列,例如三地址码、虚拟机指令、中间表达式等。
中间代码的生成可以使用递归下降、语法制导翻译或者语法制导翻译的变体等方法。
5.代码优化:对中间代码进行优化,以提高代码的执行效率和减小代码的体积。
常见的优化技术包括常量折叠、公共子表达式消除、死代码删除、循环优化等。
6.目标代码生成:将中间代码转换为目标机器的机器码或者汇编代码。
目标代码生成可以分为两个阶段:指令选择(选择适合目标机器的指令)和寄存器分配(将变量分配到寄存器或者内存中)。
7.代码生成完成后,还需要进行链接和装载,将目标代码与库文件进行链接,并将最终的可执行文件加载到内存中执行。
二、解释器开发与编译器不同,解释器是逐行地解释和执行源代码,不需要将源代码先转换为目标代码。
下面是解释器的开发过程:1.词法分析:同编译器设计一样,解释器也需要进行词法分析,将源代码分解为一个个token。
用于PLC的华P语言编译器设计与实现

摘要:PLC已广泛应用于工业领域中,PLC的软件设计大多采用梯形图编程,文中设计实现 了一种新的PLC编程语言一一华P语言,并采用自顶向下逐句分析的方法设计了相应的华P 语言到8051汇编语言的编译器。通过该编译器,可直接编译生成底层CPU需用的hex格式的 机器码文件。最后通过对比梯形图指令,以实例分析得出华P语言的优势及应用的可行性。.
参考文献:
软件具体实现过程如图5所示。
[1]唐耀庚,李兰君.一种PLC系统监控用图形操作终端和开发
软件[J].电子技术,2001,(1):44舶.
[2]胡德.PIE发展动向[J].工厂建设与设计,1997,(6): 18—19. [3]Kenneth c Louden.编译原理及实践[M].冯博琴,冯岚 译.北京:机械工业出版社,2000. [4]Randy Allen,Ken Kennedy.现代体系结构.的优化编译器 [M].张兆庆,等译.北京:机械工业出版社,2004. [5]宋伯生.PLC编程理论算法及技巧[M].北京:机械工业 出版社,2005.678-682. [6]郑吉吉,吴金强.浅谈可编程控制器的特点及发展趋势 [J].机械管理开发,2007,(5):90-92.
实现华P语言的语句分析时,采用的核心方 法是类似于经典的自顶向下的分析方法中的递归 下降分析法。递归下降分析法是一种比较简单直 观、易于构造的自顶向下的语法分析方法,而华P 语言与该方法相似。用这种方法进行语句分析 时,从读人的第一个字符开始进行分析,若遇到特 定符号,则读人相应单词是否与关键字相匹配,如 果匹配则继续分析。不匹配,则报错。在跳转到
析,并得到一种新的表示形式,在大多数情况下最 终产生一个可以与其他目标代码链接,并装入一 台机器的存储器中可执行的目标模块…。
毕业设计(论文)-基于LLVM的编译器的设计与实现

毕业设计(论文)-基于LLVM的编译器的设计与实现题目:基于LLVM的编译器的设计与实现设计人:指导教师:所属系部:计算机科学与技术学院专业班级:计算机082001班2012年 6月 4日太原科技大学毕业设计(论文)任务书学院: 计算机科学与技术学院学生姓名学号 200820010114 专业班级计算机082001 同组人无任务下发时间 2012年3月任务完成时间 2012年6月设计(论文)题目基于LLVM的编译器的设计与实现设计高质量应用软件的开发,需要高效的编程语言和编译器的支持。
目的为了加深学生对编程语言和编译器的理解,要求学生设计一个类似C要求的小源语言,然后利用LLVM实现该语言的编译器。
在深刻理解编译原理,掌握文法设计和编译器构造方法,并且熟悉LLVM的基础上,完成编程语言和编译器的设计。
主要内容包括: 设计 (1)设计源语言,要求包括变量声明,基本赋值语句,数组访问,主要条件分支语句,循环语句,函数定义,和函数调用等。
内容 (2)学习LLVM,完成词法分析,语法分析,和语法制导翻译(翻译成LLVM IR)工作,最后利用LLVM实现代码优化和代码生成功能。
设计毕业论文提交外文资料翻译资料编译器软件学生签名指导教师签名系主任签名主管院长签名太原科技大学学士学位论文中文摘要开发高性能的应用软件,除了一个良好的软件架构外,还需要高效的编程语言和高质量的编译器的支持。
现有语言的改动和新语言的创造,都会带来编译器的开发需求。
本文设计了一门新的编程语言leechee,定义了此种语言的文法结构、词法规则,并在linux环境下实现了leechee编程语言的编译器。
具体实现方式为首先利用Flex完成词法分析,而后使用Bison完成文法设计、语法分析和语法制导翻译,把源代码翻译成LLVM IR,最后利用LLVM实现代码优化和代码生成功能。
关键字:编程语言;编译器;语法制导翻译;LLVM IR;代码优化太原科技大学学士学位论文The Design and Implementation ofLLVM based CompilerAuthor: Liang Guanlin Tutor: Liu AiqinABSTRACTIn addition to a good software-architecture, the development of high-performance applications also needs the support of an efficient programming language and a high-quality compiler. Changes to existing languages and creation of new languages, will bring the developmentneeds of the compilers. This paper designs a new programming language leechee, defines its grammaticalstructures, lexical rules, and implements its compiler under Linux environment. The specific approach is, first, finishes the scanner with Flex, and then completes the grammar design, parser, syntax directed translation with Bison, implements the translation to LLVM IR, andfinally use the LLVM to do the code optimization and code generation.Keywords: programming language; compiler; syntax directed translation; LLVM IR; code optimizationI太原科技大学学士学位论文目录第一章绪论 ....................................................................0 1.1 什么是编译器 ........................................................... 0 1.2 总会有编译器的开发需求 . 01.3 为什么做这个项目 ....................................................... 1 第二章设计什么样的编译器和语言 (3)2.1 做一个什么样的编译器 (3)2.1.1 利用LLVM实现一门新语言 (3)2.1.2 利用flex和bison完成词法分析和语法分析 (4)2.2 设计一个什么样的语言 (5)2.2.1 计算机可以做什么 (5)2.2.2 本设计的语言——leechee ......................................... 6 第三章相关技术的介绍 .......................................................... 7 3.1Flex ...................................................................73.1.1 Flex输入文件的格式 .............................................. 7 3.2Bison ..................................................................83.2.1 Bison的语法文件 (8)3.2.2 文法规则的语法 (9)3.2.3 文法设计需要注意的问题 ......................................... 10 3.3LLVM ..................................................................113.3.1 LLVMIR (11)3.3.2 LLVM对三段式设计的实现 (12)3.3.3 利用LLVM完成代码优化 .......................................... 14 第四章语言和编译器的设计 ..................................................... 16 4.1 语言设计 .. (16)4.1.1 leechee的数据组成 (16)4.1.2 leechee的文法规则 (17)II太原科技大学学士学位论文4.1.3 leechee的词法规则 (24)4.1.4 leechee的输入输出 (26)4.2 抽象语法树 (27)4.2.1 抽象语法树的用处 (27)4.2.2 leechee语法树的设计 (28)4.3 语法制导翻译 (30)4.3.1 利用Bison实现语法制导翻译方案 (31)4.3.2 均分代码生成工作 ............................................... 31 第五章编译器的实现 .. (32)5.1 抽象语法树的实现 (32)5.1.1NodeAST (32)5.1.2 类型 (33)5.1.3 表达式 (35)5.1.4 语句 (41)5.1.5 声明 (45)5.2 符号表 (49)5.3 分析栈 (50)5.4 中间代码生成的上下文 (51)5.5 输入输出 (52)5.6 代码优化 .............................................................. 54 第六章用例说明 (55)6.1 用例程序 (55)6.2 使用步骤 .............................................................. 57 结束语 ..................................................................... ... 58 致谢 ..................................................................... ..... 59 参考文献 ......................................................................60 附录 ..................................................................... .. (61)附录? 英文资料翻译 (61)III太原科技大学学士学位论文附录? 程序代码 (73)IV太原科技大学学士学位论文第一章绪论1.1 什么是编译器编译器(compiler)也是一个计算机程序,它把用某种编程语言(源语言)编写的代码转变成另一种计算机语言(目标语言,通常是二进制形式的目标代码)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
简单编译器的设计与实现1
一、课程设计的目的
二、课程设计的任务
(1)设计符号表
确定符号表的组织,通常包括名称列和信息列,其中名称列用作关键字。
考虑能够存
储关于名称的信息,并有效地完成以下操作:
a.查找:根据给定的名字,在符号表中查找其信息。
如果该名字在符号表中不存在,
则将其加入到符号表中,否则返回指向该名字的指针;
b、删除:从符号表中删除具有给定名称的表项。
(2)词法分析器的设计
设计各单词的状态转换图,并为不同的单词设计种别码。
将词法分析器设计成供语法
分析器调用的子程序。
功能包括:
a、具有预处理功能。
首先过滤掉未翻译的注释和其他符号,只保留要翻译的符号字
符串,即需要设计一个由认罪分析调用的预处理子程序;b、能够拼写语言中的每个单词;
c、将拼写的标识符填入符号表;
d、返回(类型代码、属性值)。
(3)解析器
要求用预测分析法、递归下降分析法、算符优先分析法、slr分析法(几种方法任选),实现对表达式、各种说明语句、控制语句进行语法分析。
(4)目标代码生成器
当指定数量的寄存器可以完成时,将中间代码程序段翻译成汇编语言目标代码(汇编
指令应包括加法、减法、乘法和除法)。
当需要的指令数量最少时,请尝试
1
使用寄存器尽可能少地访问内存,以实现较高的操作效率。
三、课程设计要求
示例语言是C语言,它实现了一个简单的编译器。
基本语句必须执行,其余的可以根
据实际情况选择。
解释并理解主要代码。
每个功能和过程应有简要说明,包括功能说明、
进入和退出参数说明。
四、简单编译器的实现流程图表格管理词法分析器源程序出错处理语法分析器单词符
号语法单位语义分析与中间代码产生器中间代码优化器中间代码目标代码生成器目标代码
五、实施环境
windowsxp操作系统、win-tc运行环境
二
六、课程设计的详细过程
(1)词法分析器的设计思想:
要求:1.对单词的构词规则有明确的定义;
2.分析程序能正确识别源程序中的单词和符号;
3.识别出的单词以符号的形式保存在
符号表中;
4.词法分析中源程序的输入以.c格式,分析后的符号表保存在.txt文件中。
5.对于
源程序中的词法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成整
个源程序的词法分析;
6.输入:由符合指定词类结构的各种单词组成的源程序。
实施方法:
根据加入语义过程的状态转换图直接编写词法分析程序。
根据每一组状态转换关系
(标识符)组织程序结构,并将所有公共处理过程分别实现即可。
在扫描源程序字符串时,一旦识别出关键字、运算符、标识符、无符号常数中之一,即以二元式形式(类别编码,值)输出单词。
每次调用词法分析程序,它均能自动继续扫描下去,形成下一个单词。
实
现过程及主要代码:定义主要函数:
1.charscanin[100],scanout[100];//用于接收输入和输出文件名file*fin,
*fout//指向输入/输出文件的指针
2.//下面定义保留,为简化程序,使用字符指针数组保存所有保留字。
//如果想增加
保留字,可继续添加,并修改保留字数目#definekeywordsum8char
*关键字[keywordsum]={\rite\
3.//下面定义纯单分界符,如需要可添加charsingleword[50]=\
4.//下面定义双分界符的首字符chardoubleword[10]=\
5.scanf(\
Printf(\请输入词法分析的输出文件名(包括路径):\scanf(\
6.if((fin=fopen(scanin,\判断输入文件名是否正确{printf(\打开词法分析输入文
件出错!\\n\return(1);//输入文件出错返回错误代码1}
如果((fout=fopen(scanout),\判断输出文件名是否正确{printf(\创建词法分
析输出文件时出错!\\n\return(2);//输出文件中出错返回错误代码2}
3
7.ch=getc(fin);//读取文件8 Isalpha(CH)//字母判断函数isalnum(CH))//数字判断函数中的一个字符
strcmp(token,keyword[n])//串比较fprintf(fout,\//输出标识符符号到fout指定的文件strchr(singleword,ch)//声明:char*strchr(constchar*string,intc);实现函数代码:初始化函数:init()
{char*键[]={\
\char*limit[]={\\file*fp;inti;charc;fp=fopen(\for(i=1;i<=12;i++)
fprintf(fp,\fclose(fp);/*初始化关键字*/FP=fopen(\for(I=1;I<=17;
I++)
fprintf(fp,\fprintf(fp,\
fclose(fp);/*初始化操作,仪表表*/FP=fopen(\
fclose(fp);/*初始化标识符表*/fp=fopen(\
fclose(fp);/*初始化常数表*/FP=fopen(\
fclose(fp);/*初始化输出文件*/}
根据不同的命令执行表格查找或表格创建功能:
{intnumber=0;file*fp;charc;chartemp[30];inti=0;switch(type){case1:fp=fopen(\ca se2:fp=fopen(\
案例3:fp=fopen(\case4:fp=fopen(\}
c=fgetc(fp);while(c!=eof){while(c!='\\n')
{temp[i++]=c;c=fgetc(fp);}温度[i]='\\0';i=0;
number++;
四
if(strcmp(temp,buf)==0){fclose(fp);
返回(编号);/*如果找到,请在相应的表中返回序列号*/}else
c=fgetc(fp);}
返回(0);/*找不到。
当只需要查找表时,返回0,否则需要创建表*/}
switch(type)
{case1:fp=fopen(\case2:fp=fopen)(\
case3:fp=fopen(\case4:fp=fopen(\}
fprintf(fp),\fclose(fp);
return(number+1);/*造表时,将字符串添加到表尾并返回序号值*/}
字符串处理功能:
voidcs_manage(char*buffer){file*fp;
字符*指针;
intresult;
结果=查找(缓冲区,3,2);/*首先检查常量表。
如果找不到,则创建常量表并返回序列号值*/FP=fopen(\
fprintf(fp,\fclose(fp);/*写入输出文件
*/}voidch_manage(char*buffer){file*fp;intresult;
结果=查找(缓冲区,1,1);/*首先检查关键字表*/FP=fopen(\
if(result!=0)
Fprintf(FP,\n如果找到,则写入输出文件*/else
{result=find(buffer,2,2);/*若找不到,则非关键字,查标识符表,还找不到则造入标识符表*/
Fprintf(FP,\}/*写入输出文件*/Fclose(FP);}
5。