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

📄 lexical.h

📁 一个进行整数计算的C语言词法分析器
💻 H
字号:
//这是词法分析程序lexical.h
#include "stdlib.h"
#include "stdio.h"
#include "iomanip.h"
#include "getchar.h"
#include "check.h"
#include "LinkedList.h"
#include "filelist.h"
#include "Error.h"

const MAXPATHLEN=30;                         //规定源文件路径的最大长度
//定义三个全局链表类,类定义包含在LinkedList.h文件中
LinkedList<word> varlist;                   //全局链表用来存放变量
LinkedList<word> symbolist;                 //存放符号
LinkedList<word> wordlist;                  //存放整个程序的单词
//定义一个二维数组存放各单词名
//char name[5][10]={"KEYWORD","VARIABLE","CONST","SYMBOL","ERRORSYM"}
void lexical()
{	
	//找到源文件所在的位置
	ifstream sourfile[MAXPATHLEN];
	cout<<"please input the path of the source file:";
	//将文件路径保存在filename中
	char filename[MAXPATHLEN];
	cin.getline(filename,MAXPATHLEN);
	cout<<endl;
	
	int i=0;
	sourfile[0].open(filename,ios::in|ios::nocreate);
	//如果第一次打开文件不成功,提供重新输入机会和退出选择
	while(!sourfile[i])
	{
		i++;
		cout<<"file can't be open,input once more,input exit to exit:";
		char* fp=filename;
		cin.getline(fp,MAXPATHLEN);
		cout<<endl;
		if(!strcmp(filename,"exit")) exit(0);
		sourfile[i].open(filename,ios::in|ios::nocreate);
	}
	//为了确定文件取单词时的循环次数,读一遍文件确定行数
	char s;
	int countline=1;           //放置源文件行数
	while(!sourfile[i].eof())
	{	
		sourfile[i].get(s);
		if(s==0xA)   countline++;
		if(!s) break;	
	}
	sourfile[i].close();
	//重新打开文件进行取单词,并对单词进行相应判断操作
	ifstream newsour;
	newsour.open(filename,ios::in|ios::nocreate);
	int err=0;        //记录错误单词数

	while(w.line!=countline&&!newsour.eof())
	{
		//将文件中字符流分成一个个单词流,包含在getchar.h头文件中
		getword(w,newsour);                 
		//如果是注释信息,则跳过注释
		if(!strcmp(w.ch,"/*"))	             
		{
			getword(w,newsour);
			while(strcmp(w.ch,"*/")&&w.line!=countline)
			{getword(w,newsour);}
			getword(w,newsour);
		}
		if(!strcmp(w.ch,"//"))
		{
			int l=w.line;
			getword(w,newsour);
			while(w.line==l)
			{getword(w,newsour);}
		}
		if(!strcmp(w.ch,"

⌨️ 快捷键说明

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