赞
踩
简单的词法分析器,可以对标识符,关键字,数字,运算符等进行分析。源代码从文件读取,文件名在词法分析器运行的时候输入,预处理的结果和分析的结果都会写入文件,处理结果我放到最后。
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; }
//
,多行注释一般是/* */
,应该对他们都能处理。要处理的字符串是放在 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; }
int chooseControl(char *buf, int *len, char *cur)
{
/** 处理源代码里面的制表符 */
int it_buf, it_cur; // buf 和 cur 的迭代器
it_buf =
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。