- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)