📄 45663.cpp
字号:
#include<iostream.h>
#include<string.h>
void factor();
void lrparser();
void yucu();
void statement();
void expression();
void scaner();
void term();
int IsLetter(char );
int IsDigit(char );
char prog[80],token[8];
char ch;
int syn,p,n,m,sum,kk=0;
char *rwtab[6]={"begin","if","then","while","do","end"};
void main()
{
p=0;
int i=0;
cout<<"please input string:"<<endl;
cin.get(prog,80);
p=0;
scaner();
lrparser();
}
void lrparser()
{
if(syn==1)
{
scaner();
yucu();
if(syn==6)
{
scaner();
if(syn==0||(kk==0))cout<<"Success!"<<endl;
}
else{ if(kk!=1){cout<<"缺end错误!"<<endl;kk=1;}}
}
else{cout<<"缺begin错误!"<<endl;kk=1;}
return ;
}
void yucu()
{
statement();
while(syn==26)
{
scaner();
statement();
}
return;
}
void statement()
{
if(syn==10)
{
scaner();
if(syn==18)
{
scaner();
expression();
}
else
{
cout<<"赋值号错误!"<<endl;
kk=1;
}
}
/* else
{
cout<<"语句错误!"<<endl;
kk=1;
}*/
return;
}
void expression()
{
term();
while(syn==13||syn==14)
{
scaner();
term();
}
return;
}
void term()
{
factor();
while(syn==15||syn==16)
{
scaner();
factor();
}
return;
}
void factor()
{
if(syn==10||syn==11) scaner();
else if(syn==27)
{
scaner();
expression();
if(syn==28)scaner();
else{cout<<"缺 ( 错误!"<<endl;kk=1;}
}
else{cout<<"表达式错误!"<<endl;kk=1;}
return;
}
void scaner()
{
for(n=0;n<8;n++)
token[n]=NULL;
ch=prog[p++]; //读入ch
while(ch==' ') ch=prog[p++]; //判断是否为空白
if(IsLetter(ch))
{
int m=0;
while(IsDigit(ch)||IsLetter(ch))
{
token[m++]=ch;
ch=prog[p++];
}
token[m++]='\0';
p--;
syn=10;
for(n=0;n<6;n++)
{
if(strcmp(token,rwtab[n])==0)
{
if(n==0) syn=1;
else if(n==1) syn=2;
else if(n==2) syn=3;
else if(n==3) syn=4;
else if(n==4) syn=5;
else if(n==5) syn=6;
}
}
}
else
if(IsDigit(ch))
{
sum=0;
while(IsDigit(ch))
{
sum=sum*10+ch-'0';
ch=prog[p++];
}
p--;syn=11;
}
else
switch(ch)
{
case '<':
m=0;
token[m++]=ch;
ch=prog[p++];
if(ch=='>')
{
syn=21;
token[m++]=ch;
}
else if(ch=='=')
{
syn=22;
token[m++]=ch;
}
else
{
syn=20;p--;
}
break;
case '>': m=0;
token[m++]=ch;
ch=prog[p++];
if(ch=='=')
{
syn=24;
token[m++]=ch;
}
else
{
syn=23;p--;
}
break;
case ':':
m=0;
token[m++]=ch;
ch=prog[p++];
if(ch=='=')
{
syn=18;
token[m++]=ch;
}
else
{
syn=17;p--;
}
break;
case '+':
syn=13;token[0]=ch;break;
case '-':
syn=14;token[0]=ch;break;
case '*':
syn=15;token[0]=ch;break;
case '/':
syn=16;token[0]=ch;break;
case '=':
syn=25;token[0]=ch;break;
case ';':
syn=26;token[0]=ch;break;
case '(':
syn=27;token[0]=ch;break;
case ')':
syn=28;token[0]=ch;break;
case '#':
syn=0;token[0]=ch;break;
default:
syn=-1;break;
}
}
int IsLetter(char ch)
{
if(ch=='A'||ch=='B'||ch=='C'||ch=='D'||ch=='E'||ch=='F'||ch=='G'||ch=='H'||
ch=='I'||ch=='J'||ch=='K'||ch=='L'||ch=='M'||ch=='N'||ch=='O'||ch=='P'||
ch=='Q'||ch=='R'||ch=='S'||ch=='T'||ch=='U'||ch=='V'||ch=='W'||ch=='X'||
ch=='Y'||ch=='Z'||ch=='a'||ch=='b'||ch=='c'||ch=='d'||ch=='e'||ch=='f'||
ch=='g'||ch=='h'||ch=='i'||ch=='j'||ch=='k'||ch=='l'||ch=='m'||ch=='n'||ch=='o'||
ch=='p'||ch=='q'||ch=='r'||ch=='s'||ch=='t'||ch=='u'||ch=='v'||ch=='w'||
ch=='x'||ch=='y'||ch=='z')
return 1;
else return 0;
}
int IsDigit(char ch)
{
if(ch=='1'||ch=='2'||ch=='3'||ch=='4'||ch=='5'||ch=='6'||ch=='7'||ch=='8'||ch=='9'||ch=='0')
return 1;
else return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -