日期:2014-05-17  浏览次数:20892 次

windows下的lex与yacc工具(转)

Parser Generator作为当前最好用的Windows环境LEX/YACC工具而被广泛应用。

之所以推荐它是因为它生成的c文件可以在vc++下通过编译。
下载地址?http://www.bumblebeesoftware.com/downloads.htm?
下载之后,解压缩,然后安装。

打开集成开发环境,选择项目“Project”菜单,在下拉菜单中选“LibBuilder”,弹出LibBuilder对话框

选择“属性”按钮弹出“compiler properties”对话框:

对于Microsoft Visual Studio6.0即VC6.0的设置

Compiler Bin Directory:?? C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\BIN

Compiler Bin Directory(2):?? C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\COMMON\MSDEV98\BIN

Compiler Include Directory: C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\INCLUDE

Compiler Include Directory(2): C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\MFC\INCLUDE

Compiler Library Directory: C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\LIB

Compiler Library Directory(2): C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\MFC\LIB

点ok。返回LibBuilder。

点Build就可以编译vc++使用的lex与yacc的lib库。生成库文件在软件安装目录下的D:\Parser Generator 2\Cpp\Lib\msvc32目录下。

单独yacc文件的编译。
以下是一个单独的yacc文件,实现一个简单的计算器功能。
%{
/************************************************************
www.linmu100.com
************************************************************/
#include <ctype.h>
#include <stdio.h>
#define YYSTYPE double /* double type for YACC stack */
%}

%token NUMBER

%%
lines??? : lines expr '\n'??? ??? ??? { printf("%g\n", $2); }
??? ??? | lines '\n'
??? ??? | /* e */
??? ??? | error '\n'??? ??? ??? ??? { yyerror("reenter last line:"); yyerrok(); }
??? ??? ;

expr??? : expr '+' term??? ??? ??? ??? { $$ = $1 + $3; }
??? ??? | expr '-' term??? ??? ??? ??? { $$ = $1 - $3; }
??? ??? | term
??? ??? ;

term??? : term '*' factor??? ??? ??? { $$ = $1 * $3; }
??? ??? | term '/' factor??? ??? ??? { $$ = $1 / $3; }
??? ??? | factor
??? ??? ;

factor??? : '(' expr ')'??? ??? ??? ??? { $$ = $2; }
??? ??? | '(' expr