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

📄 pre.cpp

📁 一个词法分析器的源程序
💻 CPP
字号:
#include"lex.h"

int buf_pos=0,frag1=0;
char ch,ch1;
char buffer[MAX];
char strout2[1000];
int c2=0;
int col=1;
void fre_buf(int frag)//加载缓冲区,作预处理
{
  int i,j;
  if(frag==0)
  {
    j=0;
  }
  else
  {
    j=MAX/2;
  }
  for(i=0;i<MAX/2;)
  {
    ch=fgetc(fd);
	if(ch==' '||ch=='\t'||ch=='\r')
	{
	  buffer[i+j]=' ';
	  i++;
	  for(ch=fgetc(fd);ch==' '||ch=='\t';ch=fgetc(fd));
	  buffer[i+j]=ch;
	}
	else
	{
	  buffer[i+j]=ch;
	}
	i++;
  }
}

char gch()//缓冲区空,轮流加载左右缓冲半区
{
  int frag;
  if(buf_pos==0&&frag1==0)
  {
    frag=0;
	fre_buf(frag);
  }
  if(buf_pos==MAX/2&&frag1==0)
  {
    frag=1;
	fre_buf(frag);
  }
  return(buffer[buf_pos]);
}

char get_ch()
{
  ch1=gch();
  buf_pos++;
  if(buf_pos==MAX-1)
  {
    buf_pos=0;
  }
  if(frag1>0)
  {
    frag1--;
  }
  strout2[c2++]=ch1;//存储源程序到strout2[]中,供输出用
  if(strout2[c2-1]=='\n')
  {
    col++;
  }
  return(ch1);
}

void retract()
{
  buf_pos--;
  c2--;
  if(buffer[buf_pos]=='\n')
  {
    col--;
  }
  if(buf_pos<0)
  {
    buf_pos=MAX-1;
  }
  frag1++;
  ch=' ';
  return;
}

///////////////简单判断
int IsSign(char currentch)
{
  if((currentch>='A'&&currentch<='Z')||(currentch>='a'&&currentch<='z')
	  ||(currentch>='0'&&currentch<='9')||(currentch=='+')||(currentch=='-')
	  ||(currentch=='*')||(currentch=='/')||(currentch=='=')||(currentch=='<')
	  ||(currentch=='>')||(currentch=='(')||(currentch==')')||(currentch=='[')
	  ||(currentch==']')||(currentch==':')||(currentch=='.')||(currentch==';')
	  ||(currentch==',')||(currentch=='\''))
  {
    return 1;
  }
  else
  {
    return 0;
  }
}

int IsLetter(char currentch)
{
  if((currentch>='A'&&currentch<='Z')||(currentch>='a'&&currentch<='z'))
  {
    return 1;
  }
  else
  {
    return 0;
  }
}

int IsDigit(char currentch)
{
  if(currentch>='0'&&currentch<='9')
  {
    return 1;
  }
  else 
  {
    return 0;
  }
}

int IsGJZ(char str[])
{
  int i,m;
  for(i=0;i<=34;)
  {
    m=strcmp(str,guanjian[i]);
	if(m==0)
	{
	  return(i+1);
	}
	i++;
  }
  return 0;
}


⌨️ 快捷键说明

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