首页 C语言 词法分析器设计_编译原理

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

举报
开通vip

C语言 词法分析器设计_编译原理词法分析器设计 一、 问题描述 处理c语言源程序,过滤掉无用符号,判断源程序中单词的合法性,并分解出正确的单词,以二元组形式存放在文件中。 二、 实验思路 1、本实验思路很简单,就是逐个匹配测试文件的每个字符与程序中所标识的符号,总共分为几个比较模块,先是字母数字模块,可以识别出C语言程序中保留字,标识符和数字,其次是运算符和界符模块,可以识别出运算符和界符,最后一个模块就是未标识的符号,此时程序会报错,然后依次循环,直到文件结束。 2、采用结构体来存储符号的类型和符号本身: struct point {    ...

C语言  词法分析器设计_编译原理
词法 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 器设计 一、 问题描述 处理c语言源程序,过滤掉无用符号,判断源程序中单词的合法性,并分解出正确的单词,以二元组形式存放在文件中。 二、 实验思路 1、本实验思路很简单,就是逐个匹配测试文件的每个字符与程序中所标识的符号,总共分为几个比较模块,先是字母数字模块,可以识别出C语言程序中保留字,标识符和数字,其次是运算符和界符模块,可以识别出运算符和界符,最后一个模块就是未标识的符号,此时程序会报错,然后依次循环,直到文件结束。 2、采用结构体来存储符号的类型和符号本身: struct point {    char *kind; char value[10]; }; 另外采用C语言文件指针和相关 函数 excel方差函数excelsd函数已知函数     2 f x m x mx m      2 1 4 2拉格朗日函数pdf函数公式下载 处理待测试文件以及测试结果文件。 3、程序中的函数名指示含义:keyword----保留字,Identifier---标识符,Digit---数字,CaculatorIdentifier---运算符,PatitionIdentifier---界符 4、程序中所定义的符号采用char类型,只能对C语言中最常见的单字符的符号进行定义,如‘+’,‘<’,而对于“<=”,”>=”及“++”,“--”则不能处理。因此本程序并不能实现对所有符号的归类。 三、 实验代码 #include #include char keywordtable[30][10]= {"int","char","float","double","signed","unsigned", "if","else","break","while","return","switch", "case","continue","for","default","void","const", "static","long","struct","auto","register","typedef", "enum","extern","short","goto","sizeof","do", }; char caculatetable[15]={'+','-','*','/','%','(',')','=','>','<','#'}; char partitiontable[10]={',',';','.',' ','{','}','"','[',']'}; struct point {    char *kind; char value[10]; }; int IsLetter(char ch) {    if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')    return 1; else     return 0; } int IsDigit(char ch) { if(ch>='0'&&ch<='9')    return 1; else     return 0; } int Reserve(char strToken[30]) { for(int i=0;i<30;i++) if(strcmp(keywordtable[i],strToken)==0)    return 1; return 0; } void operate(FILE *fp,struct point a) { fp=fopen("d:测试结果.txt","a+"); fprintf(fp,"< %s , %s >\n",a.kind,a.value); fclose(fp); } void Retract(FILE *fp)//顺序读写 {    fseek(fp,-1L,1);} void Print(struct point a) {    printf("< %s,  \"%s\" >\n",a.kind,a.value);} int IsCaculator(char ch) { int i; for(i=0;i<15;i++) if(caculatetable[i]==ch)    return 1; return 0; } int IsPatition(char ch) {    int i; for(i=0;i<10;i++) if(partitiontable[i]==ch)    return 1; return 0; } int IsSpecial(char ch) { if(ch=='+'||ch=='-'||ch=='/'||ch=='%'||ch=='>'||ch=='<'||ch=='*'||ch=='=') return 1; return 0; } int main() { int code; struct point result; char strToken[30]; char ch; char *p; FILE *fp,*fq; fp=fopen("d:测试文件.txt","r"); if(fp==NULL) {    printf("file does not exit!!"); return -1; } while(1) { p=strToken; ch=fgetc(fp); if(feof(fp))//输入输出函数,检查文件是否结束,如结束,则返回非零值,否则返回0 break; if(ch==' ')    continue; if(IsLetter(ch)) { while(IsLetter(ch)||IsDigit(ch)) { *p=ch; p++; *p='\0'; ch=fgetc(fp); if(feof(fp)) return -1; } Retract(fp);//顺序读取 code=Reserve(strToken); if(code==1) {    result.kind="keyword";//保留字 strcpy(result.value,strToken); operate(fq,result); Print(result); } else {    result.kind="Identifier";//标识符 strcpy(result.value,strToken); operate(fq,result); Print(result); } } else if(IsDigit(ch)) { while(IsDigit(ch)) {    *p=ch; p++; *p='\0'; ch=fgetc(fp); if(feof(fp)) return -1; } Retract(fp); result.kind="Digit";//数字 strcpy(result.value,strToken); operate(fq,result); Print(result); } else  if(IsPatition(ch)||IsCaculator(ch)) {    if(IsPatition(ch)) {  result.kind="PatitionIdentifier";//界符 *p=ch; p++; *p='\0'; strcpy(result.value,strToken); operate(fq,result); Print(result); } if(IsCaculator(ch)) { char ch2; ch2=fgetc(fp); if(!IsCaculator(ch2)) Retract(fp); result.kind="CaculatorIdentifier";//运算符 *p=ch; p++; *p='\0'; if(IsSpecial(ch)&&ch2=='=') {    *p=ch2; p++; *p='\0'; } if((ch=='>'||ch=='<'||ch=='+'||ch=='-')&&ch2==ch) {    *p=ch2; p++; *p='\0'; } strcpy(result.value,strToken); operate(fq,result); Print(result); } } else {        if(ch=='\n')    continue; result.kind="Error!!";//其他未声明的  均报错 strcpy(result.value,strToken); operate(fq,result);//输出到测试结果文件 printf("Error occurs! at %c\n",ch);        }    } return 1; } 四、 实验结果 图1  实验结果 测试文件: 图2  测试文件 测试结果文件: 图3  测试结果文件 五、 实验 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 本实验写的较为简单,只是 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示了一些最常见的C语言符号,像是保留字,英文字母,数字,算术运算符和几个关系运算符,另外还有一些常见界符,如‘,’,‘;’,‘[’,‘]’,因为定义符号时采用char,这只适用单个字符的符号,而之后并没有再声明其他带有多个符号的符号,也就没有采用string类型或char[][]数组类型,所以像是测试文件中的注释符‘/*’,该程序就识别不出来,会提示报错;另外本实验在辨别符号时,采用穷举,没有用什么特别快捷的搜索方法,对一些较为简单的C语言程序,还是能识别出的。希望之后能改进程序。
本文档为【C语言 词法分析器设计_编译原理】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_005190
暂无简介~
格式:doc
大小:34KB
软件:Word
页数:15
分类:互联网
上传时间:2019-05-28
浏览量:25