LL(1)预测分析法实验报告(2)

2019-03-09 18:54

void edge::newfollow(string w) { int i;

for(i=0;i

if(follow.find(w[i])>follow.length()&&w[i]!='*') follow+=w[i]; }

void edge::newselect(string w) { int i;

for(i=0;i

if(select.find(w[i])>select.length()&&w[i]!='*') select+=w[i]; }

void edge::delfirst() {

int i=first.find('*'); first.erase(i,1); }

//LL1.cpp

#include #include #include %using namespace std;

int SUM;

string NODE,ENODE;

//计算first

void first(edge ni,edge *n,int x) { int i,j;

for(j=0;j

if(ni.getlf()==n[j].getlf()) {

if(NODE.find(n[j].getro())

for(i=0;i

if(n[i].getlf()==n[j].getro()) first(n[i],n,x); } else

n[x].newfirst(n[j].getro()); } } }

//计算follow

void follow(edge ni,edge *n,int x) {

int i,j,k,s; string str;

for(i=0;i

s=NODE.find(ni.getrg()[i]);

if(s-1) //是非终结符 if(i

if(n[j].getlf().find(ni.getrg()[i])==0) {

if(NODE.find(ni.getrg()[i+1])

for(k=0;k

if(n[k].getlf().find(ni.getrg()[i+1])==0) {

n[j].newfollow(n[k].getfirst());

if(n[k].getfirst().find(\ n[j].newfollow(ni.getfollow()); } } else {

str.erase();

str+=ni.getrg()[i+1]; n[j].newfollow(str); } } } }

//计算select

void select(edge &ni,edge *n) { int i,j;

if(ENODE.find(ni.getro())

ni.newselect(ni.getro()); if(ni.getro()==\

ni.newselect(ni.getfollow()); } else

for(i=0;i

if(ni.getrg()[i]==n[j].getlf()[0]) {

ni.newselect(n[j].getfirst());

if(n[j].getfirst().find('*')>n[j].getfirst().length()) return; } }

//输出集合

void out(string p) { int i;

if(p.length()==0) return; cout<<\

for(i=0;i

cout<

cout<

//连续输出符号

void outfu(int a,string c) { int i;

for(i=0;i

//输出预测分析表

void outgraph(edge *n,string (*yc)[50]) {

int i,j,k; bool flag;

for(i=0;i

if(ENODE[i]!='*') {

outfu(10,\

cout<

outfu(10,\cout<<\int x;

for(i=0;i

outfu(4,\ cout<

for(k=0;k

flag=1;

for(j=0;j

if(NODE[i]==n[j].getlf()[0]) {

x=n[j].getselect().find(ENODE[k]); if(x-1) {

cout<<\ yc[i][k]=n[j].getrg();

outfu(9-n[j].getrlen(),\ flag=0; }

x=n[j].getselect().find('#');

if(k==ENODE.length()-1&&x-1) {

cout<<\ yc[i][j]=n[j].getrg(); }

} }

if(flag&&ENODE[k]!='*') outfu(11,\ }

cout<

//分析符号串

int pipei(string &chuan,string &fenxi,string (*yc)[50],int &b) {

char ch,a; int x,i,j,k; b++;

cout<9)

outfu(8,\else

outfu(9,\cout<

outfu(26-chuan.length()-fenxi.length(),\cout<

ch=fenxi[fenxi.length()-1]; x=ENODE.find(ch);

if(x-1) {

if(ch==a) {

fenxi.erase(fenxi.length()-1,1); chuan.erase(0,1);

cout<<\匹配\ if(pipei(chuan,fenxi,yc,b)) return 1; else

return 0; } else

return 0; } else {

if(ch=='#') {


LL(1)预测分析法实验报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中国企业500强发布 湖北8企业入选

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: