?? lexical.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 + -