文档库 最新最全的文档下载
当前位置:文档库 › 编译原理课程设计-词法分析器的设计

编译原理课程设计-词法分析器的设计

编译原理课程设计-词法分析器的设计
编译原理课程设计-词法分析器的设计

词法分析器的设计

1.设计说明及设计要求

一般来说,整个过程可以划分为五个阶段:词法分析、语法分析、中间代码生成、优化和目标代码生成。本课程设计即为词法分析阶段。词法分析阶段是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词(也称单词符号或符号)。如保留字(关键字或基本字)、标志符、常数、算符和界符等等。

二.设计中相关关键字说明

1.基本字:也称关键字,如C语言中的 if , else , while , do

,for,case,break, return 等。

2.标志符:用来表示各种名字,如常量名、变量名和过程名等。3.常数:各种类型的常数,如12,6.88,和“ABC”等。

4.运算符:如 + ,- , * , / ,%, < , > ,<= , >= 等。

5.界符,如逗点,冒号,分号,括号,# ,〈〈,〉〉等。三、程序分析

词法分析是编译的第一个阶段,它的主要任务是从左到右逐个字

符地对源程序进行

扫描,产生一个个单词序列,用以语法分析。词法分析工作可以是独立的一遍,把字符流的源程序变为单词序列,输出在一个中

间文件上,这个文件做为语法分析程序的输入而继续编译过程。

然而,更一般的情况,常将词法分析程序设计成一个子程序,每

当语法分析程序需要一个单词时,则调用该子程序。词法分析程

序每得到一次调用,便从源程序文件中读入一些字符,直到识别

出一个单词,或说直到下一个单词的第一个字符为止。

四、模块设计

下面是程序的流程图

五、程序介绍

在程序当前目录里建立一个文本文档,取名为infile.txt,所有需要分析的程序都写在此文本文档里,程序的结尾必须以“@”标志符结束。程序结果输出在同一个目录下,文件名为outfile.txt,此文件为自动生成。本程序所输出的单词符号采用以下二元式表示:(单词种别,单词自身的值)如程序输出结果 (57,"#")(33,"include")(52,"<")(33,"iostream") 等。程序的功能:(1)能识别C语言中所有关键字(共32个)(单词种别

分别为1 — 32 ,详情见程序代码相关部分,下同)

(2)能识别C语言中自定义的标示符(单词种别为 33)

(3)能识别C语言中的常数(单词种别为0)

(4)能识别C语言中几乎所有运算符(单词种别分别为41 —54)

(5)能识别C语言中绝大多数界符(单词种别分别为 55 — 66)六、运行结果

输入文件infile.txt

运行结果(输出文件 outfile.txt)

七、设计体会

八、附录部分(程序代码)

单词符号类别编

单词符号类别编

单词符

类别

编码

单词

符号

类别

编码

if3float21+31#62

then4short22-32.63 else5unsigned23*33,64 while6continue24/34:65 do7for25<35>=39 begin8signed26>36<=38 end9void27=37==41 long10default28:=51!=42 switch11goto29(52%40

case12sizeof30)53标识

1 enum13volatile43;54常数2

register14auto44[55

typedef15double45]56 char16int46{57

extern17struct47}58 return18break48<<59 union19static49>>60 const20“61

编译原理实验--词法分析器

编译原理实验--词法分析器 实验一词法分析器设计 【实验目的】 1(熟悉词法分析的基本原理,词法分析的过程以及词法分析中要注意的问题。 2(复习高级语言,进一步加强用高级语言来解决实际问题的能力。 3(通过完成词法分析程序,了解词法分析的过程。 【实验内容】 用C语言编写一个PL/0词法分析器,为语法语义分析提供单词,使之能把输入的字符 串形式的源程序分割成一个个单词符号传递给语法语义分析,并把分析结果(基本字, 运算符,标识符,常数以及界符)输出。 【实验流程图】

【实验步骤】 1(提取pl/0文件中基本字的源代码 while((ch=fgetc(stream))!='.') { int k=-1; char a[SIZE]; int s=0; while(ch>='a' && ch<='z'||ch>='A' && ch<='Z') { if(ch>='A' && ch<='Z') ch+=32; a[++k]=(char)ch; ch=fgetc(stream); } for(int m=0;m<=12&&k!=-1;m++) for(int n=0;n<=k;n++) {

if(a[n]==wsym[m][n]) ++s; else s=0; if(s==(strlen(wsym[m]))) {printf("%s\t",wsym[m]);m=14;n=k+1;} } 2(提取pl/0文件中标识符的源代码 while((ch=fgetc(stream))!='.') { int k=-1; char a[SIZE]=" "; int s=0; while(ch>='a' && ch<='z'||ch>='A' && ch<='Z') { if(ch>='A' && ch<='Z') ch+=32; a[++k]=(char)ch; ch=fgetc(stream); } for(int m=0;m<=12&&k!=-1;m++) for(int n=0;n<=k;n++) { if(a[n]==wsym[m][n]) ++s; else s=0; if(s==(strlen(wsym[m]))) {m=14;n=k+1;} } if(m==13) for(m=0;a[m]!=NULL;m++) printf("%c ",a[m]);

电气14级四个班级虚拟仪器课程设计题目2015秋季2016.1.18-22

12级《虚拟仪器》课程设计任务书 一、设计题目及任务 学生按分组组别从以下对应题目号中选择一题进行设计。 1.粮仓管理系统设计(利用labVIEW)(3-4人) 1)一个粮仓系统有五个独立的粮仓,假设粮仓中各有一个控制节点,用来测量其内部温度及湿度,并有两个执行机构,分别用于打开通气窗口及打开风扇。 2)假设五个粮仓的数据都汇聚在一个集中节点,该节点将数据传至上位监控计算机(串行口)。(数据协议自定,要将五个节点区分开) 3)设计一个监控界面,用于实时监控五个粮仓的实时数据。并保留每天的数据。可以按日期及指定的粮仓来查询数据,并显示历史曲线。 4)用户可以设置报警线,当温度超过报警线时,要求下传数据,启动相应的执行机构。 并在控制面板中有所显示。 5)要求用实际串口完成。(可以在另一个电脑上用串口调试助手,模拟集中节点) 2.利用声卡的数据采集与输出(LabVIEW)(3-4人) 1)通过话筒,利用声卡采集一段声音 2)显示该段声音的频率分析,分析特点,并存储起来。 3)试着根据存储的声音特色,区别不同的人。 4)存储不同的声音,利用声卡实现回放。 3.虚拟仪器的网络控制(3-4人) 1)设计一个程序控制8个外设小灯的点亮方式,要求两种方式A:每个小灯间隔时间T,依次亮,时间T可调,并循环。B:先1.3.5.7.9亮隔时间T,2.4.6.8.10亮,并循环,T 可调。 2)要求主面板与硬件的8个小灯同步。 3)通过网络在另一台计算机上控制此程序的运行(利用LabVIEW的DateSocket技术) 4.基于NI数据采集卡的虚拟示波器(3-4人) 1):波形来自外来的信号发生器(可以外接,也可以仿真) 2:通过采集此信号(波形采集) 3):主界面要求为一个典型的示波器界面,各个调节按钮的功能应该均具备。 4):要求显示波形的特征量。 5:)存储并回放波形。 5.动态分析仪(3-4人) 1):设计一个典型系统的动态响应的过度过程的分析仪。 2):输入为:单位阶跃、单位斜坡、单位加速度、脉冲输入、正弦。 3):系统为典型的一阶系统和二阶系统。相关参数可调 4):当用户在主界面输入不同的输入及系统时,要求输出其动态响应的时域及频域分析。 5):如果在上述系统中加入延时环节(延时时间可调),对应的动态响应应如何? 6.基于NI数据采集卡的虚拟信号放生器(3-4人)

实验一 词法分析器的设计

实验一词法分析器的设计 (2) 1.1 词法分析器的结构和主要任务 (2) 1.1.1 输入输出接口 (2) 1.1.2 条件限制 (2) 1.2 词法分析程序的总体设计 (3) 1.3 词法分析程序的详细设计 (4) 1.4实验步骤 (5) 1.5输入数据 (15) 1.6结果输出 (15)

实验一词法分析器的设计 实验目的:掌握词法分析的概念,设计方法,熟悉高级语言中词法的定义,词法分析程序的编写。 实验要求:在8学时内实现SAMPLE语言的词法分析器,要求用VC窗口界面实现。 实验内容:分为4次实验完成。 1.1 词法分析器的结构和主要任务 1.1.1 输入输出接口 图1-1词法分析器的输入输出界面 词法分析程序的主要任务是从左到右扫描每行源程序,拼成单词,换成统一的内部表示(token)输出,送给语法分析器。具体包括: 1.组织源程序的输入; 2.按规则拼单词,并转换成二元形式; 3.滤掉空白符,跳过注释、换行符及一些无用的符号(如字符常数的引号) 4.进行行列计数,用于指出出错的行列号,并复制出错部分; 5.列表打印源程序; 6.发现并定位词法错误; 7.生成符号表。 token文件和符号表用作语法分析的输入部分。 1.1.2 条件限制 本实验可以作如下假定: (1) 假定SAMPLE语言采用自由格式书写; (2) 可以使用注解,用/*……*/或者{……}标识,但注解不能插在单词内部,注解要在一行内结束,若一行结束,没有遇到注释后面的结束标记,自动认为注释也结束; (3) 一行可以有多个语句,一个语句也可以分布在多行中,单词之间和语句之间可以插入任意空格,单词中间不能有空白符号,单词中间也不能有回车换行符,即单词不能跨行书写; (4) 关键字都是保留字。

编译原理词法分析器语法分析器实验报告

编译技术 班级网络0802 学号3080610052姓名叶晨舟 指导老师朱玉全2011年 7 月 4 日

一、目的 编译技术是理论与实践并重的课程,而其实验课要综合运用一、二年级所学的多门课程的内容,用来完成一个小型编译程序。从而巩固和加强对词法分析、语法分析、语义分析、代码生成和报错处理等理论的认识和理解;培养学生对完整系统的独立分析和设计的能力,进一步培养学生的独立编程能力。 二、任务及要求 基本要求: 1.词法分析器产生下述小语言的单词序列 这个小语言的所有的单词符号,以及它们的种别编码和内部值如下表: 单词符号种别编码助记符内码值 DIM IF DO STOP END 标识符 常数(整)= + * ** , ( )1 2 3 4 5 6 7 8 9 10 11 12 13 14 $DIM $IF $DO $STOP $END $ID $INT $ASSIGN $PLUS $STAR $POWER $COMMA $LPAR $RPAR - - - - - - 内部字符串 标准二进形式 - - - - - - 对于这个小语言,有几点重要的限制: 首先,所有的关键字(如IF﹑WHILE等)都是“保留字”。所谓的保留字的意思是,用户不得使用它们作为自己定义的标示符。例如,下面的写法是绝对禁止的: IF(5)=x 其次,由于把关键字作为保留字,故可以把关键字作为一类特殊标示符来处理。也就是说,对于关键字不专设对应的转换图。但把它们(及其种别编码)预先安排在一张表格中(此表叫作保留字表)。当转换图识别出一个标识符时,就去查对这张表,确定它是否为一个关键字。 再次,如果关键字、标识符和常数之间没有确定的运算符或界符作间隔,则必须至少用一个空白符作间隔(此时,空白符不再是完全没有意义的了)。例如,一个条件语句应写为

电子电路设计与制作教学大纲

《电子电路设计与制作》教学大纲1.课程中文名称:电子电路设计与制作 2.课程代码: 3.课程类别:实践教学环节 4.课程性质:必修课 5.课程属性:独立设课 6.电子技术课程理论课总学时:256总学分:16 电子电路设计与制作学时:3周课程设计学分:3 7.适用专业:电子信息类各专业 8.先修课程:电路分析基础、模拟电子技术、数字电子技术、PCB电路设计一、课程设计简介 实验课、课程设计、毕业设计是大学阶段既相互联系又相互区别的三大实践性教学环节。实验课是着眼于实验验证课程的基本理论,培养学生的初步实验技能;毕业设计是针对本专业的要求所进行的全面的综合训练;而课程设计则是针对某几门课程构成的课程群的要求,对学生进行综合性训练,培养学生运用课程群中所学到的理论学以致用,独立地解决实际问题。电子电路设计与制作是电子信息类各专业必不可少的重要实践环节,它包括设计方案的选择、设计方案的论证、方案的电路原理图设计、印制板电路(即PCB)设计、元器件的选型、元器件在PCB板上的安装与焊接,电路的调试,撰写设计报告等实践内容。电子电路设计与制作的全过程是以学生自学为主,实践操作为主,教师的讲授、指导、讨论和研究相结合为辅的方式进行,着重就设计题目的要求对设计思路、设计方案的形成、电路调试和参数测量等展开讨论。 由指导教师下达设计任务书(学生自选题目需要通过指导教师和教研室共同审核批准),讲解示范的案例,指导学生各自对自己考虑到的多种可行的设计方案进行

比较,选择其中的最佳方案并进行论证,制作出满足设计要求的电子产品,撰写设计报告。需要注意是,设计方案的原理图须经Proteus软件仿真确信无误后,才能进行印刷电路图的制作,硬件电路的制作,以避免造成覆铜板、元器件等材料的浪费。电路系统经反复调试,完全达到(或超过)设计要求后,再完善设计报告。设计的整个过程在创新实验室或电子工艺实验室中完成。 二、电子电路设计与制作的教学目标与基本要求 教学目标: 1、通过课程设计巩固、深化和扩展学生的理论知识,提高综合运用知识的能力,逐步提升从事工程设计的能力。 2、注重培养学生正确的工程设计思想,掌握工程设计的思路、内容、步骤和方法。使学生能根据设计要求和性能参数,查阅文献资料,收集、分析类似电路的性能,并通过设计、安装、焊接、调试等实践过程,使电子产品达到设计任务书中要求的性能指标的能力。 3、为后续的毕业设计打好基础。课程设计的着眼点是让学生开始从理论学习的轨道上逐渐转向实际运用,从已学过的定性分析、定量计算的方法,逐步掌握工程设计的步骤和方法,了解工程设计的程序和实施方法;通过课程设计的训练,可以给毕业设计提供坚实的铺垫。 4、培养学生获取信息和综合处理信息的能力,文字和语言表达能力以及协调工作能力。课程设计报告的撰写,为今后从事技术工作撰写科技报告和技术文件打下基础。 5、提高学生运用所学的理论知识和技能解决实际问题的能力及其基本工程素质。 基本要求: 1、能够根据设计任务和指标要求,综合运用电路分析、电子技术课程中所学到的理论知识与实践操作技能独立完成一个设计课题的工程设计能力。 2、会根据课题需要选择参考书籍,查阅手册、图表等有关文献资料。能独立思考、深入钻研课程设计中所遇到的问题,培养自己分析问韪、解决问题的能力。

用结点电压法求解含源网络-电路分析基础课程设计

用结点电压法求解含源网络 周全(5030309773) 结点电压法是一种运用范围较广的分析方法,用结点电压法分析含源网络时需要注意的是: 1.列方程前,应把实际电压源模型等效变换为实际电流模型; 2.理想电压源去路中的电流不能忽略 3.与理想电流源串联的元件应看成短路; 4.将受控源按独立源处理,并用结点电压表示其控制量 一、常规题: 例:列出图中电路的结点电压方程 解:取与理想电压源去路所连的两个结点之一的①为参考结点,这时结点②的 电压=1V ,可作为已知量,因此不必列写结点②的结点电压方程,对结点③,④的结点电压方程为: 2322341(11)330.5111(11)30.50.20.51n n n n n n u u u u u u ?+++=+??++++=???????? 2?4 补充方程 2n u u =? 把 u 2=1V 和 u 2=-u n4 代入方程组,整理即得 3434293 n n n n u u u u +=???+=??

二、用结点电压分析法求解电路时碰到的非常规情况: 用结点电压分析法求解的常规情况很多书上都有相应的题目,但我在做题时发现了一道用节点电压法解。 例:用结点电压法求解图示电路u 和u 3 解:选结点③为参考结点,对①,②列方程 121211(21)2(11)5n n n n n u u u u u u +?=???++=??=? 1u 0 整理以上方程可得 12123262n n n n u u u u ?=???+=? 可以看出,该方程无解,此题说明,当电路中含有受控源时,有可能解不存在,而对一个实际的物理系统来说,解应该是存在的,这道题当时做时很容易想为什么解不出,却没想到这题模型本来就是不合实际电路的,而答案正是要我们发现这一点,所以我觉得这道题还是很巧妙的。

编译原理词法分析和语法分析报告+代码(C语言版)

词法分析 一、实验目的 设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。 二、实验要求 2.1 待分析的简单的词法 (1)关键字: begin if then while do end 所有的关键字都是小写。 (2)运算符和界符 : = + - * / < <= <> > >= = ; ( ) # (3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义: ID = letter (letter | digit)* NUM = digit digit* (4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。 2.2 各种单词符号对应的种别码: 输入:所给文法的源程序字符串。 输出:二元组(syn,token或sum)构成的序列。 其中:syn为单词种别码; token为存放的单词自身字符串; sum为整型常数。 例如:对源程序begin x:=9: if x>9 then x:=2*x+1/3; end #的源文件,经过词法分析后输出如下序列: (1,begin)(10,x)(18,:=)(11,9)(26,;)(2,if)…… 三、词法分析程序的算法思想: 算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。

3.1 主程序示意图: 主程序示意图如图3-1所示。其中初始包括以下两个方面: ⑴关键字表的初值。 关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下: Char *rwtab[6] = {“begin”, “if”, “then”, “while”, “do”, “end”,}; 图3-1 (2)程序中需要用到的主要变量为syn,token和sum 3.2 扫描子程序的算法思想: 首先设置3个变量:①token用来存放构成单词符号的字符串;②sum用来整型单词;③syn用来存放单词符号的种别码。扫描子程序主要部分流程如图3-2所示。

编译原理实验-词法分析器的设计说明

集美大学计算机工程学院实验报告 课程名称:编译原理班级: 指导教师:: 实验项目编号:实验一学号: 实验项目名称:词法分析器的设计实验成绩: 一、实验目的 通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。 二、实验容 编写一个词法分析器,从输入的源程序(编写的语言为C语言的一个子集)中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示) 三、实验要求 1、词法分析器的功能和输出格式 词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符 2 别单词的类型,将标识符和常量分别插入到相应的符号表中,增加错误处理等。 3、编程语言不限。

四、实验设计方案 1、数据字典 本实验用到的数据字典如下表所示:

3、实验程序 #include #include #include #include //判断读入的字符是否为字母 bool isLetter(char c){ if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')){ return true; } else return false; } //判断读入的字符是否为数字 bool isDigit(char c){ if(c >='0' && c <= '9'){ return true; } else return false; } //判断是否为关键字 bool isKey(char *string) { if(!strcmp(string,"void") || !strcmp(string,"if")|| !strcmp(string,"for")|| !strcmp(string,"wh ile") || !strcmp(string,"do")|| !strcmp(string,"return")|| !strcmp(stri ng,"break") || !strcmp(string,"main")|| !strcmp(string,"int")|| !strcmp(strin g,"float")|| !strcmp(string,"char") || !strcmp(string,"double")|| !strcmp(string,"String"))

用矩阵方法使网孔分析法通解-电路分析基础课程设计

用矩阵方法使网孔分析法通解 黄明康 5030309754 F0303025 在网络电路的学习中,我们一般使用结点分析法与网孔分析法。我们知道他们有各自的用途,但其实如果使用得当,只用其中的一个方法就可以解所有目前已经可解得网络电路。而在我看来这得当的使用就是巧妙运用数学。之所以如此,我认为是因为结点分析法的基础KCL与网孔分析法的基础KVL是相容的,即可以用结点分析法的地方就可以用网孔分析法解题。 先来看个例子,从网孔分析法说起,如图(1)所示,是一个非常适合用结点分析法与网孔分析法解题的网络。 正如上课时所做的,我们用网孔分析法解之,以im1、im2、im3为支路电流列出回路的矩阵方程,方程如式(2)。

最左边的矩阵是各回路的电阻矩阵,解出此方程,再根据VCR就能得出整个网路电路的各个参数。由于篇幅所限,也由于这已是大家皆知的常规方法,对于为何使用这种方法及其可用性、使用方法等在此不再冗述。 而我关心的是,这种方法是在这么一个可以说是完美的电路网络中运用的,所以一旦电路中的某个器件变了,可能使这种方法不可用。而其实上课时已经提出了这种问题,也给出了改进了的解题方法——运用网路电路的一些性质化解电路成可用网孔分析法的电路。 但这种方法在解题中会使不熟练的我不经意中掉入“陷阱”。我更愿意用以下的方法用数学解题,这样可以使我们不必太过计较概念。 对于我的方法,也请先看一个例子,如图(3): 这样,这个电路就不能单纯的运用网孔分析法了。那么按之前所述,运用网路电路的一些性质化解电路成可用网孔分析法的电路,然后解之,正如图(4)

a 和图(4) b 中所示过程。 然后得出电阻网络矩阵方程,解出所要的量。 对于以上的例题,也有所谓的虚网孔电流法如式(5): 其实,虚网孔电流法仅仅只是根据我们在网孔分析法的引出中得出的规律重新又列出了简单的方程组,这跟我们最初想要使用结点分析法和网孔分析法的初衷不符,初衷是按给出的网络电路图直接写出矩阵方程。这样就使我们可以更好的应对复杂的网络。 当然,也正是虚网孔电流法使我想起了网孔分析法的一般矩阵解法。仍就看图(3):

词法分析器的实现与设计

题目:词法分析器的设计与实现 一、引言................................ 错误!未定义书签。 二、词法分析器的设计 (3) 2.1词的内部定义 (3) 2.2词法分析器的任务及功能 (3) 3 2.2.2 功能: (4) 2.3单词符号对应的种别码: (4) 三、词法分析器的实现 (5) 3.1主程序示意图: (5) 3.2函数定义说明 (6) 3.3程序设计实现及功能说明 (6) 错误!未定义书签。 7 7 四、词法分析程序的C语言源代码: (7) 五、结果分析: (12) 摘要:词法分析是中文信息处理中的一项基础性工作。词法分析结果的好坏将直接影响中文信息处理上层应用的效果。通过权威的评测和实际应用表明,IRLAS是一个高精度、高质量的、高可靠性的词法分析系统。众所周知,切分歧义和未登录词识别是中文分词中的两大难点。理解词法分析在编译程序中的作用,加深对有穷自动机模型的理解,掌握词法分析程序的实

现方法和技术,用c语言对一个简单语言的子集编制一个一遍扫描的编译程序,以加深对编译原理的理解,掌握编译程序的实现方法和技术。Abstract:lexical analysis is a basic task in Chinese information processing. The results of lexical analysis will directly affect the effectiveness of the application of Chinese information processing. The evaluation and practical application show that IRLAS is a high precision, high quality and high reliability lexical analysis system. It is well known that segmentation ambiguity and unknown word recognition are the two major difficulties in Chinese word segmentation. The understanding of lexical analyse the program at compile, deepen of finite automata model for understanding, master lexical analysis program implementation method and technology, using C language subset of a simple language compilation of a scanned again compiler, to deepen to compile the principle solution, master compiler implementation method and technology. 关键词:词法分析器?扫描器?单词符号?预处理 Keywords: lexical analyzer word symbol pretreatment scanner 一、引言 运用C语言设计词法分析器,由指定文件读入预分析的源程序,经过词法分析器的分析,将结果写入指定文件。本程序是在Visual?Studio环境下,使用C语言作为开发工具。基于实验任务

编译原理C语言词法分析器

编译原理 C语言词法分析器 一、实验题目 编制并调试C词法分析程序。 a.txt源代码: ?main() { int sum=0 ,it=1;/* Variable declaration*/ if (sum==1) it++; else it=it+2; }? 设计其词法分析程序,能识别出所有的关键字、标识符、常数、运算符(包括复合运算符,如++)、界符;能过滤掉源程序中的注释、空格、制表符、换行符;并且能够对一些词法规则的错误进行必要的处理,如:标识符只能由字母、数字和下划线组成,且第一个字符必须为字母或下划线。实验要求:要给出所分析语言的词法说明,相应的状态转换图,单词的种别编码方案,词法分析程序的主要算法思想等。 二、实验目的 1、理解词法分析在编译程序中的作用; 2、掌握词法分析程序的实现方法和技术; 3、加深对有穷自动机模型的理解。 三、主要函数 四、设计 1.主函数void main ( )

2. 初始化函数void load ( ) 3. 保留字及标识符判断函数void char_search(char *word) 4. 整数类型判断函数void inta_search(char *word) 5. 浮点类型判断函数void intb_search(char *word)

6. 字符串常量判断函数void cc_search(char *word) 7. 字符常量判断函数void c_search(char *word) 同4、5函数图 8.主扫描函数void scan ( ) 五、关键代码 #include #include

电子课程设计报告书写要求

电子课程设计报告书写要 求 Prepared on 22 November 2020

电子课程设计报告书写要求 (以数字电子钟为例) 1、封面(按以前的封面格式) 2、任务书 3、正文 一、数字电子钟总体设计方案 依据数字电子钟的任务要求,设计的总体方案如图1-1所示 图1-1 数字电子钟总体方案 (下面对总体原理进行说明)。。。。。。 二、各模块原理设计和分析 1、时基电路模块设计 本设计的时基电路模块由两个独立分模块组成,一个是由555定时器和RC 构成的秒脉冲电路;另一个是由的晶振和CD4060构成的振荡器,分频器构成的2Hz时基电路。 (1)555构成的秒脉冲电路 设计的555秒脉冲电路如图2-1所示 (电路工作原理阐述。。。。。。) (画出555振荡波形参考课件,给图标2-2) 参数计算 (列出振荡周期表达式,给定R80、R81和C10参数计 算周期) (2)晶振和CD4060构成的振荡分频电路 本设计采用频率为的晶振和CD4060构成精确的时基电路,见图2-3。 电路原理。。。。。。

由于晶振的频率为=215Hz,通过CD4060的14级分频输出为2Hz,必须再经过一次2分频才能实现秒脉冲,设计的2分频电路如图2-4所示。。。。。。。 图 2-4 晶振秒脉冲时基电 路 2、计时电路模块设计 该模块分别由” 秒”计数电路、”分”计 数电路和”小时”计数电路构成;秒和分都是60进制,小时是24进制,设计采用CD4518做计数器。 (1) CD4518计数器分析 CD4518是双8421-BCD编码同步加法计数 器如图2-5所示。 。。。。。。 列出CD4518的功能表和时序图(2-6)和 文字说明 (2)60进制电路设计 分和秒都是60进制,电路原理和 结构相同。60进制电路如图2-7所示。 电路原理。。。。。。 (3)24进制电路设计

编译原理实验报告(词法分析器语法分析器)

编译原理实验报告

实验一 一、实验名称:词法分析器的设计 二、实验目的:1,词法分析器能够识别简单语言的单词符号 2,识别出并输出简单语言的基本字.标示符.无符号整数.运算符.和界符。 三、实验要求:给出一个简单语言单词符号的种别编码词法分析器 四、实验原理: 1、词法分析程序的算法思想 算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。 2、程序流程图 (1 (2)扫描子程序

3

五、实验内容: 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)&&(s<=122)) return(1); else return(0); } int digit(char s){ if((s>=48)&&(s<=57)) return(1); 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",&a[i]);

编译原理设计c语言的词法分析器

编译原理课程设计报告 题目: 学院: 教师: 姓名: 学号: 班级: 评分: 签字:

编译原理课程设计一:设计c语言的词法分析器 一、实验目的 了解高级语言单词的分类,了解状态图以及如何表示并识别单词规则,掌握状态图到识别程序的编程,加深对词法原理的理解。 二、实验要求 了解高级语言单词的分类,了解状态图以及如何表示并识别单词规则,掌握状态图到识别程序的编程。 三、实验设计 3.1.单词分类及表示 3.1.1 C语言的子集分类 (1)标识符:以字母开头的字母数字串 (2)整数或浮点型。 (3)保留字:for,while,do,else,if,static,int,sizeof,break,continue (4)运算符:+,-,*,/,%,>,<,=,!=,==,<=,>=,!,&,&&,||; (5)界符:"(",")",",",":",";","{","}" 3.1.2单词二元组(单词分类号、单词自身值)

3.2 词法分析器的设计 3.2.1算法设计 3.2.1.1概要设计 从文件中逐个读取字符,只要这五大类的状态序列则继续读取,否则回退字符,在对应类别进行查找,输出单元二次组至另一文件夹。

3.2.1.2状态图设计 3.2.2输入输出设计 输入:通过文件指针从文件中一个一个读取字符 输出:输出单词二元组至文件。格式为(种别码,值) 3.2.3主要函数 void Getchar(FILE *fp ) //读入一个字符 void GetBC(FILE *fp)//读入一个非空字符 void contacat()//连接字符 int letter()//判断是否为字母 int digit()//判断是否为字母 void retract(FILE *fp,char *c)//回退 int reserve (char **k)//处理保留字 int sysmbol(identifier *id)//处理标识符,查找符号表并存放位置若没有则添加int constant(constnumber *con)//存入常数表,并返回它在常数表中的位置

词法分析器课程设计

软件类课程设计报告 设计题目:词法分析器 学生学号: 专业班级:计算机科学与技术 学生姓名: 学生成绩: 指导教师(职称): 课题工作时间:至

信息工程学院软件类课程设计任务书 指导教师: 日期:年月日

成绩评定表学生姓名:学号:专业/班级:

目录 目录.................................................................................................................................................................. I 第一章概述.. (2) 1.1词法分析器概述 (2) 1.2课程设计内容 (2) 第二章词法分析器课程设计 (3) 2.1课程设计内容 (3) 2.2课程设计思想 (3) 2.3设计目的及说明 (3) 2.3.1程序设计范畴 (3) 2.3.2程序设计说明 (3) 第三章程序详细设计 (4) 3.1主要算法的设计 (4) 3.2算法的实现 (4) 3.2.1数据类型 (4) 3.2.2函数模块功能 (4) 3.3程序设计流程图 (4) 3.3.1设计流程图 (5) 3.3.2状态转换图 (5) 第四章运行结果及分析 (6) 4.1运行结果 (6) 4.2结果分析 (6) 4.3设计总结 (6) 结束语 (8) 参考文献 (8) 附录源程序 (9)

第一章概述 1.1词法分析器概述 词法分析器是通过词法分析程序对构成源程序的字符串从左到右的扫描,逐个字符地读入源程序字符并按照构词规则切分成一个一个具有独立意义的单词。并确定其属性(如保留字、标识符、运算符、界限符和常量等)。再把它们转换称长度统一的标准形式——属性字(TOKEN)。而词法分析器的功能是输入源程序,输出单词符号,并且词法分析器有两种处理结构:一种是把词法分析器作为主程序;另一种是把词法分析器作为语法分析程序调用的子程序。编译器也一样,它的输入是语言的源文件(一般可以是文本文件)对于输入的文件,首先要分离出这个输入文件的每个元素(关键字、变量、符号、)然后根据语言的文法,分析这些元素的组合是否合法,以及这些组合所表达的意思。程序设计语言和自然语言不一样,都是用符号来描述,每个特定的符号表示特定的意思,而且程序设计语言是上下文无关的。上下文无关就是某一个特定语句所要表达的意思和它所处的上下文没有关系,只有它自身决定。词法分析器的功能就是把输入的符号串整理成特定的词素。 1.2课程设计内容 运用c++语言设计词法分析器,由指定文件读入预分析的源程序,经过词法分析器的分析,将结果写入指定文件。本程序是在Visual Studio环境下,使用c++语言作为开发工具。基于实验任务的内容及目的,实现初步的需求分析,具备词法分析器的基本功能和整体构架。逐步细化其功能,做到相应模块的具体化。画出未成熟的流程图,确定整体设计的走向,在一定范围内约束编程活动,确保没有大的问题及缺陷存在,然后通过将来的具体的编程设计完善流程图。

编译原理词法分析器语法分析课程设计报告书

《编译原理》 课程设计 院系信息科学与技术学院 专业软件工程 年级 2011级 学号 20112723 姓名林苾湲 西南交通大学信息科学与技术学院 2013年 12月

目录 课程设计1 词法分析器 (2) 1.1 设计题目 (2) 1.2 设计容 (2) 1.3 设计目的 (2) 1.4 设计环境 (2) 1.5 需求分析 (2) 1.6 概要设计 (2) 1.7 详细设计 (4) 1.8 编程调试 (5) 1.9 测试 (11) 1.10 结束语 (13) 课程设计2 赋值语句的解释程序设计 (14) 2.1 设计题目 (14) 2.2 设计容 (14) 2.3 设计目的 (14) 2.4 设计环境 (14) 2.5 需求分析 (15) 2.6 概要设计 (16) 2.7 详细设计 (16) 2.8 编程调试 (24) 2.9 测试 (24) 2.10 结束语 (25)

课程设计一词法分析器设计 一、设计题目 手工设计c语言的词法分析器(可以是c语言的子集)。 二、设计容 处理c语言源程序,过滤掉无用符号,判断源程序中单词的合法性,并分解出正确的单词,以二元组形式存放在文件中。 三、设计目的 了解高级语言单词的分类,了解状态图以及如何表示并识别单词规则,掌握状态图到识别程序的编程。 四、设计环境 该课程设计包括的硬件和软件条件如下: 4.1.硬件 (1)Intel Core Duo CPU P8700 (2)存4G 4.2.软件 (1)Window 7 32位操作系统 (2)Microsoft Visual Studio c#开发平台 4.3.编程语言 C#语言 五、需求分析 5.1.源程序的预处理:源程序中,存在许多编辑用的符号,他们对程序逻辑功能无任何影响。例如:回车,换行,多余空白符,注释行等。在词法分析之前,首先要先剔除掉这些符号,使得词法分析更为简单。 5.2.单词符号的识别并判断单词的合法性:将每个单词符号进行不同类别的划分。单词符号可以划分成5中。 (1)标识符:用户自己定义的名字,常量名,变量名和过程名。 (2)常数:各种类型的常数。 (3) 保留字(关键字):如if、else、while、int、float等。 (4) 运算符:如+、-、*、<、>、=等。 (5)界符:如逗号、分号、括号等。 5.3.将所有合法的单词符号转化为便于计算机处理的二元组形式:(单词分类号,单词自身值);以图形化界面显示出来。 5.4.可选择性地将结果保存到文件中。 六、概要设计 6.1.数据类型 6.1.1.单词的分类:本词法分析器演示的是C语言的一个子集,故字符集如下:

电路分析基础课程设计

太原理工大学 《电路分析基础B》课程设计报告 设计名称有源低通滤波器 专业班级 学号 姓名

课程设计实验报告 实验题目:有源滤波器的设计 实验目的: 1. 掌握有源滤波电路的基本概念,了解滤波电路的选频特性、通频带等概念,加深对有源滤波电路的认识和理解。 2. 在Electronics Workbench环境下用仿真的方法来研究滤波电路,了解元件参数对滤波效果的影响。 3. 根据给定的低通和高通滤波器结构和元件,分析其工作特点及滤波效果,分析电路的频率特性。 4.利用低通滤波器搭建带通和带阻滤波器电路,观察和分析其输出波形特点,分析电路的频率特性。 实验仪器:双踪示波器、扫频仪、电路板、信号发生器、稳压电源、电阻、电容、运算放大器、电脑 有源滤波器的概念: 滤波器是一种能够通过一定频率信号而阻止或衰减其他频率信号的装置。能通过的频率构成通带,而被衰减的频率则构成滤波器的阻带。无源滤波器是由电感、电容和电阻构成的。但是由于受到尺寸和实际性能的限制,电感在某些频率范围是不适用的;如果用能模拟电感的有源器件来代替电感,则构成了有源滤波器,用有源部件代替电感得到有源滤波器的方法有多种,我们所用的有源部件为集成电路运算放大器。有源滤波器一般用电压转移函数来说明(s=jω)。在正弦稳态条件下,电压转移函数可写成H(jω)=▏H(j)▕ 其中▏H(j)▕是幅值或增益函数,是相位函数。 有源滤波器的分类: 按滤波器通带和阻带在频率内的位置,滤波器可分为:低通、高通、带通、带阻等类别。 低通滤波器: 低通滤波器是一种能让从直流到到截止频率的低频分量通过,同时衰减或抑制高频分量的器件。其特性用幅频特性曲线表示,此处幅频特性指的是电压转移

编译原理词法分析器

一、实验目的 了解词法分析程序的两种设计方法:1.根据状态转换图直接编程的方式;2.利用DFA 编写通用的词法分析程序。 二、实验内容及要求 1.根据状态转换图直接编程 编写一个词法分析程序,它从左到右逐个字符的对源程序进行扫描,产生一个个的单词的二元式,形成二元式(记号)流文件输出。在此,词法分析程序作为单独的一遍,如下图所示。 具体任务有: (1)组织源程序的输入 (2)拼出单词并查找其类别编号,形成二元式输出,得到单词流文件 (3)删除注释、空格和无用符号 (4)发现并定位词法错误,需要输出错误的位置在源程序中的第几行。将错误信息输出到屏幕上。 (5)对于普通标识符和常量,分别建立标识符表和常量表(使用线性表存储),当遇到一个标识符或常量时,查找标识符表或常量表,若存在,则返回位置,否则返回0并且填写符号表或常量表。 标识符表结构:变量名,类型(整型、实型、字符型),分配的数据区地址 注:词法分析阶段只填写变量名,其它部分在语法分析、语义分析、代码生成等阶段逐步填入。 常量表结构:常量名,常量值 2.编写DFA模拟程序 算法如下: DFA(S=S0,MOVE[][],F[],ALPHABET[]) /*S为状态,初值为DFA的初态,MOVE[][]为状态转换矩阵,F[] 为终态集,ALPHABET[] 为字母表,其中的字母顺序与MOVE[][] 中列标题的字母顺序一致。*/ { Char Wordbuffer[10]=“”//单词缓冲区置空 Nextchar=getchar();//读 i=0; while(nextchar!=NULL)//NULL代表此类单词 { if (nextcha r!∈ALPHABET[]){ERROR(“非法字符”),return(“非法字符”);} S=MOVE[S][nextchar] //下一状态 if(S=NULL)return(“不接受”);//下一状态为空,不能识别,单词错误 wordbuffer[i]=nextchar ;//保存单词符号 i++; nextchar=getchar(); } Wordbuffer[i]=‘\0’;

相关文档
相关文档 最新文档