C_minus语言词法分析器的设计.doc

上传人:人*** 文档编号:559251056 上传时间:2023-05-31 格式:DOC 页数:5 大小:103.01KB
返回 下载 相关 举报
C_minus语言词法分析器的设计.doc_第1页
第1页 / 共5页
C_minus语言词法分析器的设计.doc_第2页
第2页 / 共5页
C_minus语言词法分析器的设计.doc_第3页
第3页 / 共5页
C_minus语言词法分析器的设计.doc_第4页
第4页 / 共5页
C_minus语言词法分析器的设计.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《C_minus语言词法分析器的设计.doc》由会员分享,可在线阅读,更多相关《C_minus语言词法分析器的设计.doc(5页珍藏版)》请在金锄头文库上搜索。

1、实验一:词法分析程序的设计与实现 姓名: 专业班级: 学 号: 一、实验目的设计一个简单的词法分析器,从而进一步加深对词法分析器工作原理的理解。二.、实验内容编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析程序。三、实验要求根据PL/0语言文法,编制词法分析程序GETSYM完成以下功能:1)从键盘读入数据,分析出一个单词。2)返回单词种别(用整数表示),3)返回单词属性(不同的属性可以放在不同的全局变量中)。四.、实验步骤1.采用C语言,设计GETSYM ,实现该算法2.编制测试程序(主函数main)。3.调试程序:输入一组单词,检查输出结果。五.、实验设计分析1. 词法的正

2、规式描述S=aA|aA=(aA|dA)(a|d)2. 变换后的正规文法SaASaAaAAdAAaAd3. 词法分析程序的程序代码#include stdafx.h#include #includeusing namespace std;#define MAX 17 char ch = ;string key17=const,long,float,double,void,main,if,else,then,break,int,char,include,for,while,printf,scanf; int Iskey(string c) /关键字判断 int i; for(i=0;iMAX;i+

3、) if(pare(c)=0) return 1; return 0;int IsLetter(char c) /判断是否为字母 if(c=a)|(c=A) return 1; else return 0;int IsLetter1(char c) /判断是否为af字母 if(c=a)|(c=A) return 1; else return 0;int IsDigit(char c) /判断是否为数字 if(c=0&c=9) return 1; else return 0;void scan(FILE *fpin) string arr=; while(ch=fgetc(fpin)!=EOF)

4、 arr=; if(ch= |ch=t|ch=n) else if(IsLetter(ch)|ch=_) arr=arr+ch;ch=fgetc(fpin); while(IsLetter(ch)|IsDigit(ch)if(ch=A) ch=ch+32; arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); if (Iskey(arr)coutarrt关键字endl; else coutarrt普通标识符=0&ch=0&ch=7) flag=1; arr=arr+ch; ch=fgetc(fpin);else if(ch=x|ch=X)f

5、lag=2;arr=arr+ch; ch=fgetc(fpin);while(IsDigit(ch)|IsLetter1(ch) arr=arr+ch; ch=fgetc(fpin);else if(ch= |ch=,|ch=; )coutarrt整数0endl;fseek(fpin,-1L,SEEK_CUR); if(flag=1) coutarrt八进制整数endl;else if(flag=2) coutarrt十六进制整数endl; else arr=arr+ch;ch=fgetc(fpin);while(IsDigit(ch) arr=arr+ch; ch=fgetc(fpin);

6、fseek(fpin,-1L,SEEK_CUR); coutarrt十进制整数endl; else switch(ch) case+: case- : case* : case= : case| : case/ :coutcht运算符endl;break; case( : case) : case : case : case; : case. : case, : case : case :coutcht界符endl;break; case: :ch=fgetc(fpin); if(ch=) cout:=t运算符endl; else cout:t界符 :ch=fgetc(fpin); if(ch

7、=) cout=t运算符)coutt输入控制符endl; else coutt运算符endl; fseek(fpin,-1L,SEEK_CUR); break; case :ch=fgetc(fpin); if(ch=)cout=t运算符endl; else if(ch=)coutt输出控制符) coutt运算符endl; elsecoutt运算符endl; fseek(fpin,-1L,SEEK_CUR); break; default : coutcht无法识别字符endl; void main() char in_fn30; FILE * fpin; coutin_fn; if(fpin=fopen(in_fn,r)!=NULL) break; else cout文件路径错误!请输入源文件名(包括路径和后缀名):; coutn分析如下:nb)c=a;elsec=b;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号