• 大小: 6KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2022-11-30
  • 语言: C/C++
  • 标签: 词法分析  

资源简介

一、实验任务:编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号。(遇到错误时可显示“Error”,然后跳过错误部分继续显示)

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 

using namespace std;

ifstream infile(“Test.txt“ios::in);
ofstream outfile(“Answear.txt“ios::out);
char cbuffer;
char *key[13]={“var““const““begin““end““while““do““read““write““if““then““procedure““call““odd“};  
char *border[5]={ ““  “;“   “(“  “)“ “.“};                //分界符
char *arithmetic[4]={“+“  “-“  “*“  “/“ };                    //运算符
char *relation[7]={“<“  “=“  “>“  “#“  “<=“  “>=“ “:=“};             //关系运算符   


int search(char searchchar[]int wordtype)
{
    int i=0t=0;
    switch (wordtype)
{
       case 1:
   { 
   for (i=0;i<=12;i++)         //关键字
   {
                  if (strcmp(key[i]searchchar)==0)
                     return(i+1);
   }
                return(0);
   }
       case 2:
   {
            for (i=0;i<=4;i++)    //分界符
{
           if (strcmp(border[i]searchchar)==0)
               return(i+1);

            return(0);
   }  
        case 3:
{
                for (i=0;i<=3;i++)    //运算符
{
               if (strcmp(arithmetic[i]searchchar)==0)
  return(i+1);
}
return(0);
}  
        case 4:
{
  for (i=0;i<=6;i++)    //关系运算符
  {
if (strcmp(relation[i]searchchar)==0)
                return(i+1);
  }
                 return(0);
}
        case 5:   //空格
return (1);
 
}
}


char alphaprocess(char buffer)                //字符处理过程
{
 int atype;
 int i=-1;
 char alphatp[20];
     while ((isalpha(buffer))||(isdigit(buffer)))  //这两个函数分别是判字符和判数字函数位于ctype.h中
 {
  alphatp[++i]=buffer;
  infile.get(buffer);
 }
     alphatp[i+1]=‘\0‘;//在末尾添加字符串结束标志
     if (atype=search(alphatp1))
 outfile<  else
 {
 atype=search(alphatp6);              //标识符
         outfile<<“ident    \““<  }
     return(buffer);
}

char digitprocess(char buffer)  //数字处理过程
{
 int i=-1;
 char digittp[20];
 int dtype;
      while ((isdigit(buffer)))
  {
  digittp[++i]=buffer;
  infile.get(buffer);
  }
 digittp[i+1]=‘\0‘;
 dtype=search(digittp5);
 outfile<<“number    \““<  return(buffer);
}

char otherprocess(char buffer)   //分界符、运算符、逻辑运算符、等
{
 int i=-1;
 char othertp[20];
 int otypeotypetp;
 othertp[0]=buffer;
 othertp[1]=‘\0‘;
      if (otype=search(othertp3))   //运算符
  {
          infile.get(buffer);
        switch(otype-1){   
  case 0: outfile<<“plus            \“ “<   case 1: outfile<<“subtract        \“ “<

评论

共有 条评论