#include <iostream>
#include <stdio.h>
using namespace std;
const int N=1e5+5;
char s[N];
int p=0,flag;
void T();
void E1();
void F();
void T1();
void E()
{
T(),E1();
}
void T()
{
F(),T1();
}
void E1()
{
if(s[p]=='+')
{
p++,T(),E1();
}
else;
}
void T1()
{
if(s[p]=='*')
{
p++,F(),T1();
}
else;
}
void F()
{
if(s[p]=='(')
{
p++,E();
if(s[p]!=')')flag=1;
else p++;
}
else if(s[p]=='i')p++;
else flag=1;
}
int main()
{
gets(s);
flag=0;
E();
if(!s[p]&&!flag)puts("accept");
else puts("not accept");
return 0;
}
问题 A: 例 5.16 递归下降法
#include <iostream>
#include <stdio.h>
using namespace std;
const int N=1e5+5;
char s[N];
int p=0,flag;
void T();
void E1();
void F();
void T1();
void E()
{
T(),E1();
}
void T()
{
F(),T1();
}
void E1()
{
if(s[p]=='+')
{
p++,T(),E1();
}
else;
}
void T1()
{
if(s[p]=='*')
{
p++,F(),T1();
}
else;
}
void F()
{
if(s[p]=='(')
{
p++,E();
if(s[p]!=')')flag=1;
else p++;
}
else if(s[p]=='i')p++;
else flag=1;
}
int main()
{
gets(s);
flag=0;
E();
if(!s[p]&&!flag)puts("accept");
else puts("not accept");
return 0;
}
时间限制 | 内存限制 | 提交 | 解决 |
1 sec | 128 MB | 557 | 256 |
[ 提交][ 状态][ 讨论版]
题目描述
Ø已知文法G:
−E→TE'
−
T→FT'
−E'→+TE' |ε
−T'→*FT' |ε
−
F→(E) |
i
−是LL(1)文法
−试编写一个递归下降LL(1)分析程序, 判断文法G所能接受的串。
输入
输入由终止符构成的符号串
输出
如果能够识别符号串,输出accept
否则输出: not accept
样例输入
i+i*i
样例输出
accept