这是lex yacc for windows下载(zǎi), yacc和lex在windows已(yǐ)经(jīng)移(yí)植成功(gōng),其中常(cháng)用的一个工具就(jiù)是Parser Generator。这个工具使用yacc和lex能够生成(chéng)Visual C++,Borland C++,Other C/C++以(yǐ)及相关Java代码(mǎ)。下面(miàn)介绍(shào)一下这个工(gōng)具是如(rú)何生成代(dài)码(mǎ)并使用Visual C++编译的。
Cygwin是Windows平台上运行的unix/linux模(mó)拟环(huán)境,由Cygnus Solutions开发。
Cygnus起初把gcc,gdb,gas等开发工具进行了改进,使他们能够生成(chéng)并解释win32的目标
文件。然后再把这些工具移植到windows平台上去。
移值方案有多(duō)种(zhǒng),一(yī)是基于win32 api对这些工具的(de)源(yuán)代(dài)码进行大幅修改(gǎi)。但工作量太大,他
们采取了另一种方法,即开(kāi)发一(yī)个共享(xiǎng)库(cygwin.dll),把win32 api中没有的unix风格的调用(如(rú)
fork,spawn,signals,select,sockets等(děng))封装在(zài)里面,也(yě)就是说,他们基于win32 api写(xiě)了一个(gè)unix
系统库的模拟层。这(zhè)样,只(zhī)要把这些工具(jù)的源代码和这个共(gòng)享(xiǎng)库连接(jiē)到一起(qǐ),就(jiù)可以使用unix主
机上的交叉编译器来生成可以在windows平台上(shàng)运行的工具集。
windows下(xià)的yacc 和 flex工具,安(ān)装(zhuāng)时注意不要有空格,然后命令行进入bin目录,就可以用命令行调用这两(liǎng)个工具了,命令行如(rú)下:
flex xx.l
bison -d xx.y
建立数组,将单(dān)词(cí)读入,对单(dān)词的ASCII码进行判断,将在ASCII码值在(zài)一定(dìng)区间进行区分(使用if语(yǔ)句来判断),分开来后,对其(qí)所在ASCII值区间(jiān)的不同(tóng),给予以不同的属(shǔ)性(比如:系(xì)统保(bǎo)留字…),词(cí)法分(fèn)析器完成后要能识别+,-,=等字(zì)符。
对输入的程序语句进行分析。对(duì)每个非终结点定义单个函数,定义了它(tā)的后继节点。然后(hòu)用一(yī)个构造来的函数,使定义的后继(jì)节点符(fú)合语法(fǎ),否(fǒu)则报错。
