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

📄 fileop.h

📁 一个简单的词法分析程序。是编译原理的部分课程设计。因为时间有限。未能完成全部。如果有朋友改了代码或添加了功能使代码更加完善。请与我联系:ningmeng_studio@163.com谢谢. 做的不是
💻 H
字号:
/*=============================================
**             2005-8-22					**
**			  定义文件操作函数 				**
**			 lizhu zhang					**
=============================================*/
#define MAXLEN 2048
#pragma once
#include "stdafx.h"
#include "MainDataStruct.h"
/*============================================
**参数说明:
**			[in] fileName  :文件名称
**			[out]pString   : 返回字符串
**			[in] row	   :要读取的行数
**			[out]flag	   :文件结束标志
**操作成功,返回值为1,失败,返回值为-1
===============================================*/
int FFileRead(const char *fileName,char *pString,const int row,int &flag)
{
	int rowCount = row;
	fstream file;
	file.open(fileName,ios::in);
	if(!file)
	{
		return -1;
	}
	//操作成功
	while(rowCount!=0&&(!file.eof()))
	{
		file.getline(pString,MAXLEN);
		rowCount -= 1;
	}
	if(file.eof()&&rowCount!=0)
	{
		flag = 0;
	}
	file.close();
	return 1;		
}
/*============================================
**参数说明:
**			[in] type    :可变参数的类型选择,0:tokenString,1:symbleList,2:PErrMsg,3:RMSG *
**			[in]           可变参数
**			[in] fileName:要写入的文件的名称
**操作成功,返回值为1,失败,返回值为-1
===============================================*/
int FFileWrite(char *fileName,int type,...)
{
	fstream file;
	file.open(fileName,ios::out|ios::app);
	if(!file)
		return -1;
	//文件操作成功
	Token *tokenString;
	Sl	  *symbleList; 
	va_list arg_ptr;
	va_start(arg_ptr,type); 
	switch(type)
	{	
	case 0://写入Token文件
		tokenString = (struct TOKEN*)malloc(sizeof(TOKEN));
		tokenString = va_arg(arg_ptr,TOKEN *); 
		va_end(arg_ptr);
		file<<tokenString->code<<"   "<<tokenString->addr<<"   "<<endl;
		file.close();
		break;
	case 1://写入符号表文件
		symbleList = (struct SYMBELLIST*)malloc(sizeof(SYMBELLIST));
		symbleList = va_arg(arg_ptr, SYMBELLIST *); 
		va_end(arg_ptr); 
		
		file<<symbleList->name.addr<<"     "<<symbleList->name.len<<"      "
			<<symbleList->type<<"      "<<symbleList->kind<<"      "<<symbleList->layer<<"      "
			<<symbleList->addr<<endl;
		break;
	case 2://写入错误信息文件
		PErrMsg pErrMsg;
	    pErrMsg = (struct ERRMSG*)malloc(sizeof(ERRMSG));
		pErrMsg = va_arg(arg_ptr,ERRMSG*);
		file<<"错误信息("<<pErrMsg->row<<","
			<<pErrMsg->col<<"):"<<pErrMsg->pErrMsg<<endl;
		break;
	case 3://记录源文件中的值
		pRMsg pMessage;
		pMessage = (pRMsg)malloc(sizeof(RMSG));
		pMessage = va_arg(arg_ptr,pRMsg);
		va_end(arg_ptr);
		file<<pMessage->pMsg<<"   "<<pMessage->num<<endl;
		break;
	default:
		file.close();
		return -1;
	}
	return 1;
	file.close();
}

⌨️ 快捷键说明

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