xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

  • 大小: 23KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發(fā)布日期: 2023-07-19
  • 語言: 其他
  • 標(biāo)簽: Lex,編譯??

資源簡(jiǎn)介

seuLex Lex輸入文件的解析 正規(guī)表達(dá)式的解析 一個(gè)正規(guī)表達(dá)式到NFA的轉(zhuǎn)換算法實(shí)現(xiàn) 多個(gè)NFA的合并 NFA的確定化和最小化算法實(shí)現(xiàn) 返回狀態(tài)與返回內(nèi)容的對(duì)應(yīng) SeuLex應(yīng)用

資源截圖

代碼片段和文件信息

#include
#include?
#include//文件流
#include
#include//棧
#include//容器
#include//鏈表
#include
#include
#include
using?namespace?std;

#define?DEFINE_HEAD?41//定義段開始標(biāo)識(shí)“%{”
#define?DEFINE_END?42//定義段結(jié)束標(biāo)識(shí)“%}”
#define?RULE_ID?43//規(guī)則段標(biāo)識(shí)“%%”

#define?ERROR?-11//錯(cuò)誤
#define?EPSLONG?-1//????????????????


ifstream?readfile;

ofstream?writefile;
ofstream?writeReActNFA;
ofstream?writeNFA;
ofstream?writeDFA;


int?lineno=0;//lex文件當(dāng)前行數(shù)信息
static?int?nfaindex=1;


struct??node
{
int?label;
int?acceptstatetag;
multimap?next;
};


map?id2reTable;?//存儲(chǔ)定義段中標(biāo)識(shí)名到正則式的映射
map?precedence;//存儲(chǔ)操作符的優(yōu)先級(jí)

vector?actionTable;//存儲(chǔ)action內(nèi)對(duì)應(yīng)內(nèi)容

list??nfas;//存儲(chǔ)每個(gè)正則式的NFA;
list?finalNFA;//最終的nfa
list?DFA;

vector?nfa;
vector?dfa;
mapint?>?dfanodetable;
map?nfaTer2Action;
map?dfaTer2Action;

int?checkType(char?c);//lex文件結(jié)構(gòu)的解析
pairtakeApart(string?&str);//規(guī)則段re和action
void?replaceID(string?&re);//lex文件中正規(guī)表達(dá)式標(biāo)志id替換成正規(guī)表達(dá)式re
void?Change(char?*char?*);//將中綴表達(dá)式變成后綴表達(dá)式
void?Initprecedence();//初始化中綴表達(dá)式中操作符的優(yōu)先級(jí)
void?generateNFA(char?*relist??nodes);?//由re產(chǎn)生NFA
void?joinNFA(list??onenfalist?finalnfa);
bool?isLetter?(char);//判斷是否是字母
void?NFA2DFA(list?bignfa);
void?Eclosure(set?&t);//求E閉包
set?move(const?set?&Ichar?onesymbol);
void?genAnalysisCode();//生成條件控制表示的DFA的代碼


void?main(){
Initprecedence();//給操作符初始化優(yōu)先級(jí)
cout<<“SeuLex?project:“< cout<<“Open?the?source?lex?file?:?lex.l\n\n“;
readfile.open(“l(fā)ex.l“ios::in);

cout<<“Open?the?destination?files:\n“;
cout<<“1----------The??lexer??program?.cpp?file?:?yylex.cpp\n“;
writefile.open(“yylex.cpp“ios::out);
cout<<“2--The?relationship?of?RE-Action-NFA?:Re_Act_NFA.txt\n“;
writeReActNFA.open(“Re_Act_NFA.txt“ios::out);
cout<<“3--------------------The?join?together?NFA?:?NFA.txt\n“;
writeNFA.open(“NFA.txt“ios::out);
cout<<“4--------------Mini?the?NFA?we?can?get?DFA?:?DFA.txt\n“;
writeDFA.open(“DFA.txt“ios::out);

cout<
//*********************************
//掃描定義段:“%{?”和?“%}”?之間
char?c=readfile.get();
int??type=checkType(c);//定義段?規(guī)則段?
if(type!=DEFINE_HEAD)
{
cout<<“Error!The?lex.l?file?dismatch?the?lex?grammar?!\n“;//不符合lex文件語法
return;
}

????writefile<<“//lex文件定義段直接拷貝開始:“;
while(!readfile.eof()&&type!=DEFINE_END)//掃描過程
{
c=readfile.get();
if(c==‘\t‘)?continue;
if(c==‘\n‘)?lineno++;//lineno:lex文件當(dāng)前行數(shù)
if(c==‘%‘)?{type=checkType(c);continue;}//結(jié)尾DEFINE_END?%}嗎

writefile.put(c);//逐個(gè)字符的寫入目標(biāo)文件
}
writefile<<“//lex文件定義段拷貝結(jié)束:“<


//*********************************************************
//掃描正規(guī)表達(dá)式:該部分由用戶自定義標(biāo)示id和正規(guī)表達(dá)式re組成


pair?userDefineID;//〈idre〉
type=0;

//開始識(shí)別正規(guī)表達(dá)式對(duì)〈idre〉
c=readfile.get();

while(!readfile.eof()&&type!=R

?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----

?????文件??????39424??2010-05-18?22:24??09007412LEX.doc

?????文件??????16343??2010-05-06?22:53??DFA.txt

?????文件???????1422??2010-05-06?23:08??lex.l

?????文件??????13511??2010-05-06?22:53??NFA.txt

?????文件??????11992??2010-05-06?22:53??Re_Act_NFA.txt

?????文件??????23344??2010-05-06?23:04??SeuLex.cpp

?????文件??????48576??2010-05-06?22:53??yylex.cpp

?????文件????????702??2003-01-01?13:25??yytab.h

-----------?---------??----------?-----??----

???????????????155314????????????????????8


評(píng)論

共有 條評(píng)論

相關(guān)資源