资源简介

编译原理 课程设计 小子集程序 南工大计软

资源截图

代码片段和文件信息

#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=1line[10000]Lin[300]w_num;//字符行变量、字符行、单词所在行、字符数
char buffer[10000];//字符串缓冲区
Stack *MarkPush(Stack *ipchar markint 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‘)                                  
flag=5;
else if(ch==‘?‘)                                   
flag=6;
else if(feof(fp1))
        flag=7;//结束
else                                               
flag=0;      //illegal character
return(flag);
}
//======================================================================================================
//  词法分析函数: void scan()
//      数据传递: 形参fp接收指向文本文件头的文件指针;
//                全局变量buffer与line对应保存源文件字符及其行号,char_num保存字符总数。
void scan()
{
char ch;
int flagj=0i=-1;
while(!feof(fp1))
{
ch=fgetc(fp1);
flag=judge(ch);
printf(“%c“ch);//显示打开的文件
       if(flag==1||flag==2||flag==3)    {i++;buffer[i]=ch;line[i]=row;}
  else if(flag==4)                 {i++;buffer[i]=‘?‘;line[i]=row;}
      else if(flag==5)                 {i++;buffer[i]=‘~‘;row++;}
else if(flag==7)  continue;
       else  cout<<“\n请注意,第“< }                                         
w_num=i;

/*****************确定单词所在的行*****************/
int onetwok=0;
for(i=0;i one=judge(buffer[i]);
two=judge(buffer[i+1

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      58368  2009-01-08 14:31  C编译器\Debug\vc60.idb

     文件      69632  2009-01-08 14:31  C编译器\Debug\vc60.pdb

     文件     237636  2009-01-08 14:31  C编译器\Debug\简单C编译器.exe

     文件     283256  2009-01-08 14:31  C编译器\Debug\简单C编译器.ilk

     文件      63710  2009-01-08 14:31  C编译器\Debug\简单C编译器.obj

    I.A....    347176  2009-01-08 14:31  C编译器\Debug\简单C编译器.pch

     文件     484352  2009-01-08 14:31  C编译器\Debug\简单C编译器.pdb

     文件        143  2009-01-08 12:47  C编译器\li.txt

     文件        159  2009-01-08 13:23  C编译器\liyoubu.txt

     文件        664  2009-01-07 11:49  C编译器\LR.txt

     文件      31320  2009-01-08 13:20  C编译器\简单C编译器.cpp

     文件       3463  2009-01-08 14:31  C编译器\简单C编译器.dsp

     文件        547  2009-01-08 14:32  C编译器\简单C编译器.dsw

     文件      41984  2009-01-08 14:32  C编译器\简单C编译器.ncb

     文件      48640  2009-01-08 14:32  C编译器\简单C编译器.opt

     文件        256  2009-01-08 14:31  C编译器\简单C编译器.plg

     目录          0  2009-01-08 14:31  C编译器\Debug

     目录          0  2009-01-08 14:32  C编译器

----------- ---------  ---------- -----  ----

              1671306                    18


评论

共有 条评论