简单的语法分析编写一个语法分析程序,能够查找C语言源程序中的基本语法错误,如圆括号、方括号、花括号的不匹配;如单引号和双
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/18 23:16:07
简单的语法分析
编写一个语法分析程序,能够查找C语言源程序中的基本语法错误,如圆括号、方括号、花括号的不匹配;如单引号和双引号;如单词拼写错误if写成iff;仅一个if却有两个else等.要求能够显示错误信息,并指出错误行数.C语言源程序保存在一个写字板或记事本文件中.
要求:(1)对任意C语言输入的程序均能识别出其中的词法和语法错误;
(2)注意数据结构的选择,实物演示时要求讲出程序原理.
(3)除了以上所列之外,能够识别尽量多的词法和语法错误;
(4)能够提供良好的图形用户界面.
(5)利用SWITCH…CASE语句完成.
编写一个语法分析程序,能够查找C语言源程序中的基本语法错误,如圆括号、方括号、花括号的不匹配;如单引号和双引号;如单词拼写错误if写成iff;仅一个if却有两个else等.要求能够显示错误信息,并指出错误行数.C语言源程序保存在一个写字板或记事本文件中.
要求:(1)对任意C语言输入的程序均能识别出其中的词法和语法错误;
(2)注意数据结构的选择,实物演示时要求讲出程序原理.
(3)除了以上所列之外,能够识别尽量多的词法和语法错误;
(4)能够提供良好的图形用户界面.
(5)利用SWITCH…CASE语句完成.
帮你找了一个,感觉还不错:
#include
#include
#define size 100
typedef char E;
typedef struct{
int top;
E *base;
int Ssize;
}Stack;
void Init(Stack *S){
S->base=(E *)malloc(size*sizeof(E));
S->top=0;
S->Ssize=size;
}int Len(Stack S){
return(S.top);
}int Top(Stack S,E *e){
if(!S.top)return(0);
*e=S.base[S.top-1];
return(1);
}int Push(Stack *S,E e){
if(S->top>=S->Ssize){
S->base=(E *)realloc(S->base,(S->Ssize+1)*sizeof(E));
if(!S->base)return(0);
S->Ssize++;
}S->base[S->top++]=e;
return(1);
}int Pop(Stack *S,E *e){
if(!S->top)return(0);
*e=S->base[--S->top];
return(1);
}int isEmpty(Stack S){
if(!S.top)return(1);return(0);
}void main(){
FILE *in;
Stack S;
long l=1,k=0;
char i[100],ch;
E t;
Init(&S);
printf("文件名:");
scanf("%s",i);
in=fopen(i,"r");
for(;;){
ch=fgetc(in);
if(ch==-1)break;
else if(ch=='\\'){ch=fgetc(in);continue;}
else if(ch!='\''||ch!='\"'&&!Top(S,&t)&&t=='\''||t=='\"')continue;
else if(ch=='('||ch=='['||ch=='{')Push(&S,ch);
else if(ch==')'){
if(!Top(S,&t)){k++;printf("第%ld行多\')\'\n");}
else if(t!='('&&t!='\''&&t!='\"'){k++;printf("第%ld行\')\'用法错误\n",l);}
else if(t=='(')Pop(&S,&t);
}else if(ch==']'){
if(!Top(S,&t)){k++;printf("第%ld行多\']\'\n");}
else if(t!='['&&t!='\''&&t!='\"'){k++;printf("第%ld行\']\'用法错误\n",l);}
else if(t=='[')Pop(&S,&t);
}else if(ch=='}'){
if(!Top(S,&t)){k++;printf("第%ld行多\'}\'\n");}
else if(t!='{'&&t!='\''&&t!='\"'){k++;printf("第%ld行\'}\'用法错误\n",l);}
else if(t=='{')Pop(&S,&t);
}else if(ch=='\''||ch=='\"'){
if(!Top(S,&t)||t!=ch)Push(&S,ch);
else Pop(&S,&t);
}else if(ch=='\n')l++;
}if(!isEmpty(S)){k++;printf("第%ld行发现未知错误\n",l);}
if(k)printf("共%ld个错误\n",k);
else printf("无错误\n");
fclose(in);
}
#include
#include
#define size 100
typedef char E;
typedef struct{
int top;
E *base;
int Ssize;
}Stack;
void Init(Stack *S){
S->base=(E *)malloc(size*sizeof(E));
S->top=0;
S->Ssize=size;
}int Len(Stack S){
return(S.top);
}int Top(Stack S,E *e){
if(!S.top)return(0);
*e=S.base[S.top-1];
return(1);
}int Push(Stack *S,E e){
if(S->top>=S->Ssize){
S->base=(E *)realloc(S->base,(S->Ssize+1)*sizeof(E));
if(!S->base)return(0);
S->Ssize++;
}S->base[S->top++]=e;
return(1);
}int Pop(Stack *S,E *e){
if(!S->top)return(0);
*e=S->base[--S->top];
return(1);
}int isEmpty(Stack S){
if(!S.top)return(1);return(0);
}void main(){
FILE *in;
Stack S;
long l=1,k=0;
char i[100],ch;
E t;
Init(&S);
printf("文件名:");
scanf("%s",i);
in=fopen(i,"r");
for(;;){
ch=fgetc(in);
if(ch==-1)break;
else if(ch=='\\'){ch=fgetc(in);continue;}
else if(ch!='\''||ch!='\"'&&!Top(S,&t)&&t=='\''||t=='\"')continue;
else if(ch=='('||ch=='['||ch=='{')Push(&S,ch);
else if(ch==')'){
if(!Top(S,&t)){k++;printf("第%ld行多\')\'\n");}
else if(t!='('&&t!='\''&&t!='\"'){k++;printf("第%ld行\')\'用法错误\n",l);}
else if(t=='(')Pop(&S,&t);
}else if(ch==']'){
if(!Top(S,&t)){k++;printf("第%ld行多\']\'\n");}
else if(t!='['&&t!='\''&&t!='\"'){k++;printf("第%ld行\']\'用法错误\n",l);}
else if(t=='[')Pop(&S,&t);
}else if(ch=='}'){
if(!Top(S,&t)){k++;printf("第%ld行多\'}\'\n");}
else if(t!='{'&&t!='\''&&t!='\"'){k++;printf("第%ld行\'}\'用法错误\n",l);}
else if(t=='{')Pop(&S,&t);
}else if(ch=='\''||ch=='\"'){
if(!Top(S,&t)||t!=ch)Push(&S,ch);
else Pop(&S,&t);
}else if(ch=='\n')l++;
}if(!isEmpty(S)){k++;printf("第%ld行发现未知错误\n",l);}
if(k)printf("共%ld个错误\n",k);
else printf("无错误\n");
fclose(in);
}
简单的语法分析编写一个语法分析程序,能够查找C语言源程序中的基本语法错误,如圆括号、方括号、花括号的不匹配;如单引号和双
c++括号匹配检验利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随
表达式括号匹配问题一个表达式中包括变量、常量、操作符、圆括号,圆括号可以嵌套,编写程序判断表达式中的括号是否正确匹配.输
在编译原理LL(1)自顶向下语法分析程序中,advance是做什么用的,如何用C语言实现?
如何用if else语句编写计算九级超额累进个人所得税的c语言源程序及流程图
越狱中的一句话的语法分析
数据结构C语言括号的检验源程序
如何用C语言编写求对称矩阵的特征值和特征向量的程序
一个英语句子的语法分析
编译原理语法分析实验编制一个递归下降分析程序,C语言代码.
如何用c语言在一组数中查找一个和已知数最接近的数值,像excel中的hlookup一样
句子语法分析 尤其是括号内的成分