在这里,介l由英国Bumble-Bee Software公司生?font face="Times New Roman">Windows环境下的YACC?font face="Times New Roman">LEX集成环境Parser Generator?font face="Times New Roman">Parser Generator?font face="Times New Roman">Windows?font face="Times New Roman">YACC?font face="Times New Roman">LEX的实现。它包括一个图形用L(fng)面,同时包括YACC?font face="Times New Roman">Lex两个版本Q分别叫?font face="Times New Roman">AYACC?font face="Times New Roman">Alex?font face="Times New Roman">Parser Generator非常适合于与VC++集成?/font>
?font face="Times New Roman">VC++中执行以下步骤,每个步骤只执行一ơ?/font>
Q?font face="Times New Roman">1Q?font face="Times New Roman"> 选择Tools菜单中的Options命o(h)Q在屏幕上即?x)出?font face="Times New Roman">Options对话框?/font>
Q?font face="Times New Roman">2Q?font face="Times New Roman"> 选择Directories选项卡?/font>
Q?font face="Times New Roman">3Q?font face="Times New Roman"> ?font face="Times New Roman">Show Directories for下拉列表框中选择Include Files?/font>
Q?font face="Times New Roman">4Q?font face="Times New Roman"> ?font face="Times New Roman">Directories框中Q点?yn)L后的I目录,q填?font face="Times New Roman">Parser Generator?font face="Times New Roman">include子目录的路径?/font>
Q?font face="Times New Roman">5Q?font face="Times New Roman"> ?font face="Times New Roman">Show Directories for下拉列表框中选择Library Files?/font>
Q?font face="Times New Roman">6Q?font face="Times New Roman"> ?font face="Times New Roman">Directories框中Q点?yn)L后的I目录,q填?font face="Times New Roman">Parser Generator?font face="Times New Roman">lib\msdev子目录的路径?/font>
Q?font face="Times New Roman">7Q?font face="Times New Roman"> ?font face="Times New Roman">Show Directories for下拉列表框中选择Source Files?/font>
Q?font face="Times New Roman">8Q?font face="Times New Roman"> ?font face="Times New Roman">Directories框中Q点?yn)L后的I目录,q填?font face="Times New Roman">Parser Generator?font face="Times New Roman">Source子目录的路径?/font>
Q?font face="Times New Roman">9Q?font face="Times New Roman"> 点击OK按钮,Options对话框将接受讄q关闭?/font>
VC++在就可以扑ֈ包含文gyacc.h?font face="Times New Roman">lex.h以及(qing)YACC?font face="Times New Roman">Lex的库文g?/font>
2Q项目设|?/font>
对于每个VC++目Q都需?font face="Times New Roman">VC++中执行以下步骤:(x)
Q?font face="Times New Roman">1Q?font face="Times New Roman"> 选择Project菜单中的Settings命o(h)Q在屏幕上即?x)出?font face="Times New Roman">Project Settings对话框?/font>
Q?font face="Times New Roman">2Q?font face="Times New Roman"> ?font face="Times New Roman">Settings for下拉列表框中选择Win32 Debug?/font>
Q?font face="Times New Roman">3Q?font face="Times New Roman"> 选择C/C++标签?/font>
Q?font face="Times New Roman">4Q?font face="Times New Roman"> ?font face="Times New Roman">Category下拉列表框中选择General?/font>
Q?font face="Times New Roman">5Q?font face="Times New Roman"> ?font face="Times New Roman">Preprocessor Definitions框中Q在当前文本的最后,输入YYDEBUG?/font>
Q?font face="Times New Roman">6Q?font face="Times New Roman"> 选择Link标签?/font>
Q?font face="Times New Roman">7Q?font face="Times New Roman"> ?font face="Times New Roman">Category下拉列表框中选择General?/font>
Q?font face="Times New Roman">8Q?font face="Times New Roman"> ?font face="Times New Roman">Object/Library Modules框中Q在当前文本的后面,输入yld.lib ylmtd.lib ylmtdlld.lib?/font>
Q?font face="Times New Roman">9Q?font face="Times New Roman"> ?font face="Times New Roman">Settings for下拉列表框中选择Win32 Release?/font>
Q?font face="Times New Roman">10Q?font face="Times New Roman"> 重复W?font face="Times New Roman">8步的工作?/font>
Q?font face="Times New Roman">11Q?font face="Times New Roman"> 点击OK按钮Q?font face="Times New Roman">Project Settings对话框将接受讄q关闭?/font>
VC++现在可以从特定的库中接受YACC?font face="Times New Roman">Lex所需的函数和变量?/font>
3Q应?/font>
Q?font face="Times New Roman">1Q在Parser Generator下的~辑H口输入YACC源程序(扩展名必Mؓ(f).yQ?/font>
Q?font face="Times New Roman">2Q用Parser Generator下的Project菜单?font face="Times New Roman">Compile file命o(h)~译源程序,生成相应?font face="Times New Roman">C语言源程序(.cppQ?/font>
Q?font face="Times New Roman">3Q用VC++~译Q连?font face="Times New Roman">C语言源程序,生成可执行程序(.exeQ后卛_执行?/font>
用的VC 2005, 和原来VC 6的设|项对应不上, 很多半天都找不到.好不Ҏ(gu)扑օ? 却还是编译出? 最?只好选择再装一个VC6, ? 两个VC, 不错. 先介l一下Parser Generator,主页下蝲:http://www.bumblebeesoftware.com/downloads.htm Parser Generator is a YACC and Lex programming tool for Windows. As well as including a Graphical User Interace, the software also includes two versions of YACC and Lex, called AYACC and ALex. Parser Generator is able to generate C, C++ and Java parsers and lexical analysers. This includes both Unicode and Multibyte Character Set (MBCS) variants. In your applications you can create multiple, thread safe, instances of these parsers and lexical analysers.
下面说一下windows环境下parser generator和vc++的各w|?
Q一Qparser generator的环境设|?
安装好parser generatorQ打开集成开发环境,炚w目Project菜单Q在下拉菜单中选LibBuilderQ弹出LibBuilder对话框选择属性按钮,弹出compiler properties 对话框:(x) Name 选择Visual C++ (32-bit)
Yacc & Lexhttp://www.shnenglu.com/woaidongmao/archive/2008/05/17/50117.html肥仔肥仔Fri, 16 May 2008 16:20:00 GMThttp://www.shnenglu.com/woaidongmao/archive/2008/05/17/50117.htmlhttp://www.shnenglu.com/woaidongmao/comments/50117.htmlhttp://www.shnenglu.com/woaidongmao/archive/2008/05/17/50117.html#Feedback0http://www.shnenglu.com/woaidongmao/comments/commentRss/50117.htmlhttp://www.shnenglu.com/woaidongmao/services/trackbacks/50117.html
yacc(Yet Another Compiler Compiler)Q是Unix/Linux上一个用来生成编译器的编译器Q编译器代码生成器)(j)。yacc生成的编译器主要是用C语言写成的语法解析器QParserQ,需要与词法解析器Lex一起用,再把两部份生出来的CE序一q编译。yacc本来只在Unixpȝ上才有,但现时已普遍UL往Windows?qing)其他^台?br>分析E序生成?parser generator)是一个指定某个格式中的一U语a的语法作为它的输入,qؓ(f)该种语言产生分析q程以作为它的输出的E序。在历史上,分析E序生成器被UC~译-~译E序( compiler- compiler )Q这是由于按照规律可所有的~译步骤作ؓ(f)包含在分析程序中的动作来执行。现在的观点是将分析E序仅考虑为编译处理的一个部分,所以这个术语也有些过时了(jin)。合q?LALR(1) 分析法是一U常用的分析生成器,它被UC Yacc( yet another compiler- compiler )。给?Yacc 的概貌来Q将使用Yacc?TINY 语言开发一个分析程序?br>作ؓ(f) Yacc 对说明文件中?%token NUMBER 声明的对应。Yacc 坚持定义所有的W号记号本nQ而不是从别的地方引入一个定义。但是却有可能通过在记号声明中的记号名之后书写一个值来指定赋l记L(fng)数字倹{?br>yacc的输入是巴科斯范式(BNFQ表辄语法规则以及(qing)语法规约的处理代码,Yacc输出的是Z表驱动的~译器,包含输入的语法规U的处理代码部分?br>yacc是开发编译器的一个有用的工具,采用LALR(1)语法分析Ҏ(gu)?br>Yacc最初由AT&T的Steven C. Johnson为Unix操作pȝ开发,后来一些兼容的E序如Berkeley YaccQGNU bisonQMKS yacc和Abraxas yacc陆箋(hu)出现。它们都在原先基上做?jin)少许改q或者增加,但是基本概念是相同的?br>׃所产生的解析器需要词法分析器配合Q因此Yaccl常和词法分析器的生器——一般就是Lex——联合用。IEEE POSIX P1003.2 标准定义?jin)Lex和Yacc的功能和需求?br>http://dickey.his.com/byacc/byacc.html Berkeley Yacc 一般认为是目前最好的yacc变种。与bison相比Q避免了(jin)对特定编译器的依赖?br>http://www.informatik.uni-freiburg.de/proglang/software/essence/ EssenceQScheme的LR(1)语法解析器的生成?br>http://download.plt-scheme.org/scheme/plt/collects/parser-tools/ 用于DrScheme的语法解析工?br>http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/ Coco/R Java和C#的扫描和解析?br>http://mhss.nease.net/unix/yacc.html Yacc: 另一个编译器的编译器,Stephen C. Johnson