#include
#include
using namespace std;
void scaner(); //扫Α?描â
void checkIDF(); //检ì查ã是?否?是?保馈?留?字? void checkNum(); //检ì查ã是?否?是?数簓字? void retract(); //回?退?
char getChar(); //获?取?下?一?个?字?符? void concatenation(); //连?接ó字?符? int reserve(); //检ì查ã是?否?是?保馈?留?字? void buildlist1(); //建?立??标括?识?符?表括? void buildlist2(); //建?立??数簓字?表括? void error(); //报馈?错洙?
bool letter(); //字?母?
bool digit(); //数簓字?
char character[80],token[8],ch,tk[4]; //character数簓组哩?保馈?存?输?入?的?所õ有瓺字?
符? token当獭?前?要癮检ì查ã的?字?符? int sy,syn,pt,pc,pL1=0,pL2=0,p5,p6; //syn 种?别纄编括?码? pt token数簓组哩?下?标括? pc
character数簓组哩?下?标括? pL1 标括?志?符?表括?下?标括? pL2 数簓字?表括?下?标括?
vector list1; //标括?志?符?表括? vector list2; //数簓字?表括?
void scaner()
{
pt=0;
for(int i=0;i<8;i++)
{
token[i]=NULL;
}
char s=getChar();
while((s==' ')||(s=='\n'))
{
s=getChar();
}
if(((s<='z')&&(s>='a'))||((s<='Z')&&(s>='A')))
{
checkIDF();
}
else if((s>='0')&&(s<='9'))
{
syn=7;
checkNum();
}
else switch(s)
{
case'=':
s=getChar();
if(s=='=')
{
sy=1;
syn=14;
strcpy(token,"relop");
strcpy(tk,"EQ");
}
else
{
syn=8;
retract();
token[pt]='=';
}
break;
case'+':
token[pt]='+';
syn=9;
break;
case'*':
s=getChar();
if(s=='*')
{
syn=11;
strcpy(token,"**");
}
else
{
retract();
token[pt]='*';
syn=10;
}
break;
case'-':
token[pt]='-';
syn=12;
break;
case'/':
token[pt]='/';
syn=13;
break;
case'>':
syn=14;
s=getChar();
if(s=='=')
{
sy=3;
strcpy(token,"relop");
strcpy(tk,"ME");
}
else
{
sy=2;
retract();
strcpy(token,"relop");
strcpy(tk,"MT");
}
break;
case'<':
syn=14;
s=getChar();
if(s=='=')
{
sy=5;
strcpy(token,"relop");
strcpy(tk,"LE");
}
else
{
sy=4;
retract();
strcpy(token,"relop");
strcpy(tk,"LT");
}
break;
case'!':
s=getChar();
if(s=='=')
{
syn=14;
strcpy(token,"relop");
strcpy(tk,"UEQ");
}
else
{
retract();
cout<<"第台?<= '0' && token[i] <= '9'; ++i)
{
n = 10 * n + (token[i] - '0');
}
list2.push_back(n);
pL2++;
}
void error()
{
cout<<"出?现?错洙?误ó----------------"<='a'))||((s<='Z')&&(s>='A')))
{
return true;
}
else
return false;
}
bool digit()
{
char s=character[pc-1];
if((s>='0')&&(s<='9'))
return true;
else
return false;
}
#include
using namespace std;
int lookahead; //当獭?前?种?别纄编括?码?
int a1,v,p7,p8; //a1 pa数簓组哩?下?标括? v=0表括?示? (辍? v=1 表括?示? )?
int pa[100][2]; //第台?一?维?保馈?存?单蹋?词洙?的?种?别纄编括?码? 第台?二t维?用?来ぁ?区?
分?种?别纄编括?码?相à同?的?单蹋?词洙? int nexttoken(); //下?一?个?单蹋?词洙?的?种?别纄编括?码?
void match();
void S();
void A();
void Op();
void B();
void relop();
void E();
void E1();
void T();
void T1();
void F();
void p();
void error1();
int nexttoken()
{
v=pa[++a1][1];
int paa=pa[a1][0];
p8++;
if(paa==15)
{
p7++;
p8=0;
}
return pa[a1][0]; }
void match(int t)
{
if(lookahead==t)
{
lookahead=nexttoken();
}
else
{
error1();
}
}
void S()
{
if(lookahead==1)
{
cout<<"S-> while(A) S"< i=E;"<if (A) S else S"<B Op B | B"<&&"<||"<E relop E"< =="< >"< >="< <"< <="<T E1"<+T E1"<F T1"<*F T1"< P**F|P"<i"<(E)"<
#include "cf.h"
#include "yf.h"
using namespace std;
int a,b,c,d,vv,nxq; //a pa数簓组哩?词洙?法ぁ?分?析?时骸?的?下?标括? b 保馈?存?pa当獭?前?下?标括?值μ c pa数簓组哩?语?义?分?析?时骸?的?下?标括? d 中D间?变?量?的?下?标括? vv=0 表括?示? (辍? vv=1 表括?示? )?
int lookahead1; //pa数簓组哩?当獭?前?下?标括? nxq 下?一?条?将?要癮产ö生Θ?的?四?元a式?的?地?址?
int e[20][4]; //4元a式? 数簓组哩?
int s; //4元a式?数簓组哩?下?标括?
void S1();
int A1();
void Op1();
int B1();
int relop1();
int E2();
int T2();
int F1();
int P1();
void error2();
void scaner1();
int emit(int a,int b,int c,int d); //保馈?存?当獭?前?4元a式?
int newtemp();
void backpatch(int p,int t);
void show();
int merge(int p1,int p2);
void main()
{
cout<<"*************************词洙?法ぁ?分?析?器ô****************************"< ,14) ( >= ,14)"<=1&&syn<=5)||(syn>=8&&syn<=13)||(syn>=15&&syn<=16)||syn==18||syn==19)
{
cout<<"("< ,";
break;
case 3:
cout<= ,";
break;
case 4:
cout<=200)
cout<
本文档为【词法语法语义分析器代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。