天天看點

遞歸下降分析法--算數文法分析

#include<stdio.h>

char curr;

char LL1[1000];

int N=-1;

void T();

void E();

void F();

void e();

void t();

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();

E();

if(curr == '#')

printf("成功!\n");

else{

printf("文法有誤!!\n");

error();

}

}

void scaner(){ //用于讀取源函數的下一個字元

N++;

if(LL1[N] == ' '){

N++;

}else{

curr = LL1[N];

void E(){

T();

e();

void T(){

F();

t();

void e(){

if(curr == '+'){

scaner();

T();

e();

else if(curr == '-'){

}else if(LL1[N+1] == '#' || LL1[N+1] == '+' || LL1[N+1] == '/' || LL1[N+1] == '*' || LL1[N+1] == '-'){

if(LL1[N] != '(' && LL1[N] != ')')

void t(){

if(curr == '*'){

F();

}else if(curr == '/'){

//LIE ZHI HUA TI GONG TAI MA

void F(){

if(curr == '('){

E();

if(curr == ')'){

scaner();

// printf("111111");

}else{

error();

}

//判斷是否是函數或者是數字

//error();

while(1){

if(curr >= 'a' && curr<='z' || curr >= 'A' && curr <= 'Z' || curr >= '0' && curr <= '9'){

scaner();

}else{

break;

}

void error(){

printf("%d %c之後的文法有錯!\n",N,curr);