实验一__识别无符号数的词法分析器设计实现.docVIP

实验一__识别无符号数的词法分析器设计实现.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验一__识别无符号数的词法分析器设计实现

实验一 识别无符号数的词法分析器设计实现 学院:计算机学院 班级: 学号: 一、实验目的与要求 通过编写并上机调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将其分解成各类单词的词法分析方法。 二、实验内容 选取无符号数的算术四则运算中的各类单词为识别对象,要求将其中的各个单词识别出来。 输入:由无符号数和+,-,*,/, ( , ) 构成的算术表达式,如1.5E+2-100。 输出:对识别出的每一单词均单行输出其类别码(无符号数的值暂不要求计算)。 单词符号 类别码(CLASS) 单词值(VALUE) 无符号数 1 数字值 + 2 无值 — 3 无值 * 4 无值 / 5 无值 ( 6 无值 ) 7 无值 如1 (对应1.5E+2) 3 (对应-) 1 (对应100) 三、程序源代码: #includeiostream using namespace std; #define M 101 //最多可输入的字符数 #define UNSIGNEDNUMBER 1 //无符号数 #define PLUS 2 //加号 #define SUBTRACT 3 //减号 #define MULTIPLY 4 //乘号 #define DIVIDE 5 //除号 #define LEFTBRACKET 6 //左括号 #define RIGHTBRACKET 7 //右括号 class AccidenceAnalysis //定义词法分析器类 { private: char testStr[M],*p; //私有数据 public: AccidenceAnalysis(); //构造函数 void InputStr(); //输入函数 void Output(int a,char *p1,char *p2); //输出函数 int IsAcceptantCharacter(char *p); //判断输入字符是否属于字符集 int IsOperator(char *p); //判断字符是否是字符集[+,-,*,/,(,)]中的字符 int IsUnsignedNum(char *p); //判断字符是否是0--9的整数 void AbnormityExamine(char a[]); void IdentifyOperator(char *p); //识别字符集[+,-,*,/,(,)]中的字符 void AssortIdentify(); //对输入字符分类识别 }; AccidenceAnalysis::AccidenceAnalysis() { int i; for(i=0;iM;i++) testStr[i]=\0; p=testStr[0]; //指针P指向字符数组首元素 } void AccidenceAnalysis::InputStr() { cout\t请按要求输入您要分析的语句,所输字符应在要求范围(不超过M)之内,并按回车键运行:; char ch; int i=0; while((ch=cin.get())!=\n) { testStr[i]=ch; i++; } AbnormityExamine(testStr); } void AccidenceAnalysis::AbnormityExamine(char a[]) { int j=0; char *ptr1,*ptr2; ptr1=a; ptr2=a; while(*ptr2!=\0) { j++; if(!IsAcceptantCharacter(ptr2)) { cout\t您输入的第j个字符 *ptr2 不可以被此程序识别!\ 将被跳过.endl; ptr2++; continue; } else { *ptr1=*ptr2; ptr1++; ptr2++; } } while(ptr1=ptr2) { *ptr1=\0; ptr1++; } } void AccidenceAnalysis::Output(int a,char *p1,char *p2) { cout\t类别码:a 单词值:; while(p1=p2) { cout*p1; p1++; } coutendl; } int AccidenceAnalysis::IsOperator(char *p) { c

文档评论(0)

yaobanwd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档