" />
這是lex yacc for windows下載, yacc和lex在windows已經(jīng)移植成功,其中常用的一個(gè)工具就是Parser Generator。這個(gè)工具使用yacc和lex能夠生成Visual C++,Borland C++,Other C/C++以及相關(guān)Java代碼。下面介紹一下這個(gè)工具是如何生成代碼并使用Visual C++編譯的。
Cygwin是Windows平臺(tái)上運(yùn)行的unix/linux模擬環(huán)境,由Cygnus Solutions開發(fā)。
Cygnus起初把gcc,gdb,gas等開發(fā)工具進(jìn)行了改進(jìn),使他們能夠生成并解釋win32的目標(biāo)
文件。然后再把這些工具移植到windows平臺(tái)上去。
移值方案有多種,一是基于win32 api對(duì)這些工具的源代碼進(jìn)行大幅修改。但工作量太大,他
們采取了另一種方法,即開發(fā)一個(gè)共享庫(cygwin.dll),把win32 api中沒有的unix風(fēng)格的調(diào)用(如
fork,spawn,signals,select,sockets等)封裝在里面,也就是說,他們基于win32 api寫了一個(gè)unix
系統(tǒng)庫的模擬層。這樣,只要把這些工具的源代碼和這個(gè)共享庫連接到一起,就可以使用unix主
機(jī)上的交叉編譯器來生成可以在windows平臺(tái)上運(yùn)行的工具集。
windows下的yacc 和 flex工具,安裝時(shí)注意不要有空格,然后命令行進(jìn)入bin目錄,就可以用命令行調(diào)用這兩個(gè)工具了,命令行如下:
flex xx.l
bison -d xx.y
建立數(shù)組,將單詞讀入,對(duì)單詞的ASCII碼進(jìn)行判斷,將在ASCII碼值在一定區(qū)間進(jìn)行區(qū)分(使用if語句來判斷),分開來后,對(duì)其所在ASCII值區(qū)間的不同,給予以不同的屬性(比如:系統(tǒng)保留字…),詞法分析器完成后要能識(shí)別+,-,=等字符。
對(duì)輸入的程序語句進(jìn)行分析。對(duì)每個(gè)非終結(jié)點(diǎn)定義單個(gè)函數(shù),定義了它的后繼節(jié)點(diǎn)。然后用一個(gè)構(gòu)造來的函數(shù),使定義的后繼節(jié)點(diǎn)符合語法,否則報(bào)錯(cuò)。