首页 > 代码库 > 语法分析程序

语法分析程序

语法分析程序
技术分享

#include<stdio.h>#include <stdlib.h>typedef struct link //字符链表{ char data; struct link *next;}Link;char special[10];void specialchar(Link *charhead);main(){ char n; Link *charhead; //定义头结点 Link *p,*q; charhead=q=(Link *)malloc(sizeof(Link)); //申请空间 charhead->next=q; //初始化链表 q->next=NULL; printf("请输入一个字符串:"); do { scanf("%c",&n); if(n==\n) break; p=(Link *)malloc(sizeof(Link)); p->data=http://www.mamicode.com/n; //把输入的字符存入链表中 p->next=NULL; q->next=p; q=p; }while(n!=\n); q=charhead->next; /*while(q!=NULL) { printf("%c",q->data); q=q->next; }*/ printf("语法分析:\n"); specialchar(charhead);}void specialchar(Link *charhead){ Link *q,*p; int i; q=charhead->next; while(q!=NULL) { switch(q->data) { case b: //判断是否是标识符begin special[0]=q->data; //一步一步存入数组 q=q->next; if(q->data=http://www.mamicode.com/=e) { special[1]=q->data; q=q->next; if(q->data=http://www.mamicode.com/=g) { special[2]=q->data; q=q->next; if(q->data=http://www.mamicode.com/=i) { special[3]=q->data; q=q->next; if(q->data=http://www.mamicode.com/=n) { special[4]=q->data; printf("<标识符> "); for(i=0;i<5;i++) printf("%c",special[i]); printf("\n"); } } } } break; case i: //判断是否是标识符if special[0]=q->data; q=q->next; if(q->data=http://www.mamicode.com/=f) { special[1]=q->data; printf("<标识符> "); for(i=0;i<2;i++) printf("%c",special[i]); printf("\n"); } break; case t: special[0]=q->data; q=q->next; if(q->data=http://www.mamicode.com/=h) { special[1]=q->data; q=q->next; if(q->data=http://www.mamicode.com/=e) { special[2]=q->data; q=q->next; if(q->data=http://www.mamicode.com/=n) { special[3]=q->data; printf("<标识符> "); for(i=0;i<4;i++) printf("%c",special[i]); printf("\n"); } } } break; case w: special[0]=q->data; //一步一步存入数组 q=q->next; if(q->data=http://www.mamicode.com/=h) { special[1]=q->data; q=q->next; if(q->data=http://www.mamicode.com/=i) { special[2]=q->data; q=q->next; if(q->data=http://www.mamicode.com/=l) { special[3]=q->data; q=q->next; if(q->data=http://www.mamicode.com/=e) { special[4]=q->data; printf("<标识符> "); for(i=0;i<5;i++) printf("%c",special[i]); printf("\n"); } } } } break; case d: special[0]=q->data; q=q->next; if(q->data=http://www.mamicode.com/=o) { special[1]=q->data; printf("<标识符> "); for(i=0;i<2;i++) printf("%c",special[i]); printf("\n"); } if(q->data=http://www.mamicode.com/=d) { special[1]=q->data; q=q->next; if(q->data=http://www.mamicode.com/=*) { special[2]=q->data; printf("<标识符> "); for(i=0;i<3;i++) printf("%c",special[i]); printf("\n"); } } break; case e: special[0]=q->data; q=q->next; if(q->data=http://www.mamicode.com/=f) { special[1]=q->data; q=q->next; if(q->data=http://www.mamicode.com/=f) { special[2]=q->data; printf("<标识符> "); for(i=0;i<3;i++) printf("%c",special[i]); printf("\n"); } } break; case l: special[0]=q->data; //一步一步存入数组 q=q->next; if(q->data=http://www.mamicode.com/=() { special[1]=q->data; q=q->next; if(q->data=http://www.mamicode.com/=l) { special[2]=q->data; q=q->next; if(q->data=http://www.mamicode.com/=|) { special[3]=q->data; q=q->next; if(q->data=http://www.mamicode.com/=d) { special[4]=q->data; q=q->next; if(q->data=http://www.mamicode.com/=)) { special[5]=q->data; q=q->next; if(q->data=http://www.mamicode.com/=*) { special[6]=q->data; printf("<标识符> "); for(i=0;i<7;i++) printf("%c",special[i]); printf("\n"); } } } } } } break; case +: printf("<加号> %c",q->data); printf("\n"); break; case -: printf("<减号> %c",q->data); printf("\n"); break; case *: printf("<乘号> %c",q->data); printf("\n"); break; case /: printf("<标识符> %c",q->data); printf("\n"); break; case :: special[0]=q->data; q=q->next; if(q->data=http://www.mamicode.com/==) { special[1]=q->data; printf("<赋值号> "); for(i=0;i<2;i++) printf("%c",special[i]); } else printf("<赋值号> %c",special[0]); printf("\n"); break; case <: special[0]=q->data; q=q->next; if(q->data=http://www.mamicode.com/==) { special[1]=q->data; printf("<标识符> "); for(i=0;i<2;i++) printf("%c",special[i]); printf("\n"); } else if(q->data=http://www.mamicode.com/=>) { special[1]=q->data; printf("<标识符> "); for(i=0;i<2;i++) printf("%c",special[i]); printf("\n"); } else{ printf("<小于号> "); printf("%c",special[0]); printf("\n"); } break; case >: special[0]=q->data; q=q->next; if(q->data=http://www.mamicode.com/==) { special[1]=q->data; printf("<标识符> "); for(i=0;i<2;i++) printf("%c",special[i]); printf("\n"); } else{ printf("<大于号> "); printf("%c",special[0]); printf("\n"); } break; case =: printf("<赋值符> %c",q->data); printf("\n"); break; case ;: printf("<分号> %c",q->data); printf("\n"); break; case (: printf("<左括号> %c",q->data); printf("\n"); break; case ): printf("<右括号> %c",q->data); printf("\n"); break; case #: printf("<井号> %c",q->data); printf("\n"); break; } q=q->next; }}

 

语法分析程序