• 大小: 18KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-11-01
  • 语言: C/C++
  • 标签: 编译原理  C语言  

资源简介

编译原理C语言实现词法分析程序带容错处理

资源截图

代码片段和文件信息


#include
#include
#include
#define _KEY_WORD_END “waiting for your expanding“
typedef struct
{
  int typenum;
  char * word;        
}WORD;
char input[255];
char token[255]=““;
int p_input;
int p_token;
char ch;
char * rwtab[]={“begin““if““then““while““do““end““_KEY_WORD_END“};
WORD* scaner();
int main()
{
 aaa:
    fflush(stdin);  
  int over=1;
  WORD* oneword=new WORD;
  printf(“Enter Your words(end with # ):“);
  scanf(“%[^#]s“input);

  p_input=0;
  printf(“Your words:\n%s\n“input);
  while(over<1000&&over!=-1)
  {
    oneword=scaner();
    if(oneword->typenum<1000)
    printf(“(%d%s)“oneword->typenumoneword->word);
    over=oneword->typenum;                          
  }     
  printf(“\n if you want out press any key to exit or press N go no :“);
  fflush(stdin);
  char abc=getchar();

  
  if (abc==‘N‘)
   goto aaa;

}
char m_getch()
{
  ch=input[p_input];
  p_input=p_input+1;
  return (ch);     
}
void getbc()
{
   while(ch==‘ ‘||ch==10)
   {
     ch=input[p_input];
     p_input=p_input+1;                     
   }     
}
void concat()
{
  token[p_token]=ch;
  p_token=p_token+1;
  token[p_token]=‘\0‘;     
}
int letter()
{
  if(ch>=‘a‘&&ch<=‘z‘||ch>=‘A‘&&ch<=‘Z‘)return 1;
  else return 0;    
}
int digit()
{
    if(ch>=‘0‘&&ch<=‘9‘)return 1;
    else return 0;    
}
int reserve()
{
  int i=0;
  while(i<6&&(strcmp(rwtab[i]_KEY_WORD_END)))  
  {if(i<6&&(!strcmp(rwtab[i]token)))
      return i+1;   
   i=i+1;                             
  }
  return 10;
}
void retract()
{
  p_input=p_input-1;     
}
char* dtb()
{
   return NULL;      
}
WORD* scaner()
{
  WORD* myword=new WORD;
  myword->typenum=10;
  myword->word=““;
  p_token=0;
  m_getch();
  getbc();
  if(letter())
  {
    while(letter()||digit())             
    {
       concat();
       m_getch();                                     
    }  
    retract();
    myword->typenum=reserve();
    myword->word=token;
    return (myword);
  }   
  else if (digit()){
       while(digit()){
            concat();
            m_getch();          
                      
                      }
        retract();
        myword->typenum=20;
        myword->word=token;
        return(myword);             
       
       } 
  else switch(ch)
  {
    case‘=‘: m_getch();
    if(ch==‘=‘)
    {
      myword->typenum=39;
      myword->word=“==“;
      return (myword);        
    }    
    retract();
    myword->typenum=21;
      myword->word=“=“;
      return (myword);
      break;
    case ‘+‘:    myword->typenum=22;
                 myword->word=“+“;
                 return (myword);
                 break;
    case ‘-‘:    myword->typenum=23;
                 myword->word=“-“;
                 return (myword);
                 break;
    case ‘*‘:    myword->typenum=24;
                 myword->word=“*“;
       

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        5848  2013-10-10 22:09  cifa.cpp
     文件       49117  2013-10-10 22:09  cifa.exe

评论

共有 条评论