文档介绍:最新范本,供参考!
页脚下载后可删除,如有侵权请告知删除!
最新范本,供参考!
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
#define NULL 0
struct Stack // 栈构造体: 序号、内容、连接下一结点指针
{
int num;
char name;
struct Stack *next;
};
struct Guiyue// 规那么集构造体:序号、规那么长度、符号、连接下一结点指针
{
int num;
int count;
char name;
struct Guiyue *next;
};
struct Relation // 分析表构造体:状态序号、对应符号列、操作类型的对应序号、操作类型、连接下一结点指针
{
int line_States ;
char rank_Letter;
int relationship;
char name;
struct Relation *next;
};
struct Sign // 符号表构造体: 自变量名、标识类型、连接下一结点指针
{
char name[20];
char kind;
struct Sign *next;
};
struct Word // 单词表构造体: 单词名字、标识类型、状态、序号、行号、连接符号表指针、连接下一结点指针
{
char name[20];
最新范本,供参考!
页脚下载后可删除,如有侵权请告知删除!
最新范本,供参考!
char mark_name;
int state;
int num;
int line;
struct Sign *link;
struct Word *next;
};
FILE *fp1;//文件指针
int row=1,line[10000],Lin[300],w_num;//字符行变量、字符行、单词所在行、字符数
char buffer[10000];//字符串缓冲区
Stack *MarkPush(Stack *ip,char mark,int I_i)//压栈
{
Stack *s;
s=(Stack *)malloc(sizeof(Stack));
s->name=mark;
s->num=I_i;
s->next=ip;
ip=s;
return ip;
}
void MarkPop(Stack *ip)//出栈
{
Stack *q;
char name;
name=ip->name;
q=ip->next;
if(ip->next!=NULL)
{
ip->name=ip->next->name;
ip->num=ip->next->num;
ip->next=ip->next->next;
free(q);
}
}
int judge(char ch)// 接收ch判断字符,变量flag返回字符类别
{
int flag;
if(ch=='!'||ch=='$'||ch=='&'||ch=='*'||ch=='('||ch==')'||ch=='-'||ch=='_'||
ch=='+'||ch=='='||ch=='|'||ch=='{'||ch=='}'||ch=='['||ch==']'||ch==';'||
ch==':'||ch=='"'||ch=='<'||ch==','||ch=='>'||ch=='.'||ch=='/'||ch=='\'')
flag=1;
else if('0'<=ch&&ch<='9')
最新范本,供参考!
页脚下载后可删除,如有侵权请告知删除!
最新范本,供参考!
flag=2;
else if(('a'<=ch&&ch<='z')||('A'<=ch&&ch<='Z'))
flag=3;
else if(ch==' ')
flag=4;
else if(ch=='\n')