#include <stdio.h>
int zbm[255]={1,10,18,11,13,11,26,6};//转换为种别码序列的“begin a:=22+33; end ”
int zb;//种别码指针
int kk=0;//标识错误类型
void lrparser();
main()
{
printf("语法分析结果:\n");
lrparser();
}
void factor()
{
void expression();
if(zbm[zb]==10||zbm[zb]==11)
zb++;
else
if (zbm[zb]==27)
{
zb++;
expression();
if (zbm[zb]==28)
{
zb++;
}
else
{
printf("')'错误!\n");
kk=1;
}
}
else
{
printf("表达式错误!\n");
kk=1;
}
}
void term()
{
factor( );
while(zbm[zb]==15||zbm[zb]==16)
{
zb++;
factor();
}
}
void expression()
{
term();
while(zbm[zb]==13||zbm[zb]==14)
{
zb++;
term();
}
}
void statement()
{
if(zbm[zb]==10)
{
zb++;
if(zbm[zb]==18)
{
zb++;
expression();
}
else
{
printf("赋值符号错误!\n");
kk=1;
}
}
else
if(zbm[zb]!=6)//书上没有这句。
{
printf("语句错误!\n");
kk=1;
}
}
void yucu()
{
statement();
while(zbm[zb]==26)
{
zb++;
statement();
}
}
void lrparser ()
{
zb=0;
if(zbm[zb]==1)
{
zb++;
yucu();
if(zbm[zb]==6)
{
zb++;
if(zbm[zb]==0&&kk==0)
printf("success!\n");
}
else
if(kk!=1)
{
printf("'缺end'错误!\n");
kk=1;
}
}
else
{
printf("'begin'错误!\n");
kk=1;
}
}
int zbm[255]={1,10,18,11,13,11,26,6};//转换为种别码序列的“begin a:=22+33; end ”
int zb;//种别码指针
int kk=0;//标识错误类型
void lrparser();
main()
{
printf("语法分析结果:\n");
lrparser();
}
void factor()
{
void expression();
if(zbm[zb]==10||zbm[zb]==11)
zb++;
else
if (zbm[zb]==27)
{
zb++;
expression();
if (zbm[zb]==28)
{
zb++;
}
else
{
printf("')'错误!\n");
kk=1;
}
}
else
{
printf("表达式错误!\n");
kk=1;
}
}
void term()
{
factor( );
while(zbm[zb]==15||zbm[zb]==16)
{
zb++;
factor();
}
}
void expression()
{
term();
while(zbm[zb]==13||zbm[zb]==14)
{
zb++;
term();
}
}
void statement()
{
if(zbm[zb]==10)
{
zb++;
if(zbm[zb]==18)
{
zb++;
expression();
}
else
{
printf("赋值符号错误!\n");
kk=1;
}
}
else
if(zbm[zb]!=6)//书上没有这句。
{
printf("语句错误!\n");
kk=1;
}
}
void yucu()
{
statement();
while(zbm[zb]==26)
{
zb++;
statement();
}
}
void lrparser ()
{
zb=0;
if(zbm[zb]==1)
{
zb++;
yucu();
if(zbm[zb]==6)
{
zb++;
if(zbm[zb]==0&&kk==0)
printf("success!\n");
}
else
if(kk!=1)
{
printf("'缺end'错误!\n");
kk=1;
}
}
else
{
printf("'begin'错误!\n");
kk=1;
}
}