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

📄 zx.cpp

📁 进行简单的词法分析
💻 CPP
字号:
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include"search.h"
extern int reserve(char*);//返回单词种别码的函数
extern void output(int,char*);//输出函数
char token[20];//存放字符串的数组
char ch;//接受字符变量
int i;//计数器
int c;//状态码
//处理标志符
void scanner(FILE *fp)//scanner处理标志符函数,*fp指向接收文件的指针
{
 ch=fgetc(fp);//接收字符
 if(isalpha(ch))//判断是否为字母
 {
  token[0]=ch;//将字符存到字符串数组中
  i=1;
  ch=fgetc(fp);//指针后移
  while(isalpha(ch)||isalnum(ch))//以字母开头,后接数字或字母
  {
   token[i]=ch;
   i++;
   ch=fgetc(fp);//再接收字符
  }
  fseek(fp,-1,1);//文件指针后退
  token[i]='\0';//以'\0'结束
  c=reserve(token);//返回字符串数组
  if(c!=-1)
        output(c,token);//输出单词种别码,单词
  else
        output(10,token);//标志符种别码定义为10,返回字符串数组信息 
 }
 //处理整数(大体思想与字符一样)
 else if(isdigit(ch))//判断是否为整数
      {
  token[0]=ch;
  ch=fgetc(fp);
  i=1;
  while(isdigit(ch))
  {
   token[i]=ch;
   i++;
   ch=fgetc(fp);
  }
  token[i]='\0';
  fseek(fp,-1,1);//文件指针后退一个字节
  output(4,token);//int 种别码定义为4
      }
 else
	 //处理界符
  switch(ch)//接收对象为二字节运算符
  {
   case'=':ch=fgetc(fp);
    if(ch=='=')
     output(39,"==");
    else
    {
    fseek(fp,-1,1);//指针后退
    output(21,"=");
    }
    break;
	//以下为一个字节的运算符号
   case'+':output(22,"+");break;// 界符表顺序如下:= == +  -  *  /  ( ) [ ] { } , : ; > >=  < <= !=  
   case'-':output(23,"-");break;
   case'*':output(24,"*");break;
   case'/':output(25,"/");break;
   case'(':output(26,"(");break;
   case')':output(27,")");break;
   case'[':output(28,"[");break;
   case']':output(29,"]");break;
   case'{':output(30,"{");break;
   case'}':output(31,"}");break;
   case',':output(32,",");break;
   case':':output(33,":");break;
   case';':output(34,";");break;
   case'>':ch=fgetc(fp);//判断输入界符是">"或">="
    if(ch=='=')
     output(37,">=");
    else
    {
    fseek(fp,-1,1);
    output(35,">");
    }
    break;
   case'<':ch=fgetc(fp);//判断输入界符是"<"或"<="
    if(ch=='=')
     output(38,"<=");
    else
    {
    fseek(fp,-1,1);
    output(36,"<");
    }
    break;
   case'!':ch=fgetc(fp);
    if(ch=='=')
     output(40,"!=");
    else
    {
    fseek(fp,-1,1);
    output(-1,"ERROR!");//报错
    }
    break;
  }

}
void main()
{
	FILE *fp;
    char test[30];//定义文件长度
	//fp=fopne("test.dat", "w");    
    printf("Please input the file you want to transform:");
    scanf("%s",&test);//输入源程序
    fp=fopen("test.txt","r");//读入字符流
   while(!feof(fp))//判断文件是否结束
   {  
	//fgetc(fp);

    scanner(fp);
   }

}

⌨️ 快捷键说明

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