#include<stdio.h>
char curr;
char LL1[1000];
int N=0;
void scaner();
int digital(){ //panduanshifouweishuzi
if(curr >= '0' && curr <= '9')
{
return 1;
}
else {
return 0;
}
int english(){
if(curr >= 'a' && curr<='z' || curr >= 'A' && curr <= 'Z')
{
return 1;
}
else
return 0;
int yuansuanf(){
if(curr=='+'||curr=='-'||curr=='*'||curr=='/')
{
return 1;
}
else{
int end(){
if(curr!='#'){
return 1;
}
int check(){
if(digital()==1){
scaner();
if(end()==1){
if(yuansuanf()==1){
return 1;
}
else if(yuansuanf()==0){
return 0;
}
else if(end()==0){
return 1;
return 0;
void checking(){
int number;
qq: scaner();
if(digital()==1){
while(curr!='#'){
number=check();
if(number==1){
goto qq;
}
else if(number==0){
break;
if(number==1){
printf("沒有錯誤\n");
else
printf("%c\n錯誤\n",curr);
void main()
{ char ch;
int i=0;
printf("請輸入需要分析的文法:(以#結束)\n");
do{
scanf("%c",&ch);
LL1[i] = ch;
i++;
}while(ch != '#');
scaner();
checking();
void scaner(){ //用于讀取源函數的下一個字元
N++;
if(LL1[N] == ' '){
N++;
}else
{
curr = LL1[N];
