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

📄 wordanalysoperator.cpp

📁 词法分析器,实现了编译原理的词法分析 ,
💻 CPP
字号:
/* 保留字表和标识符表,符号表
   判断读入的字符或者字符串是不是保留字
   如果不是的话则将读入的字符加入到符号表*/
#include <stdio.h>
#include <stdlib.h>


char GetBC(char ch);          //检查输入的ch是否为空,若为空则返回0,否则返回1
int IsLetter(char ch);       //判断读入的字符是不是字母
int IsDigit(char ch);         //判断读入的字符是不是数字
void Concat(char *strToken,char ch);  //将输入的字符加入到字符串之后
void Retract(char *strToken,char ch);//将搜索指示器调回一个位置,并且将ch清空
int InsertId(char *strToken);       //将strToken中的常数插入符号表,返回其指针
int InsertConst(char *strToken); //将strToken中的常数插入常数表,返回其指针


void main()
{
  int code,value;
 // int i;
  char *strToken;
  char ch;
  *strToken="";
  ch=getchar();

  ch=GetBC(ch);
  //i=GetBC(ch);   //检查输入的ch是否为空,若为空则返回0,否则返回1

  /*if(i==0) 
  {
	  printf("输入的为空字符,没有可以处理的内,请选择是否继续,1为继续,2为退出\n");
      scanf("%d",&n);

	  switch(n)
	  {
	  case 1: ch=gechar();
	  case 2: break;
		  default break;
	  }
  } 
  */
   //else
   //{
     if(IsLetter(ch))      //判断输入的是不是字母
	 {
		 Concat(*strToken,ch);  //将输入的字符加入到字符串之后
         ch=getchar();
		  
		 while(IsLetter(ch)||IsDigit(ch)) //判断输入的字符是数字或者字母,如果是的话则继续输入
		 {
		   Concat(strToken,ch);  //继续将输入的字符加入到字符串后
            ch=gechar();		 
		 }
        
	    Retract(strToken,ch);    //将搜索指示器调回一个位置,并且将ch清空

		code=Reserve(strToken);  /*判断读入的字符串是不是保留字,如果是保留字的话则返回它的
		                           
		                         编码,不是的话返回0*/
	
		     if(code=0)   //读入的是不是保留字,则它是以个标识符
		   {
		      value=InsertId(*strToken);  //将字符串中的标识符插入到符号表里,返回符号表指针
			  return ($ID,value);
		
		   }
	 
	         else
				 return (code, -); //返回保留字的编码
	 }
    else if(IsDigit(ch))	
	   {
	     Concat(*strToken,ch);  //将输入的字符加入到字符串之后
         ch=getchar();
	        while(IsDigit(ch))
			{
	          Concat(strToken,ch);  //继续将输入的字符加入到字符串后
              ch=gechar();
	   		}
	   
	    Retract(strToken,ch);    //将搜索指示器调回一个位置,并且将ch清空
	    value=InsertConst(strToken);   //将strToken中的常数插入常数表,返回其指针
		
		return ($INT, value);
	   }
	
	else if(ch=='=')  return($ASSIGN,-);
    else if(ch=='+')  return($PLUS,-);
    else if(ch=='*')     
	{
      Concat(strToken,ch); 
	  ch=gechar();
	      if(ch=="*")  return($POWER,-);
	  Retract(strToken,ch); 
	      return ($STAR,-);
	}
    else if(ch==';')  return($SEMICOLON,-);
    else if(ch=='(')  return($LPAR,-);
	else if(ch==')')  return($RPAR,-);
    else if(ch=='{')  return($LBRACE,-);
    else if(ch=='}')  return($RBRACE,-);

}

char GetBC(char ch)        //检查输入的ch是否为空,若为空则返回0,否则返回1
{
  if(ch=="")	  
  {
	  ch=getchar();
  }
  return ch;
}  

int IsLetter(char ch)       //判断读入的字符是不是字母
{
  if(((ch>='A')&&(ch<='Z'))||((ch>='a')&&(ch<='z')))
    return 1;
}

int IsDigit(char ch)        //判断读入的字符是不是数字
{
  if((ch<='9')&&(ch>='0'))
	  return 1;
}

void Concat(char *strToken[],char ch)  //将输入的字符加入到字符串之后
{
  
    *(strToken+1)=ch;
  
}

int Reserve(char *strToken)
{
  
}

void Retract(char *strToken,char ch)
{
 strToken=strToken-1;
 ch='';

}

struct digit_node{

 int digit;
 struct digit_node *next;

}

struct letter_node{

char letter;
struct letter_node *next;

}

struct remain_list{
	
	char remain;
    struct remian_list *next;

}

⌨️ 快捷键说明

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