编译原理试验参考指导书最终版.doc
《编译原理试验参考指导书最终版.doc》由会员分享,可在线阅读,更多相关《编译原理试验参考指导书最终版.doc(37页珍藏版)》请在咨信网上搜索。
编译办法 实验指引书 柴本成 赵晨 编写 浙江万里学院 .01 目 录 实验一 有限自动机构造与实现 1 实验二 词法分析器设计 3 实验三 语法分析-递归下降分析器 5 实验四 LL(1)文法预测分析表实现 6 附 录 9 附录一 实验成果提交与检查 9 附录二 实验报告参照格式 9 附录三 Visual C++上机环境简介 10 附录四 参照程序 13 实验一 有限自动机构造与实现 一、 实验目 1、 对的理解正规式和正规集以及有限自动机定义; 2、 纯熟掌握用状态转换图表达有限自动机办法。 二、 实验预习提示 1、 正规表达式就是一种形式化表达法,它可以表达单词符号构造,从而精准地定义单词符号集。正规表达式简称为正规式,它表达集合即为正规集。 2、 状态转换图是一张当输入不同内容时选取不同分析途径有向图。一种状态转换图可用于辨认一定字符串。 3、 有限自动机(FA)是更普通化状态转换图,可用来辨认正规集;分为DFA和NFA两种。 三、 实验内容 构造辨认如下字符串状态转换图,并将其编程实现。 1、 辨认标记符(以字母开始由字母和数字构成字符串,规定长度不超过10); 参照程序: #include <iostream.h> #include <string.h> //字符串解决头文献 //判断一种字符是不是字母 bool Isletter(char ch) { if(ch>='a' && ch<='z' || ch>='A' && ch<='Z') return true; return false; } //判断一种字符是不是数字 bool IsDigit(char ch) { if(ch>='0' && ch<='9') return true; return false; } //判断一种字符串是不是标记符 bool IsId(char *str) { if(!Isletter(str[0]) ) return false; int l=strlen(str); //计算字符串长度 for(int i=1;i<l;i++) if(Isletter(str[i]) || IsDigit(str[i])) continue; //如果是字母或数字就继续循环 else return false; //否则,返回不是字符串 return true; } void main() { char *str="1abc"; //初始化字符串,也可键盘输入 if(IsId(str)) cout<<"accept!"<<endl; else cout<<" not accept!"<<endl; } 2、 辨认实数(规定正负号可有可无,长度不超过20,不规定辨认用科学记数法表达实数)。 3、 (选做)辨认实数(包括科学计数法)。 四、 实验规定 1、 编程语言可用C/C++中任意一种; 2、 自行设计测试数据对程序进行测试,对输入字符串(以’#’作为结束符)如果能辨认,则显示“接受”,否则,显示“不接受”; 3、 书写实验报告;实验报告格式可参见附录《实验报告参照格式》。 实验二 词法分析器设计 一、 实验目 通过设计编制调试一种详细词法分析程序,加深对词法分析原理理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词词法分析办法。 编制一种读单词过程,从输入源程序中,辨认出各个具备独立意义单词,即基本保存字、标记符、常数、运算符、分隔符五大类。并依次输出各个单词内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误某些继续显示) 二、实验预习提示 1. 词法分析器功能和输出格式 词法分析器功能是输入源程序,输出单词符号。词法分析器单词符号经常表达到如下二元式(单词种别码,单词符号属性值)。本实验中,采用是一类符号一种别码方式。 2. 单词BNF表达 <标记符>-> <字母><字母数字串> <字母数字串>-><字母><字母数字串>|<数字><字母数字串>| <下划线><字母数字串>|ε <无符号整数>-> <数字><数字串> <数字串>-> <数字><数字串> |ε <加法运算符>-> + <减法运算符>-> - <不不大于关系运算符>-> > <不不大于等于关系运算符>-> >= 3. “超前搜索”办法 词法分析时,经常会用到超前搜索办法。如当前待分析字符串为“a>+”,当前字符为’>’,此时,分析器究竟是将其分析为不不大于关系运算符还是不不大于等于关系运算符呢?显然,只有懂得下一种字符是什么才干下结论。于是分析器读入下一种字符’+’,这时可知应将’>’解释为不不大于运算符。但此时,超前读了一种字符’+’,因此要回退一种字符,词法分析器才干正常运营。在分析标记符,无符号整数等时也有类似状况。 三、实验过程和指引 (一)准备: 1. 阅读课本关于章节,花一周时间明确语言语法,写出基本保存字、标记符、常数、运算符、分隔符和程序例。 2. 初步编制好程序。 3. 准备好多组测试数据。 (二)上课上机: 将源代码拷贝到机上调试,发现错误,再修改完善。 第二次上机调试通过。 (2,”main”) (5,”(“) (5,”)“) (5,”{“) (1,”int”) (2,”a”) (5,”,”) (2,”b”) (5,”;”) (2,”a”) (4,”=”) (3,”10”) (5,”;”) (2,”b”) (4,”=”) (2,”a”) (4,”+”) (3,”20”) (5,”;”) (5,”}“) (三)程序规定: 程序输入/输出示例: 如源程序为C语言。输入如下一段: main() { int a,b; a = 10; b = a + 20; } 规定输出如右图。 详细规定如下: 1. 辨认保存字:if、int、for、while、do、return、break、 continue等 2. 其她都辨以为标记符; 3. 常数为无符号整形数; 4. 运算符涉及:+、-、*、/、=、>、<、>=、<=、!= 5. 分隔符涉及:,、;、{、}、(、) (四)程序思路(仅供参照): 1. 定义某些:定义常量、变量、数据构造。 2. 初始化:从文献将源程序所有输入到字符缓冲区中。 3. 取单词前:去掉多余空白。 4. 取单词后:去掉多余空白(可选,看着办)。 5. 取单词:运用实验一成果读出单词每一种字符, 构成单词,分析类型。(核心是如何判断取单词结束?取到单词是什么类型单词?) 6. 显示成果。 (五)练习该实验目和思路: 程序开始变得复杂起来,也许是人们此前编过程序中最复杂,但相对于后来程序来说还是简朴。因而要认真把握这个过渡期练习。程序规模大概为200行。本实验和后来实验有关。通过练习,掌握对字符进行灵活解决办法。 (六)为了能设计好程序,注意如下事情: 1. 模块设计:将程序提成合理各种模块(函数),每个模块做详细同一事情。 2. 写出(画出)设计方案:模块关系简图、流程图、全局变量、函数接口等。 3. 编程时注意编程风格:空行使用、注释使用、缩进使用等。 三、上交: 1. 程序源代码(通过网络提交),详细提交方式见附录。 2. 已经测试通过测试数据3组(所有存在一种文本文献中通过网络提交,以“第一组输入/输出/第二组输入/输出/第三组输入/输出”顺序存储); 3. 实验报告:参照格式见附录 实验三 语法分析-递归下降分析器 一、 实验目 通过完毕语法分析-递归下降分析器程序,理解语法分析之一-递归下降分析法过程和作用。 为每个非终结符设计一种辨认子程序,寻找该非终结符也就是调用相应子程序。由于单词在语法分析中作为一种整体,故在语法辨认中仅使用其内码。在这里将词法分析作为语法分析一种子程序,当语法分析需要单词时,就调用相应词法分析程序获得一种单词。语法分析作用是辨认输入符号串与否是文法上定义句子,即判断输入符号串与否是满足“程序”定义规定。也就是当语法辨认程序从正常退出表达输入符号串是对的“程序”;若从出错退出,则输入符号串不是对的“程序”。出错时,可以依照读字符位置判断出错位置。 二、实验预习提示 在不含左递归和每个非终结符所有候选终结首符集都两两不相交条件下,通过构造一种不带回溯自上而下分析程序,这个分析程序是由一组递归过程(或函数)构成,每个过程(或函数)相应文法一种非终结符。 对于文法: : 三、实验内容 设计相应当文法递归下降分析器(参照教材P46代码),并将递归函数调用栈形式模仿来分析输入串 语法分析过程;在此,“#”为输入串分隔符。进行语法分析时,一方面将“#”和文法开始符号E压入栈终,当语法分析进行到栈中仅剩“#”而输入串扫描指针已指向输入串尾部“#”时,则语法分析成功,分析过程参见教材图3-12所示。 实验四 LL(1)文法预测分析表实现 一、实验目 通过本次实验,使学生对自顶向下语法分析基本概念、基本原理、基本办法等充分理解并掌握预测分析办法。 二、实验重要内容 1. 给定无左递归和无回溯文法,计算FIRST集合和FOLLOW集合,并构造出预测分析表。 文法如下:(在这里用e来表达空串) E->TA A->+TA A->e T->FB B->*FB B->e F->(E) F->i 2. 依照预测分析表,判断该文法与否为LL(1)文法。 三、实验过程和指引 对给定无左递归和无回溯上下文无关文法,按如下环节执行: 1. 构造First集合 对文法中每一种非终结符X构造FIRST(X),其办法是持续使用下述规则,直到每个集合FIRST不再增大为止。(注:对终结符a而言,FIRST(‘a’)={a},因而无需构造。) 1) 若有产生式X→a…,且a∈VT ,则把a加入到FIRST(X)中;若存在X→ε,则将ε也加入到FIRST(X)中。 2) 若有X→Y…,且Y∈VN,则将FIRST(Y)中所有非ε元素(记为“\{ε}”)都加入到FIRST(X)中;若有X→Y1Y2…Yk,且Y1~Yi−1都是非终结符,而Y1~Yi−1候选式均有ε存在,则把FIRST(Yj)所有非ε元素都加入到FIRST(X)中(j=1,2,…,i);特别是当Y1~Yk均具有ε产生式时,应把ε也加到FIRST(X)中。 2. 构造FOLLOW集合 对文法G[S]每个非终结符A构造FOLLOW(A)办法是持续使用下述规则,直到每个FOLLOW不再增大为止。 1) 对文法开始符号S,置#于FOLLOW(S)中(由语句括号“#S#”中S#得到)。 2) 若有A→αBβ(α可为空),则将FIRST(β)\{ε}加入到FOLLOW(B)中。 3) 若有A→αB或A→αBβ,且βε(即ε∈FIRST(β)),则把FOLLOW(A)加到FOLLOW(B)中(此处α也可为空)。 3. 构造预测分析表M 1) 对文法G[S]每个产生式A→α执行如下2)、3)步。 2) 对每个终结符a∈FIRST(A),把A→α加入到M[A,a]中,其中α为具有首字符a候选式或为惟一候选式。 3) 若ε∈FIRST(A), 则对任何属于FOLLOW(A)终结符b,将A→ε加入到M[A,b]中。 4) 把所有无定义M[A,a]标记为“出错”。 4. 判断该文法与否为LL(1)文法 若预测分析表M无多重定义,则该文法为LL(1)文法;否则,该文法不是LL(1)文法。 四、实验提示 1. 为了简化实验过程,咱们这里假定要分析文法都是无左递归;即咱们编程序时无需考虑文法与否左递归了。下面给出文法构造体和文法符号集合程序定义 #define MAX_GRAM_LEN 255 //文法符号最大长度 #define MAX_ELE_NUM 40 //文法符号最大个数 #define MAX_GRAM_ELE_NUM 300 //所有文法符号个数 //--定义文法构造体 -- typedef struct { char mSetence[MAX_GRAM_LEN]; }grammerElement; grammerElement GrammerSet[MAX_GRAM_ELE_NUM]; //定义文法符号构造体 typedef struct { int len; char ele[MAX_ELE_NUM]; }simpleGroup; simpleGroup groupFirst[MAX_ELE_NUM]; // First集 simpleGroup groupFollow[MAX_ELE_NUM]; // Follow集 int grammerNum; //文法符号个数 char VTSet[MAX_ELE_NUM]; // 终结符 char VNSet[MAX_ELE_NUM]; // 非终结符 int VNProduceZ[MAX_ELE_NUM]; // 产生式 int vtSetLen; //终结符个数 int vnSetLen; //非终结符个数 char startedSign; //开始符号 2. 为了便于分析程序,在实验中规定把分析文法保存在一种文本文献中,同步输出成果也保存在一种文本文献中。 3. 在附录中,咱们给出了求First集参照程序。人们可以参照该程序,并在此基本上写出求Follow集以及构造分析表程序。 附 录 附录一 实验成果提交与检查 1. 提交实验成果 每个实验成果涉及两项:实验报告和程序源代码。 实验报告中请写明姓名、班号、学号、Email等个人信息,以便遇到问题时教师可以及时与你联系。 实验报告格式可参见《实验报告参照格式》,也可自行拟定报告格式,但规定实验报告中至少包括如下内容:实验题目及内容,所用状态转换图,重要数据构造设计,重要算法流程,核心代码段及注释,所用测试数据及测试成果,以及实验中遇到问题和解决办法。 请把实验成果放入一种目录中,并将上述所有文献打包成rar文献,文献名为“自己学号.rar”,例如“01001.zip”,通过ftp或Email提交。 2. 检查方式与评分原则 在人们提交实验后,咱们将对提交程序进行测试。评分重要原则是实验报告以及程序输出与原则输出相符合限度。 附录二 实验报告参照格式 以实验二(词法分析器设计为例),实验报告格式如下: 一、实验目与任务 编制一种读单词过程,从输入源程序中,辨认出各个具备独立意义单词,即基本保存字、标记符、常数、运算符、分隔符五大类。并依次输出各个单词内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误某些继续显示) 二、实验环节 1. 仔细阅读实验规定和书上有关内容,写出基本保存字、标记符、常数、运算符、分隔符和要测试程序例。 (在这里写出基本保存字、标记符、常数、运算符、分隔符和要测试程序实例) 2. 程序功能描述。 (在这里描述你程序功能) 3. 程序模块描述。 (在这里写出:重要全局变量及其用途,重要函数定义、功能、参数与返回值含义) 4. 核心程序代码 (在这里写出:实验中核心程序代码,不用把所有代码都写上) 三、实验总结 (可以从如下几种方面来总结:你在编程过程中花时多少?时间是怎么分派?多少时间在思考问题?遇到了哪些难题?你是怎么克服?你对你程序评价?你收获有哪些?) 附录三 Visual C++上机环境简介 上机实验环境亦可选取Microsoft Visual C++(如下简称VC)。VC是美国微软公司生产基于其Windows系统软件开发工具。它具备使用灵活,并与32位Windows内核(使用于Windows /Windows XP)高度兼容特点,从而被Windows程序员们广泛使用。同步,VC同样可以加工解决C语言程序,与原则ANSI C语言兼容。VC提供了一种控制台操作方式,初学者使用它应当从这里开始。下面咱们将对使用VC编写简朴控制台程序作一种最初步简介。 一、控制台程序简介 Win32控制台程序(Win32 Console Application)是一类Windows程序,它不使用复杂图形顾客界面,程序与顾客交互时通过一种原则正文窗口,通过几种原则输入输出流(I/O Streams)进行。它们分别是stdin(原则输入),stdout(原则输出)以及stderr(原则错误输出)。这些流都是ANSI C语言原则库提供,通过printf(…)等函数可以访问这些流。一种最简朴控制台程序如下: /* hello.c */ #include<stdio.h> /* 包括使用原则输入输出头文献声明 */ int main() /* 主函数 */ { printf(“Hello,World!\n”); /* 向原则输出stdout输出一种字符串 */ return 0; /* 主函数返回 */ } 该程序运营成果如图3-4所示。 图3-4 控制台程序运营成果 图中显示黑色窗口称为控制台窗口,程序输入、输出均在这个窗口中进行。 二、使用VC编写控制台程序 很简朴,只需要按照下面几种环节进行: 1. 打开MSVC集成开发环境。双击桌面或“开始”菜单中Microsoft Visual C++6.0,不久将看到VC编辑窗口,如图3-5: 图3-5 VC启动界面 2. 选取菜单“File | New”,在弹出对话框中 1) 单击上方选项卡“File”, 2) 选取“C++ Source File”, 3) 在“File name”一栏中填写文献名例如hello.c, 4) 在“Location”一栏中填写你想把文献存储位置(目录)。然后按“OK”。见图3-6。 注意: 第3)步中一定写明扩展名“.c”(不要用“.cpp”。那样VC将按C++方式编译,C++与C有某些不兼容性); 第4)步中指定你自己目录,不要使用系统缺省目录或者随便放在根目录或者其她目录下。 图3-6 应用程序向导主界面 3. 在右侧窗口中键入程序内容,然后点击图标存盘。进入VC编辑界面,如图3-7。 图3-7 VC编辑界面 4. 试编译。点击图标,或者选取菜单“Build | Build”(启动程序加工,这样系统将持续进行编译和连接操作。另一种更稳妥方式是先做编译,检查无误后再做连接)。这时VC将弹出一种对话窗口,阐明这个命令需要一种工程(Project),问:与否创立一种默认工程?点击“Yes”。如图3-8所示。 图3-8 与否创立一种工程 5. 编辑器中编译窗口开始显示编译成果。如果显示“hello.exe -- 0 error(s),0 warning(s)”, 则表达编译已经通过! 6. 点击快捷工具栏上红色感叹号(或者选取菜单“Build | Execute”或按Ctrl-F5),查看运营成果(VC将自动打开一种显示成果窗口,如上图3-4所示)。 三、如何调试程序 运用VC编写程序,还需要学会如何调试程序。咱们都会发现,在编写较长程序时,可以一次成功而不具有任何错误决非易事(固然,勉励同窗们以此为目的,进行长期大量练习)。对于程序中错误,VC提供了易用且有效调试手段。在工具栏上单击鼠标右键,在弹出菜单中对“Debug”项打勾,发现如图3-9所示许多按钮。其中,较惯用工具备:单步跟踪进入子函数(Step Into),单步跟踪跳过子函数(Step Over),运营至当前函数末尾(Step Out)以及观测变量值(Watch)等,这些VC中惯用调试功能详见关于参照文献。 图3-9 VC调试工具条 附录四 参照程序 1.词法分析器设计-参照程序 /*cifa fenxi chengxu*/ #include <stdio.h> #include "stdlib.h" #include <string.h> #define N 100 //定义要分析标记符或常数最大个数 #define M 20 //标记符长度 char *sourceFile="1.txt"; //定义进行词法分析源文献 char *key[8]={"if","else","for","while","do","return","break","continue"};//核心字 char *border[6]={",",";","{","}","(",")"}; //界符定义 char *arithmetic[4]={"+","-","*","/"}; //算术运算符定义 char *relation[6]={"<","<=","=",">",">=","<>"};//关系运算符定义 char *consts[N]; //常数定义 char *label[N]; //标记符 int constnum=0,labelnum=0; //constnum-常数个数;labelnum-标记符个数 //判断一种字符是不是字母 int Isletter(char ch) { if(ch>='a' && ch<='z' || ch>='A' && ch<='Z') return 1; return 0; } //判断一种字符是不是数字 int IsDigit(char ch) { if(ch>='0' && ch<='9') return 1; return 0; } //判断单词符号类型 int search(char searchchar[],int wordtype) { int i=0; switch (wordtype) { case 1:for (i=0;i<=7;i++) { if (strcmp(key[i],searchchar)==0) //返回详细核心字 return(i+1); } case 2:{for (i=0;i<=5;i++) { if (strcmp(border[i],searchchar)==0) //返回详细界符 return(i+1); } return(0); } case 3:{for (i=0;i<=3;i++) { if (strcmp(arithmetic[i],searchchar)==0)//返回详细算术运算符 { return(i+1); } } return(0); } case 4:{for (i=0;i<=5;i++) { if (strcmp(relation[i],searchchar)==0) //返回详细关系运算符 { return(i+1); } } return(0); } case 5:{for (i=0;i<=constnum;i++) { if (strcmp(consts[i],searchchar)==0) //返回详细整型常数 { return(i+1); } } consts[i-1]=(char *)malloc(sizeof(searchchar)); strcpy(consts[i-1],searchchar); constnum++; return(i); } case 6:{for (i=0;i<labelnum;i++) { if(label[i]!=NULL){ if (strcmp(label[i],searchchar)==0) //返回标记符 return(i+1); } } label[i-1]=(char *)malloc(sizeof(searchchar)); strcpy(label[i-1],searchchar); labelnum++; return(i); } } return -1; } //标记符或核心字 char alphaprocess(char buffer,FILE* fp) { int atype; int i=-1; char alphatp[M]; while ((Isletter(buffer))||(IsDigit(buffer))) { alphatp[++i]=buffer; buffer=fgetc(fp); } alphatp[i+1]='\0'; if (atype=search(alphatp,1)) //输出核心字 printf("%s (1,%d)\n",alphatp,atype-1); else { atype=search(alphatp,6); //输出标记符 printf("%s (6,%d)\n",alphatp,atype-1); } return(buffer); } //常数解决 char digitprocess(char buffer,FILE* fp) { int i=-1; char digittp[M]; int dtype; while ((IsDigit(buffer))) { digittp[++i]=buffer; buffer=fgetc(fp); } digittp[i+1]='\0'; dtype=search(digittp,5); //输出整型常数 printf("%s (5,%d)\n",digittp,dtype-1); return(buffer); } //其他解决(运算符,界符等) char otherprocess(char buffer,FILE* fp) { int i=-1; char othertp[M]; int otype,otypetp; othertp[0]=buffer; othertp[1]='\0'; if (otype=search(othertp,3)) { printf("%s (3,%d)\n",othertp,otype-1); buffer=fgetc(fp); goto out; } if (otype=search(othertp,4)) { buffer=fgetc(fp); othertp[1]=buffer; othertp[2]='\0'; if (otypetp=search(othertp,4)) { printf("%s (4,%d)\n",othertp,otypetp-1); goto out; } else othertp[1]='\0'; printf("%s (4,%d)\n",othertp,otype-1); goto out; } if (buffer==':') { buffer=fgetc(fp); if (buffer=='=') printf(":= (2,2)\n"); buffer=fgetc(fp); goto out; } else { if (otype=search(othertp,2)) { printf("%s (2,%d)\n",othertp,otype-1); buffer=fgetc(fp); goto out; } } if ((buffer!='\n')&&(buffer!=' ')) printf("%c error,not a word\n",buffer); buffer=fgetc(fp); out: return(buffer); } void main() { int i; FILE *fp; //文献指针,指向要分析源程序 char cbuffer; //保存最新读入字符 for (i=0;i<=N;i++) { label[i]=NULL; //初始化标记符 consts[i]=NULL; //初始化常数 }; if ((fp=fopen(sourceFile,"rb"))==NULL) //判断源文献与否存在 printf("文献%s不存在",sourceFile); else { cbuffer = fgetc(fp); //读入字符 while (cbuffer!=EOF) //如果文献没有结束,就始终循环 { if (Isletter(cbuffer)) //若为字母 cbuffer=alphaprocess(cbuffer,fp); else if (IsDigit(cbuffer)) //若为数字 cbuffer=digitprocess(cbuffer,fp); else cbuffer=otherprocess(cbuffer,fp); } printf("over\n"); getchar(); } } 2. LL(1)文法预测分析表实现-参照程序 /************************程序阐明********************************* grammer.txt用于输入相应文法,第一行字母表达起始字符。 ****************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_GRAM_LEN 255 //文法符号最大长度 #define MAX_ELE_NUM 40 //文法符号最大个数 #define MAX_GRAM_ELE_NUM 300 //所有文法符号个数 //--文献指针- FILE* grammerFile; char* grammerFileName="grammer.txt"; //输入文法文献 FILE* testFile; char* testFileName="outputData.txt"; //输出文献 //--文法构造体 -- typedef struct { char mSetence[MAX_GRAM_LEN]; }grammerElement; grammerElement GrammerSet[MAX_GRAM_ELE_NUM]; typedef struct { int len; char ele[MAX_ELE_NUM]; }simpleGroup; simpleGroup groupFirst[MAX_ELE_NUM]; // First集 simpleGroup groupFollow[MAX_ELE_NUM]; // Follow集 int grammerNum; //文法符号个数 char VTSet[MAX_ELE_NUM]; // 终结符 char VNSet[MAX_ELE_NUM]; // 非终结符 int VNProduceZ[MAX_ELE_NUM]; // 产生式 int vtSetLen; int vnSetLen; char startedSign; //开始符号 void readInGrammer(); void cal_first_set(); //计算First集 void main() { //一方面读入文法文献 if((grammerFile=fopen(grammerFileName,"rb"))==NULL) { printf("open file:grammerFile error.\n"); return; } if((testFile=fopen(testFileName,"wb"))==NULL) { printf("open file:testFile error.\n"); return; } readInGrammer(); //计算First集,Follow集 cal_first_set(); //GrammerSet cal_follow_set(); //GrammerSet fclose(grammerFile); fclose(testFile); getchar(); } //从文献中读入文法 void readInGrammer() { char tmpChar; char tmpStr[MAX_GRAM_LEN]; int tmpIndex; int vtIndex,vnIndex; int i,j; tmpIndex=0;vtIndex=0;vnIndex=0; fscanf(grammerFile,"%c\r\n",&startedSign); while(!feof(grammerFile)) { if(fscanf(grammerFile,"%c->%s\r\n",&tmpChar,&tmpStr)!=2) break; GrammerSet[tmpIndex].mSetence[0]=tmpChar; GrammerSet[tmpIndex].mSetence[1]='\0'; strcat(GrammerSet[tmpIndex].mSetence,tmpStr); tmpIndex++; for(i=0;i<vnIndex;i++) if(tmpChar==VNS- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 试验 参考 指导书 最终版
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文