⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 table.h

📁 一个词法分析器的源程序
💻 H
字号:
#ifndef TABLE_H
#define TABLE_H
#include<string.h>
struct SignTab{
	int ID;             //名字入口地址
	int LEN;
	int TYPE;
	char VAL[MAX/2];
	int ADDR;
};
static SignTab Table[100]={0,};      //符号表,初始化0号单元
static char namesign[100][MAX/2]={0,};//初始化0号单元
static int k=1;
static FILE*sign=fopen("sign.txt","w"); 
static FILE*nmsign=fopen("namesign.txt","w");                     
static int SearchTab(char str[])//查填符号表
{
  int ss;
  for(int i=1;i<=100;i++)
  {
    ss=strcmp(namesign[Table[i].ID],str);//上面已经初始化了0号单元为0
	if(!ss)
	{
      return(i);           
	}
	ss=strcmp(Table[i].VAL,str);
	if(!ss)
	{
	  return(i);
	}
  }                        
  return 0;                
} 
                         
int AddTab(int kind,char str[])
{
  int temp,temp1;          //  ______
  temp1=SearchTab(str);    // |标识符| _____________________________________________
  if(temp1)                // |名表__||         名字          |类型   |值   |地址   |
  {                        //   /\    |_______________________|       |     |       |
    temp=temp1;            //   |     |ID(名字表入口) |名字长 |       |     |       |
  }                        //   |_____|_______________|_______|_______|_____|_______|
  if(!temp1)               //         |       1       |   6   | 36 bsf|  -  |       |
  {                        //         |_______________|_______|_______|_____|_______|
	if(kind==36)           //         |       2       |   0   | 38bool| abc |       |
	{                      //         |_______________|_______|_______|_____|_______|
	  Table[k].ID=k;       //         |       3       |   0   | 37 int|  37 |       |
	  Table[k].LEN=strlen(str);     //|_______________|_______|_______|_____|_______|
      Table[k].TYPE=kind;
	}
	else
	{
	  Table[k].ID=k;
	  Table[k].LEN=0;
	  Table[k].TYPE=kind;
	}
	if(kind==37||kind==38)
	{
	  strcpy(Table[k].VAL,str);
	}
	else
	{
	  strcpy(Table[k].VAL,"-");
	  strcpy(namesign[Table[k].ID],str);
	}
	//写标识符名字表
	fwrite(namesign[Table[k].ID],strlen(namesign[Table[k].ID]),1,nmsign);
    //写符号表项(包括标识符,整数和字符常数)
	fwrite((char*)&Table[k],sizeof(SignTab),1,sign);
	temp=k;
    k++;
  }
  return(temp);
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -