5s/>/> slia14:
/>/>
id“sdafh“
idsra
idfsra
idsrig
idsdli&bh
idai
ididsh
idah
ig asa sd;
dfi asi 0ffff
i i = 0;
i= 0;
i= 0;/>/>sak u
&bl fg=1;
i= 0;/>/>变量存储
sru d {
d id;
d
d hild=ull;
i id;
srig ;
&bl hasval=ru;
du&bl val;
}s, a, &b, , d, , f, g, h, i, j,sh,,sar;
sru varia&bl{
srig a;
du&bl val;
}var[0];
i fidvarsrig a{
fr i i = 0; i ; i
if var[i]a == a
ru i;
ru -1;
}
ss y
ss ysak
{
i ;
y ys;
i asi;
u&bli:
ysak:-1, asiasi
{
ys =y[asi];
if ys == ull
{
rr “动态存储分配失败!“ dl;
i1;
}
}
ysaki si:-1, asisi
{
ys =y[asi];
if ys == ull
{
rr “动态存储分配失败!“ dl;
i1;
}
}
~ysak
{
dl[] ys;
}
/>/>是否为空
&bl y;
/>/>压栈
d hy ;
/>/>返回栈顶元素
y ;
/>/>返回第个栈顶元素
y i ;
/>/>出栈
vid ;
/>/>栈大
i si;
srig sh;
srig sh;
i u;
};
ss y
&bl ysaky::y
{
if==-1{
ru ru;
}
ls
ru fals;
}
ss y
y ysaky::
{
if!=-1
{
ru ys[];
}
ls
{
u “栈空\“;
i1;
}
}
ss y
y ysaky::i
{
if- -1
{
ru ys[ - ];
}
ls
{
u “栈空\“;
i1;
}
}
d ysakd::hd
{
d =d;
= ;
-id = ;
if 1asi
{
ys[]=;
}
ls
{
u “栈满\“;
i1;
}
ru ;
}
ss y
i ysaky::u{
ru ;
}
ss y
vid ysaky::
{
if= 0
{
--;
}
ls
{
u “栈空\“;
i1;
}
}
ss y
i ysaky::si
{
ru 1;
}
ss y
srig ysaky::sh{
srig s;
fr i i = 0; i = ; i
s = ys[i];
ru s;
}
srig ysakd::sh{
srig s;
fr i i = 0; i = ; i
s=ys[i]id-““;
ru s;
}
vid sd sh, d a, ysakd≈sak{
u “s,“;
d 10 = sh[10];
d 9 = sh[9];
sih a[i]id{
as 10:
sakh9;
sakh&b;
sakh10;
sakha;
u “ha&b;“;
as 17:
sakh9;
sakh&b;
sakh10;
sakha;
u “ha&b;“;
as 1:
dfaul:
u “rrr :a fr s!\“;
fg = 0;
}
}
vid ad sh, d a, ysakd≈sak{
u “a,“;
d 9 = sh[9];
sih a[i]id{
as 10:
as 17:
sakha;
sakh9;
sakh;
u “h;a“;
dfaul:
u “rrr :a fr a!\“;
fg = 0;
}
}
vid &bd sh, d a, ysakd≈sak{
u “&b,“;
sih a[i]id{
as 0:
sakh;
sakhd;
u “hd“;
as 1:
sakh;
sakhd;
u “hd“;
as :
sakh;
sakhd;
u “hd“;
as :
sakh;
sakhd;
u “hd“;
as 4:
sakh;
sakhd;
u “hd“;
as 5:
sakh;
sakhd;
u “hd“;
as 6:
sakh;
sakhd;
u “hd“;
as 7:
sakh;
sakhd;
u “hd“;
as 1:
sakh;
sakhd;
u “hd“;
as 17:
sakh;
sakhd;
u “hd“;
as 1八:
sakh;
sakhd;
u “hd“;
as 19:
sakh;
sakhd;
u “hd“;
as 0:
sakh;
sakhd;
u “hd“;
dfaul:
u “rrr :a fr &b!\“;
fg = 0;
}
}
vid d sh, d a, ysakd≈sak
{
u “,“;
d 17 = sh[17];
d 15 = sh[15];
sih a[i]id{
as 17:
sakh&b;
sakh15;
sakh17;
u “hvar=&b“;
dfaul:
u “rrr :a fr !\“;
fg = 0;
}
}
vid dd sh, d a, ysakd≈sak{
u “d,“;
sih a[i]id{
as 0:
sakhg;
sakhf;
u “hfg“;
as 1:
sakhg;
sakhf;
u “hfg“;
as :
sakhg;
sakhf;
u “hfg“;
as :
sakhg;
sakhf;
u “hfg“;
as 4:
sakhg;
sakhf;
u “hfg“;
as 5:
sakhg;
sakhf;
u “hfg“;
as 6:
sakhg;
sakhf;
u “hfg“;
as 7:
sakhg;
sakhf;
u “hfg“;
as 1:
sakhg;
sakhf;
u “hfg“;
as 17:
sakhg;
sakhf;
u “hfg“;
as 1八:
sakhg;
sakhf;
u “hfg“;
as 19:
sakhg;
sakhf;
u “hfg“;
as 0:
sakhg;
sakhf;
u “hfg“;
dfaul:
fg = 0;
u “rrr :a fr d!\“;
}
}
vid d sh, d a, ysakd≈sak{
u “,“;
d 11 = sh[11], 1 = sh[1];
sih a[i]id{
as 八:
as 9:
as 11:
sakh;
sakhd;
sakhsh[11];
u “hd“;
as 1:
sakh;
sakhd;
sakhsh[1];
u “h-d“;
dfaul:
fg = 0;
u “rrr :a fr !\“;
}
}
vid fd sh, d a, ysakd≈sak{
u “f,“;
sih a[i]id{
as 0:
sakhsh[八];
sakhh;
sakhsh[7];
sakhsh[0];
u “hsih“;
as 1:
sakhsh[八];
sakhh;
sakhsh[7];
sakhsh[1];
u “hsh“;
as :
sakhsh[八];
sakhh;
sakhsh[7];
sakhsh[];
u “hgh“;
as :
sakhsh[八];
sakhh;
sakhsh[7];
sakhsh[];
u “hgh“;
as 4:
sakhsh[八];
sakhh;
sakhsh[7];
sakhsh[4];
u “hlgh“;
as 5:
sakhsh[八];
sakhh;
sakhsh[7];
sakhsh[5];
u “hlgh“;
as 6:
sakhsh[八];
sakhh;
sakhsh[7];
sakhsh[6];
u “hlh“;
as 7:
sakhi;
sakhh;
u “hhi“;
as 1:
sakhi;
sakhh;
u “hhi“;
as 17:
sakhi;
sakhh;
u “hhi“;
as 1八:
sakhi;
sakhh;
u “hhi“;
as 19:
sakhi;
sakhh;
u “hhi“;
as 0:
sakhi;
sakhh;
u “hhi“;
dfaul:
u “rrr :a fr f!\“;
fg = 0;
}
}
vid gd sh, d a, ysakd≈sak{
u “g,“;
sih a[i]id{
as 八:
as 9:
as 11:
as 1:
as 1:
sakhg;
sakhf;
sakhsh[1];
u “hfg“;
as 14:
sakhg;
sakhf;
sakhsh[14];
u “h/>fg“;
dfaul:
u “rrr :a fr g!\“;
fg = 0;
}
}
vid hd sh, d a, ysakd≈sak{
u “h,“;
sih a[i]id{
as 7:
sakhsh[八];
sakh&b;
sakhsh[7];
u “h&b“;
as 1:
sakhh;
sakhsh[1];
u “h-h“;
as 17:
sakhsh[17];
u “hvar“;
as 1八:
sakhsh[1八];
u “h“;
as 19:
sakhsh[1八];
u “h“;
as 0:
sakhsh[1八];
u “h“;
dfaul:
u “rrr :a fr h!\“;
fg = 0;
}
}
vid id sh, d a, ysakd≈sak{
u “i,“;
sih a[i]id{
as 八:
as 9:
as 11:
as 1:
as 1:
as 14:
as 16:
sakhh;
sakhsh[16];
u “hh“;
dfaul:
u “rrr :a fr i!\“;
fg = 0;
}
}
vid jd sh, d a, ysakd≈sak{
u “j,“;
sih a[i]id{
as 八:
sakhsh[八];
u “h“;
as :
sakhsh[八];
sakhh;
sakhsh[];
u “h,h“;
dfaul:
u “rrr :a fr j!\“;
fg = 0;
}
}
srig shd a{
srig s;
fr i i = i; i; i
{
s = a[i];
}
ru s;
}
vid aaysakd≈sak, d a{
i i = 0;
hil fg{
= sakid;/>/>当前指针
i;
urighs i “|“;
ulfs0 saksh;
ulfs60 sha;
sih sakid{
as :
sak;
ssh, a, sak;
as 4:
sak;
ash, a, sak;
as 5:
sak;
&bsh, a, sak;
as 6:
sak;
sh, a, sak;
as 7:
sak;
dsh, a, sak;
as 八:
sak;
sh, a, sak;
as 9:
sak;
fsh, a, sak;
as 0:
sak;
gsh, a, sak;
as 1:
sak;
hsh, a, sak;
as :
sak;
ish, a, sak;
as :
sak;
jsh, a, sak;
dfaul:
if sakid == a[i]id{
if sakid == 17
sakid- = a[i];
ls if sakid == 1八
{
if a[i] ==“i“
{
sakid- = a[i];
sakid-val = 14159;
}
ls if a[i] ==““
{
sakid- = a[i];
sakid-val = 71八;
}
ls {
sakid- = a[i];
sakid-val = sda[i];
}
}
i;
ifsakid≈≈ sak0
u ““ sh[sakid] “,“;
ls
u ““ sak “,“;
sak;
u “i“;
if saky u “\ss\“;
}
ls {
u “\rrr: fail!\“;
fg = 0;
}
}
udl;
if saky
if 0
{-hild = sak0id;
d = -hild-id;
fr i i = 1; i; i
{
-
= -
}
}
= 0;
}
}
/>/>
/>语义分析/>
vid saiaaysakd≈sak, d s/>/>主体部分,对后序遍历得到的后缀树进行栈操作,得出最后结果,放在后序遍历循环体中
{
srig u=““;
&bl hasudfi=fals;
if s-id = 0 ≈≈ s-id19
{
if s-id == 10
{
ulfs40““;
u “ru [0]val“;
udl;
u “结果:“;
if hasudfi
ls
40saksh;
}
ls if s-id == 0
{
if s-id-hasval
sakid-val = sisakid-val;
ls
{
u=“si“ sakid- ““;
sakid- = u;
sakid-hasval = fals;
}
40 saksh;
u “[0] =“ sakid-;
u “,[0]val=si[0]val“;
}
ls if s-id == 1
{
if s-id-hasval
sakid-val = ssakid-val;
ls
{
u =“s“ sakid- ““;
sakid- = u;
sakid-hasval = fals;
}
40saksh;
u “[0] =“ sakid-;
u “,[0]val=s[0]val“;
}
ls if s-id ==
{
if s-id-hasval
sakid-val = asakid-val;
ls
{
u =“a“ sakid- ““;
sakid- = u;
sakid-hasval = fals;
}
40saksh;
u “[0] =“ sakid-;
u “,[0]val=g[0]val“;
}
ls if s-id ==
{
if s-id-hasval
sakid-val = a157-sakid-val;
ls
{
u =““ sakid- ““;
sakid- = u;
sakid-hasval = fals;
}
40saksh;
u “[0] =“ sakid-;
u “,[0]val=g[0]val“;
}
ls if s-id == 4
{
if s-id-hasval
sakid-val = lgsakid-val;
ls
{
u =“lg“ sakid- ““;
sakid- = u;
sakid-hasval = fals;
}
40saksh;
u “[0] =“ sakid-;
u “,[0]val=lg[0]val“;
}
ls if s-id == 5
{
if s-id-hasval
sakid-val = lg10sakid-val;
ls
{
u =“lg“ sakid- ““;
sakid- = u;
sakid-hasval = fals;
}
40saksh;
u “[0] =“ sakid-;
u “,[0]val=lg[0]val“;
}
ls if s-id == 6
{
if s-id-hasval
sakid-val = lgsakid-val;
ls
{
u =“l“ sakid- ““;
sakid- = u;
sakid-hasval = fals;
}
40saksh;
u “[0] =“ sakid-;
u “,[0]val=l[0]val“;
}
ls if s-id == 11
{
if sak0id-hasval≈≈sak1id-hasval
{
du&bl= sakid-val;
sak;
sakid-val = ;
sakid- = srigsakid-val;
}
ls {
u =““ sak1id- ““sak0id- ““;
sak1id- = u;
sak1id-hasval = fals;
sak;
}
40saksh;
u “[1]val=[0]val , “;
}
ls if s-id == 1
{
if sak0id-hasval≈≈sak1id-hasval
{
du&bl= sakid-val;
sak;
sakid-val -= ;
sakid- = srigsakid-val;
}
ls {
u =““ sak1id- “-“ sak0id- ““;
sak1id- = u;
sak1id-hasval = fals;
sak;
}
40saksh;
u “[1]val-=[0]val , “;
}
ls if s-id == 1
{
if sak0id-hasval≈≈sak1id-hasval
{
du&bl= sakid-val;
sak;
sakid-val = ;
sakid- = srigsakid-val;
}
ls {
u = sak1id- ““ sak0id- ;
sak1id- = u;
sak1id-hasval = fals;
sak;
}
40saksh;
u “[1]val=[0]val , “;
}
ls if s-id == 14
{
if sak0id-hasval≈≈sak1id-hasval
{
du&bl= sakid-val;
sak;
sakid-val />= ;
sakid- = srigsakid-val;
}
ls {
u = sak1id- “/>“ sak0id-;
sak1id- = u;
sak1id-hasval = fals;
sak;
}
40saksh;
u “[1]val/>=[0]val , “;
}
ls if s-id == 15
{
var[]val = sakid-val;
sakhs;
40saksh;
sak;
u “varia&bl[]val =“ sakid-val;
sak;
}
ls if s-id == 16
{
if sak0id-hasval≈≈sak1id-hasval{
du&bl= sakid-val;
sak;
sakid-val = sakid-val, ;
sakid- = srigsakid-val;
}
ls {
u = sak1id- ““ sak0id-;
sak1id- = u;
sak1id-hasval = fals;
sak;
}
40saksh;
u “[1]val=[1]val[0]val , “;
}
ls if s-id == 1八
{
sakhs;
40saksh;
u“h“sakid-val““;
}
ls if s-id == 17
{
if var[ - 1]a ==““
{
var[ - 1]a = s-id-;
srig = srigvar[ - 1]val“=“ s-id- ;
40 ;
u “varia&bl[] =“ s-id-“,“;
}
ls
{
if fidvars-id-= 0
{
s-id-val = var[fidvars-id-]val;
sakhs;
40 saksh;
u “fid“ s-id- “=“ s-id-val;
}
ls
{
s-id-hasval = fals;
hasudfi = ru;
sakhs;
40 saksh;
u “ dfi “s-id-;
}
}
}
}
}
i u = 0;
vid sd s/>/>对树的后序遍历
{
if s != ull{
s s-hild;
s s-
ifs-id ≈≈ s-id != 7 ≈≈ s-id != 八 ≈≈ s-id != 9-;
}
}
vid sysakd≈sak,d s/>/>对树的后序遍历
{
if s != ull {
ssak,s-hild;
ssak,s-
if s-id≈≈s-id!=7≈≈s-id!=八≈≈s-id!=9
{
u s10 lf u ““;
u;
saiaasak, s;
udl;
}
}
}
i ai
{
d sar =≈s;
sh =d[];
sh[0] =“si“;
sh[1] =“s“;
sh[] =“g“;
sh[] =“g“;
sh[4] =“lg“;
sh[5] =“lg“;
sh[6] =“l“;
sh[7] =““;
sh[八] =““;
sh[9] =“;“;
sh[10] =““;
sh[11] =““;
sh[1] =“-“;
sh[1] =““;
sh[14] =“/>“;
sh[15] =“=“;
sh[16] =““;
sh[17] =“var“;
sh[1八] =““;
sh[19] =“i“;
sh[0] =““;
sh[1] =““;
sh[] =“,“;
sid = ; s =“s“;
aid = 4; a =“a“;
&bid = 5; &b =“&b“;
id = 6;=““;
did = 7; d =“d“;
id = 八;=““;
fid = 9; f =“f“;
gid = 0; g =“g“;
hid = 1; h =“h“;
iid = ; i =“i“;
jid = ; j =“j“;
fr i i = 0; i; i
sh[i]id = i;
ifsra i;
i“d:\\词法“;
d a =d[asi];/>/>当前输入
har &buffr[56];
hil ili&buffr, 100/>/>读取输入内容,既词法分析结果
{
a[] = &buffr;
i 1 = a[]fid““;
i= a[]fid“,“;
i= a[]fid““;
a[]id = sia[]su&bsr1,- 1daa;
if a[]id == 19 || a[]id == 0 a[]id = 1八;
a[] = a[]su&bsr11,- 1;
}
a[] =““;
a[]id =-1;
a[]hild = ull;
a[]
ils;
ysakd sak;
sakha[ - 1];
sakhs;
sar = sakid;
-= ;
u “语法分析\“;
u “步骤栈内容当前输入操作\“;
srig=“--------------------------------------------------------------------------------------------------------------\“;
u;
aasak, a;
u “语法分析\\\“;
u “语义分析\“;
ysakd l;/>/>语义分析栈
udl;
u“后缀式:“;
ssar;
udl;
udl;
u “步骤栈内容操作\“;
u;
sl,sar;
u “语义分析\\\“;
ru 0;
}
------------------------------------------