您的位置:首页 > 其它

1223递归

2015-12-23 17:50 393 查看
#include<stdio.h>
char curr;
char LL1[1000];
int N=-1;

void Top();
void Top1();
void Top2();
void top();
void top1();
void error();
void scaner();

void main()
{    char ch;
int i=0;
printf("请输入需要分析的curr语法:(以#结束)\n");
do{
scanf("%c",&ch);
LL1[i] = ch;
i++;
}while(ch != '#');
scaner();
Top1();
if(curr == '#')
printf("成功!\n");
else{
printf("文法有误!!\n");
error();
}

}

void scaner(){   //用于读取源函数的下一个字符

N++;
if(LL1
== ' '){
N++;
}else{
curr = LL1
;
}
}

void Top(){
Top2();
top();
}

void Top1(){
Top();
top1();
}

void Top2(){
if(curr == '('){
scaner();
Top1();
if(curr == ')'){
scaner();
}
else
{
error();
}
else
{
//判断是否是函数或者是数字
while(1){
if(curr >= 'a' && curr<='z' || curr >= 'A' && curr <= 'Z' || curr >= '0' && curr <= '9'){
scaner();
}
else
{
break;
}
}
}
}

void top(){
if(curr == '*'){
scaner();
Top2();
Top();
}else if(curr == '/'){
scaner();
Top2();
Top();
}else if(LL1[N+1] == '#' || LL1[N+1] == '+' || LL1[N+1] == '/' || LL1[N+1] == '*' || LL1[N+1] == '-'){
if(LL1
!= '(' && LL1
!= ')')
error();
}
}

void top1(){
if(curr == '+'){
scaner();
Top();
top1();
}
else if(curr == '-'){
scaner();
Top();
top1();
}else if(LL1[N+1] == '#' || LL1[N+1] == '+' || LL1[N+1] == '/' || LL1[N+1] == '*' || LL1[N+1] == '-'){
if(LL1
!= '(' && LL1
!= ')')
error();
}
}

void error(){
printf("%d %c之后的文法有错!\n",N,curr);
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: