C++词法分析.docVIP

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

用c++实现词法分析器文法如下: 〈赋值语句〉→〈标识符〉:=〈无符号数〉 〈标识符〉→〈字母〉|〈字母〉〈数字〉 〈无符号数〉→〈数字〉|〈数字〉.〈数字〉 〈字母〉→ A│B│C│D│E│F│G│H│I│J│K│L│M│N│O│P│Q│R│S│T│ │U│V│W│X│Y│Z 〈数字〉→ 1│2│3│4│5│6│7│8│9│0 输入: Abc123:=3.14 输出: 正确 标识符:Abc123 赋值符::= 无符号数:3.14 输入: 123:=3.14 输出: 错误 标识符错误 实验二:自上而下语法分析 1. 实验项目的目的和任务 通过实验,使学生掌握递归下降分析程序的实现及语法分析方法。要求学生选择一种熟悉的高级语言,编写递归下降预测分析程序。 2. 上机实验内容 使用C或C++语言实现如下赋值语句的语法分析: ABC123:=3.14+34.45; 文法如下: ASS→ ID := DATA + DATA; ID → LETTER DIGITAL | ID DATA → DIGITAL | DIGITAL DATA LETTER→ A│B│C│D│E│F│G│H│I│J│K│L│M│N│O│P│Q│R│S│T│ │U│V│W│X│Y│Z DIGITAL→ 1│2│3│4│5│6│7│8│9│0 实验测试数据: 输入: ABC123:=3.14+34.45; 输出: 合法 输入: ABC123=3.14; 输出: 错误 “:”错误 #include stdio.h #include stdlib.h #include string.h #include ctype.h #define START -1//定义数组下表从0开始 #define MAXSIZE 20//PL/0 最大的字符串,保留字等 FILE *fp;//pascal源程序文件 FILE *fp1 = fopen(PL词法分析结果.txt,w);//把词法分析结果写到文件 PL分析结果.txt中 char *keyWord[] = { const,do,begin,end,call,if,else,then,procedure,read,write,var,while,odd};//pascal基本字 char *Operators[] = {+,-,*,/};//pascal运算符 char *compareOperators[] = {,=,=,,=,};//pascal比较符 char *endOperators[] = { , , : , ; , := , . , ( , ) , };//pascal界符 ///////////////////////////////////////////////////////////////////////////////////////// //函数名:Compare //参数:char SearchStr[],int type //功能: 分析源程序中处理过后的字符串,按照基本字,运算符,比较符,界符进行分析 //返回值: true / false bool Compare(char SearchStr[],int type) { switch (type) // 字符串类型 { case 1:{//pascal基本字 for(int i = 0;i = 13;i++) { if (strcmp(keyWord[i],SearchStr) == 0)//字符串在keyWord中 return true; } break; } case 2:{//pascal运算符 for(int i = 0;i = 3;i++) { if(strcmp(Operators[i],SearchStr) == 0)//字符串在Operators中 return true; } break; } case 3: {//pascal比较符 for(int i = 0;i = 5;i++) { if(strcmp(compareOperators[i],SearchStr)==0)//字符串在compareOperators中 return true; } break; } case 4: {//pascal界符 for( int i = 0;i = 7;i++) { if(strcmp(endOperators[i],S

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档