編譯原理c 實現詞法分析器

2021-10-01 10:28:44 字數 2666 閱讀 4595

根據設計的dfa完成手工詞法分析器的c++實現

共有四組測試樣例,要求格式完全一致。

int main())

int main()

float i_1 = 1.005e-3;

/* this is remark*/

line1:(type, int)

line1:(keyword, main)

line1:(bracket, ()

line1:(bracket, ))

line2:(bracket, )

int main()

float i = 1.05e;

error at line 3: illegal floating point number "1.05e".

void main()

else printf("%c",d);

e = sqrt(abs(b));

return e;

line1:(type, void)

line1:(keyword, main)

line1:(bracket, ()

line1:(bracket, ))

line1:(bracket, )

line9:(keyword, else)

line9:(keyword, printf)

line9:(bracket, ()

line9:(bracket, ")

line9:(typeidentify, %c)

line9:(bracket, ")

line9:(bracket, ,)

line9:(identify, d)

line9:(bracket, ))

line9:(bracket, ;)

line10:(identify, e)

line10:(opt, =)

line10:(keyword, sqrt)

line10:(bracket, ()

line10:(keyword, abs)

line10:(bracket, ()

line10:(identify, b)

line10:(bracket, ))

line10:(bracket, ))

line10:(bracket, ;)

line11:(keyword, return)

line11:(identify, e)

line11:(bracket, ;)

line12:(bracket, })

#include #include #include #include #include using namespace std;

string keyword[14]=;

string type[4]=;

char bracket[9]=','[',']','(',')','\"',';'};

string opt2[31]=;

char opt[13]=;

char filter[4]=; //過濾符

char p[10000];

int errortype=0;

//關鍵字判定

bool iskeyword(string word)

}return false;

}bool istype(string word)

}return false;

}bool isbracket(char ch)

}return false;

}bool isopt(char ch)

}return false;

}bool isopt2(string word)

}return false;

}bool isfilter(char ch)

}return false;

}//字母判斷

bool isletter(char i)

//數字判定

bool isdigit(char ch)

void analyse()

token="";

if(isfilter(ch))

else if(isletter(ch))

if(iskeyword(token))

else if(istype(token))

else if(ch=='_'||isdigit(ch))

sprintf(p+strlen(p),"line%d:(identify, %s)\n",line,token.c_str());

}else

} else

sprintf(p+strlen(p),"line%d:(identify, %s)\n",line,token.c_str());}}

else if(isdigit(ch))

//小數

if(ch=='.')

if(ch=='e')

else

} while(isopt(ch))

if(isopt2(token))

} else if(isbracket(ch))

else break;

} }int main()

return 0;

}

編譯原理 詞法分析器

1 從源程式檔案中讀入字元。2 統計行數和列數用於錯誤單詞的定位。3 刪除空格類字元,包括回車 製表符空格。4 按拼寫單詞,並用 內碼,屬性 二元式表示。屬性值 token 的機內表示 5 如果發現錯誤則報告出錯 6 根據需要是否填寫識別符號表供以後各階段使用 int tag 0 設立標誌 一開始本...

編譯原理 flex實現詞法分析器

flex介紹 flex是乙個生成詞法分析器的工具,它可以利用正規表示式來生成匹配相應字串的c語言 其語法格式基本同lex相同。單詞的描述稱為模式 lexical pattern 模式一般用正規表示式進行精確描述。flex通過讀取乙個有規定格式的文字檔案,輸出乙個c語言源程式。fex的輸入是檔案或輸入...

編譯原理,例 詞法分析器

編譯原理課作業要求自己寫乙個詞法分析器,我嘗試寫了一下。詞法分析 電腦科學中將字串行轉換為單詞 token 序列的過程。進行詞法分析的程式或者函式叫作詞法分析器 lexical analyzer 也叫掃瞄器 scanner 詞法分析器一般以函式的形式存在,供語法分析器呼叫。完成詞法分析任務的程式稱為...