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

📄 my_read_in.h

📁 这是个源码合集
💻 H
字号:
#include "my_judge.h"
#include "my_error.h"

//////////////////////////////////////
//  词法分析部分功能函数清单:
//
void GetChar();
//将下一输入字符读到ch中,搜索指示器前移一字符位置。

void GetBC();
//检查ch中的字符是否为空白。
//若是,则调用GetChar直至ch中进入一个非空格字符。

void Concat();
//将ch中的字符接到strToken之后

void Retract();
//将搜索指示器回调一个字符位置,设ch为空白字符。

int InsertId();
//将strToken中的标识符加入变量名表

int InsertConst();
//将strToken中的常量加入常量表

int Reserve();
//对strToken中的字符查保留字表,若它是一个保留字则返回它的编码,
//否则返回0,(假定0不是保留字的编码)。

int Reserve_Flag();
//对strToken中的字符查符号表,若它是一个符号则返回它的编码,
//否则返回0,(假定0不是符号的编码)。

void Get_A_Word(ofstream onfile);
//读入一个单词,并转换他的内码。

//
///////////////////////////////////////////////////////////////

//////////////////////////////////////
//  词法分析部分功能函数清单:
//
    
//
///////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////
void GetChar()
{
  ch=buff[I];
  I++;
  //cout<<"get_ch-----:  "<<ch<<endl;
};
///////////////////////////////////////////////////////
void GetBC()
{
  while(ch==32)
  {
    ch=buff[I];
	I++;
  }
};
///////////////////////////////////////////////////////
void Concat()
{
  char temp[2];
  temp[0]=ch;
  temp[1]='\0';
  strcat(strToken,temp);
};
///////////////////////////////////////////////////////
void Retract()
{
 I--;
 ch=32;
};
///////////////////////////////////////////////////////
int InsertId()
{
	for(int i=0;i<=J;i++)
	{
      if(strcmp(strToken,b[i])==0)
	  {
	    return b_value[i];
	  }
	}
	strcpy(b[J],strToken);
    b_value[J]=BY_BEGIN_OF_V+1+J;
    J++;
    return b_value[J-1];
}
///////////////////////////////////////////////////////
int InsertConst()
{
	for(int i=0;i<=K;i++)
	{
      if(strcmp(strToken,c[i])==0)
	  {
	    return c_value[i];
	  }
	}
 strcpy(c[K],strToken);
 c_value[K]=BY_BEGIN_OF_C+1+K;
 K++;//全局变量K返回的是本待测程序的常量个数
 return c_value[K-1];
}
/////////////////////////////////////////////////////////
void Get_A_Word(ofstream onfile)
{
    int code=0;
	strcpy(strToken,"");
	GetChar();	
	GetBC();
	if(isalpha_S(ch))//单词如果以小写字母开始
	{
      //cout<<"单词如果以小写字母开始"<<endl;
	  while(isalnum(ch)||isalpha(ch)||isunderline(ch))//后接数字、字母、下划线
	  {
		  Concat();     
		  GetChar();
	  }	
	  Retract();
      code=InsertConst();//  //cout<<"这样的单词是常量或函子"<<endl;
	  if(code!=0)
	  {
/*****/onfile<<code<<endl;
/*****/onfile<<strToken<<endl;
       Syn_Lines++;
//onfile<<endl;
	  }
	  else
	  {
        error(0);
	  }
	}
	else//单词不是以小写字母开始
	{
	  if(isalpha_G(ch)||isunderline(ch))//单词如果以大写字母或者下划线开始
	  {
         //cout<<"单词如果以大写字母或者下划线开始"<<endl;
	     while(isalnum(ch)||isalpha(ch)||isunderline(ch))//后接数字、字母、下划线
		 {
	        Concat();     
		    GetChar();
		 }
	     Retract();
         code=InsertId();  //cout<<"这样的单词是变量"<<endl;
	     if(code!=0)
		 {
/*******/onfile<<code<<endl;
/*******/onfile<<strToken<<endl;
         Syn_Lines++;
//onfile<<endl;
		 }
	     else
		 {
           error(0);
		 }
	  }
	  else//单词不以大写字母、小写字母、下划线开始,则单词是符号或无效符号
	  {
          //cout<<"单词不以大写字母、小写字母、下划线开始,则单词是符号或无效符号"<<endl;
		  switch (ch)
		  {
		   case '.': Concat(); code=DOT; break;
		   case ',': Concat(); code=COM; break;
		   case ';': Concat(); code=SEM; break;
		   case '(': Concat(); code=LBR; break; 
		   case ')': Concat(); code=RBR; break;
           case '!': Concat(); code=BRK; break;
		   case ':':
		            Concat(); GetChar();
                    if (ch=='-')
					{ Concat(); code=IF; }
					else
					{ Retract(); code=0; }
		   break;
		  }
	    if(code!=0)
		{
/********/onfile<<code<<endl;
/********/onfile<<strToken<<endl;
          Syn_Lines++;
//onfile<<endl;
		}
	    else
		{
		  error(0);
		}
	  }
	}
  //字符串读函数 fgets(str,n,fp)
  //从指定文件(fp)读入n-1 个字符,如果在读入n-1个字符之前遇到换行符或EOF(-1),
  //读入即结束,结束后,在最后加上一个'\0'
  //fgets函数返回str的地址
}
/////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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