📄 subset.cpp
字号:
// subset.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include<fstream>
void parse(FILE* fpin,FILE* fpout);
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
}
void parse(FILE* fpin,FILE* fpout)
{
const int MAXBUF=255;
char arr[MAXBUF];
int i=0;//分析含字母的字符串用
int j=0;//分析纯数字的字符串用
int lineno;
char ch;
while(1)
{
fscanf(fpin,"%c",&ch);//从输入文件中读入一个字符
if( ch==' ' || ch =='\t')//过滤掉空格和tab
;
else if( ch=='\n')//回车换行符,为下面进行错误判断
lineno++;
else if( IsDigit(ch))//读入的是数字
{
while(IsDigit(ch))
{
arr[j] = ch;
j++;
fscanf(fpin,"%c",&ch);
}
fseek(fpin,-1L,SEEK_CUR);//文件指针后退一个字节
char* temp1 =(char*)malloc(j+1);
memcpy(temp1,arr,j);
temp1[j] ='\0';
//把数组里面的内容拷贝到另外一个数组里面,实际上写不到那么多,所以只拷贝实际上有数据的
j=0;//恢复初始状态,以备下次使用
fprintf(fpout,"%s\t\t%d\n",temp1,2);//常数
free(temp1);//释放内存
}
else if(IsAlpha(ch))//是字母开头的
{
while(IsAlpha(ch) || IsDigit(ch))
{
arr[i] =ch;
i++;
fscanf(fpin,"%c",&ch);
}
fseek(fpin,-1L,SEEK_CUR);
char* temp = (char*)malloc(i+1) ;
memcpy(temp,arr,i);
temp[i] ='\0';
i=0;
/*基本思想同处理数字的*/
if(FindOK(temp))//FindOK函数在关键字表中查找和temp字符串相同的,找到就返回类别编号
{
fprintf(fpout,"%s\t\t%d \n",temp,FindOK(temp));
}
else
{
fprintf(fpout,"%s\t\t%d\n",temp,1);//标示符号
}
free(temp);
}
//以下为2字节的运算符号
else if(ch==':')//符号":="
{
fscanf(fpin,"%c",&ch);
if(ch=='=')
fprintf(fpout,"%s\t\t%d\n",":=",20);
else
fprintf(fpout,"error in compileing %d lines unknown character %c \n",lineno,ch);//出错了
}
else if(ch=='>')//符号 "> " 和">="
{
fscanf(fpin,"%c",&ch);
if(ch=='=')
fprintf(fpout,"%s\t\t%d\n",">=",16);
else
fprintf(fpout,">\t\t15\n");
}
else if( ch=='<') //符号 "< " 和"<="
{
fscanf(fpin,"%c",&ch);
if(ch=='=')
{fprintf(fpout,"<=\t\t18\n");}
else if( ch=='>')
{fprintf(fpout,"<>\t\t19");}
else
{fprintf(fpout,"<\t\t19\n");}
}
else {
//以下为一个字节的运算符号
if(ch=='-') {fprintf(fpout,"%s\t\t%d\n",'-',10);continue;}//在文件中输出为"- 10"
if(ch==';') {fprintf(fpout,";\t\t21\n");continue;}
if(ch=='+') {fprintf(fpout,"+\t\t9\n");continue;}
if(ch=='*') {fprintf(fpout,"*\t\t11\n");continue;}
if(ch=='/') {fprintf(fpout,"/ \t\t12\n");continue;}
if(ch=='(') {fprintf(fpout,"(\t\t13\n");continue;}
if(ch==')') {fprintf(fpout,")\t\t14\n");continue;}
if(ch=='.') {fprintf(fpout,".\t\t22\n");continue;}
if(ch==',') {fprintf(fpout,",\t\t23\n");continue;}
if(ch=='#') break;//分析结束
else fprintf(fpout,"error in compileing %d lines unknown character %c \n",lineno,ch);//出错了,输出出错信息
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -