农林大学编译原理课程设计.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
福建农林大学计算机与信息学院计算机类 课程设计结果评定 评语: 成绩: 指导教师签字: 任务下达日期: 评定日期: 目 录 1 正则表达式 1 1.1 正则表达式 1 1.2 确定化(化简)后的状态转换图 1 1.3 分析程序代码 1 1.4 程序运行截图 1 1.5 小结 2 2 LL(1)分析 错误!未定义书签。 2.1 LL(1)文法 3 2.2 LL(1)预测分析表 3 2.3 分析程序代码 4 2.4 程序运行截图 6 2.5 小结 7 3 算符优先分析 7 3.1 算符优先文法 8 3.2 算符优先关系表 8 3.3 分析程序代码 8 3.4 程序运行截图 17 3.5 小结 18 4 LR分析 19 4.1 LR文法 19 4.2 LR分析表 19 4.3 分析程序代码 19 4.4 程序运行截图 22 4.5 小结 22 参考文献: 22 1 正则表达式 1.1 正则表达式 (a|b)*(aa|bb)(a|b)* (注:该正规式为示例,可更改) 1.2 确定化(化简)后的状态转换图 1.3 分析程序代码 # include stdio.h int s[7][2]={{1,2},{3,2},{1,4},{3,5},{6,4},{6,4},{3,5}}; // 状态转换图 void main() { printf(★★★★★★ 有限自动机 ★★★★★★\n); printf(文法规则:\n); printf((a|b)*(aa|bb)*(a|b)*\n\n); printf(----------------------------------------------------------\n); printf(请输入字符串:\n); char ch; int i,j,t,flag; i=0; t=1; // 判断输入是否正确 flag=0; // 判断句子是否正确 while((ch=getchar())!=\n) { if(ch==a) j=0; if(ch==b) j=1; if(ch!=ach!=b) { t=0; // 输入有误 break; } i=s[i][j]; } flag=i; if(flag=3t) // flag2时可终结 printf(\n输入字符串正确!\n\n); else printf(\n输入字符串错误!\n\n); } 1.4 程序运行截图 1、输入正确的字符串: 2、输入错误的字符串: 1.5 小结 在这次课程设计,对正则文法和状态转换图和有限自动机的理论有了更深的了解,将理论应用于实际应用中。 2、LL(1)分析 2.1 LL(1)文法 E→TE (注:该文法为示例,可更改) E→+TE|ε T→FT T→*FT|ε F→(E)|i 2.2 LL(1)预测分析表 i + * ( ) # E E→TE E→TE E E→+TE E→ε E→ε T T→FT T→FT T T→ε T→*FT T→ε T→ε F F→i F→(E) 2.3 分析程序代码 #include iostream #include cstdio #include cstdlib #include cstring #include stack using namespace std; //存储分析预测表每个位置对应的终结符,非终结符,产生式 struct Node1 { char vn; char vt; char s[10]; }MAP[20]; int k; //用R代表E,W代表T,e代表空 char G[10][10]={E-TR,R-+TR,R-e,T-FW,W-*FW,W-e,F-(E),F-i};//存储文法中的产生式 char VN[6]={E,R,T,W,F};//存储非终结符 char VT[6]={i,+,*,(,),#};//存储终结符 char SELECT[10][10]={(,i,+,),#,(,i,*,+,),#,(,i};//存储文法中每个产生式对应的SELECT集 char Right[10][8]={-TR,-+TR,-e,-FW,-*FW,-e,-(E),-i}; stack char stak,stak1,stak2; bool compare(char *a,char *b) /

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档