Ø例6.2 设文法G[S]:
–S→bAb, A→ (B | a, B→ Aa)
文法的简单优先关系矩阵:
是编写一个
简单优先关系算法,用于识别文法的句子,或句型;
输入
输入句子或句型
输出
判断句子或句型是否符合文法G[S]:
如果符合文法输出 accept
否则输出 not accept
样例输入
b((aa)a)b#
样例输出
accept
#include <iostream>
#include <stdio.h>
using namespace std;
const int N=1e5+5;
char s[N];
int p,flag;
void B();
void A()
{
if(s[p]=='a')p++;
else if(s[p]=='(')p++,B();
else flag=1;
}
void B()
{
A();
if(s[p]=='a')
{
p++;
if(s[p]==')')p++;
else flag=1;
}else flag=1;
}
void S()
{
if(s[p]=='b')
{
p++,A();
if(s[p]=='b')p++;
else flag=1;
}
else flag=1;
}
int main()
{
cin.getline(s,N);
p=flag=0;
S();
if(s[p]=='#'&&!flag)puts("accept");
else puts("not accept");
return 0;
}