当前位置:   article > 正文

简易C语言词法分析器_编制一个能够分析给定范围内的整数、标识符的词法分析器

编制一个能够分析给定范围内的整数、标识符的词法分析器

    简单的词法分析器,可以对标识符,关键字,数字,运算符等进行分析。源代码从文件读取,文件名在词法分析器运行的时候输入,预处理的结果和分析的结果都会写入文件,处理结果我放到最后。

一、对源代码进行处理
  • 处理空格:如果空格只有一个就保留,如果有连续多个空格只保留一个。要处理的字符串是放在 char *buf, 处理后的字符串放在char *cur,len是buf的长度,返回值是cur的长度。
int chooseSpace(char *buf, int *len, char *cur)
{
   /** 处理源代码里面的空格 */
   int it_buf, it_cur; // buf 和 cur 的迭代器
   it_buf = it_cur = 0;
   while(it_buf<*len)
   {
       if(buf[it_buf]!=' ')
       {
           cur[it_cur++] = buf[it_buf++];
       }
       else{
           cur[it_cur++] = buf[it_buf++];
           /* 处理连续空格*/
           while(buf[it_buf]==' ')
           {
               it_buf++;
           }
       }
   }
   cur[it_cur] = '\0';
   return it_cur;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 处理注释:注释分为单行和多行注释,单行注释一般是//,多行注释一般是/* */,应该对他们都能处理。要处理的字符串是放在 char *buf, 处理后的字符串放在char *cur,len是buf的长度,返回值是cur的长度。
int chooseComment(char *buf, int *len, char *cur)
{
   /** 处理源代码里面的注释 */
   int it_buf, it_cur; // buf 和 cur 的迭代器
   it_buf = it_cur = 0;
   while(it_buf<*len)
   {
       // 处理多行注释
       if(buf[it_buf]=='/' && buf[it_buf+1]=='*')
       {
           it_buf++;
           while(1)
           {
               it_buf++;
               if(buf[it_buf]=='*' && buf[it_buf+1]=='/')
               {
                   break;
               }
           }
           it_buf += 2; // buf迭代器向后移动两次
       }
       // 处理单行注释
       if(buf[it_buf]=='/' && buf[it_buf+1]=='/')
       {
           while(1)
           {
               it_buf++;
               if(buf[it_buf]=='\n')
               {
                   break;
               }
           }
           it_buf += 1; // buf迭代器向后移动一次
       }
       cur[it_cur++] = buf[it_buf++];
   }
   cur[it_cur] = '\0';
   return it_cur;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 处理制表符:对源代码中的\r, \n, \t进行简单的处理。要处理的字符串是放在 char *buf, 处理后的字符串放在char *cur,len是buf的长度。
int chooseControl(char *buf, int *len, char *cur)
{
    /** 处理源代码里面的制表符 */
    int it_buf, it_cur; // buf 和 cur 的迭代器
    it_buf =
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/294184
推荐阅读
相关标签
  

闽ICP备14008679号