编译原理 实验2《递归下降分析法》
【摘要】
一,实验内容
对下列文法,用递归下降分析法对任意输入的符号串进行分析:
(1)E- TG
(2)G- +TG|—TG
(3)G- ε
(4)T- FS
(5)S- *FS|/FS
(6)S- ε
(7)F- (E)
(8)F- i
输出的格式如下:
(1)递归下降分析程序,编制人:姓名,学号,班级
(2)输入一以...
一,实验内容
对下列文法,用递归下降分析法对任意输入的符号串进行分析:
(1)E- TG
(2)G- +TG|—TG
(3)G- ε
(4)T- FS
(5)S- *FS|/FS
(6)S- ε
(7)F- (E)
(8)F- i
输出的格式如下:
(1)递归下降分析程序,编制人:姓名,学号,班级
(2)输入一以#结束的符号串(包括+—*/()i#):在此位置输入符号串例如:i+i*i#
(3)输出结果:i+i*i#为合法符号串
备注:输入一符号串如i+i*#,要求输出为“非法的符号串”。
注意:
- 表达式中允许使用运算符(+-*/)、分割符(括号)、字符I,结束符#;
- 如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好)。
二,实验方法和步骤
1,消除左递归
给出的文法没有左递归,不需要再变
2,提取公共左因子
给出的文法没有公共左因子,这一步也略掉了
3,代码
-
#include<iostream>
-
#include<string>
-
using namespace std;
-
-
char line[100];
-
int i = 0;
-
-
bool E(); //声明5个函数
-
bool T();
-
bool G();
-
bool F();
-
bool S();
-
-
定义5个函数
-
bool E()
-
{
-
if (T() && G())return true;
-
else return false;
-
}
-
bool T()
-
{
-
if (F() && S())return true;
-
else return false;
-
}
-
bool G()
-
{
-
if (line[i] == '+' || line[i] == '-')
-
{
-
i++;
-
if (T() && G())return true;
-
else return false;
-
}
-
else return true;
-
}
-
bool S()
-
{
-
if (line[i] == '*' || line[i] == '/')
-
{
-
i++;
-
if (F() && S())return true;
-
else return false;
-
}
-
else return true;
-
}
-
bool F()
-
{
-
if (line[i] == 'i')
-
{
-
i++;
-
return true;
-
}
-
if (line[i] == '(')
-
{
-
i++;
-
if (E() && line[i] == ')')
-
{
-
i++;
-
return true;
-
}
-
}
-
return false;
-
}
-
-
int main()
-
{
-
cin.getline(line, 20);
-
if (E() && line[i] == '#')cout << "yes";
-
else cout << "no";
-
system("pause>nul");
-
return 0;
-
}
文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/nameofcsdn/article/details/104126191
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)