根據設計的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 詞法分析器一般以函式的形式存在,供語法分析器呼叫。完成詞法分析任務的程式稱為...