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