yacc/lex windows 下 Parser Generator 使用指南

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

clip_image001[7]


关于yacc 和 lex 和在下面链接的文章里已经有所介绍了
/html/linuxshijie/20070909/80.html
链接中的文章还介绍了在linux下如何使用yacc和lex工具,下面主要是介绍yacc和lex在windows下的用法。


       yacc和lex在windows已经移植成功,其中常用的一个工具就是Parser Generator。这个工具使用yacc和lex能够生成Visual C++,Borland C++,Other C/C++以及相关Java代码。下面介绍一下这个工具是如何生成代码并使用Visual C++编译的。
注:关于Parser Generator的使用和配置,其实在Parser Generator Help中已经有很详细的介绍,感兴趣的朋友可以去那里查到更多有用的信息。
首先要去http://www.bumblebeesoftware.com/downloads.htm下载Parser Generator。
安装完毕后,我们可以在它的安装目录下找到一些例子以及编译程序所需的库文件和源文件,这些文件在编译是很重要。
单独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 error            { $$ = $2; yyerror("missing ')'"); yyerrok(); }
        | '-' factor                { $$ = -$2; }
        | NUMBER
        ;
%%
int main(void)
{
    return yyparse();
}
int yylex(void)
{
    int c;
    while ((c = getchar()) == ' ');
    if (c == '.' || isdigit(c)) {
        ungetc(c, stdin);
        scanf("%lf", &yylval);
        return NUMBER;
    }
    return c;
}


我们用Parser Generator的Project --> Parser Wizard创建一个工程,如下图所示,注意红圈部分的设置:
clip_image002[7]


然后设置文件,模板:
clip_image003[7]


其余按默认完成即可:
clip_image004[7]


这时,我们可以看到Parser Generator帮我们自动生成了一个myparser.y文件,语法规则就可以在这里加了。
clip_image005[7]


现在我们把开头展示的yacc源码完全覆盖myparser.y文件,然后编译,成功后会生成三个文件:myparser.c,myparser.h,myparser.v
好,现在我们要做的就是用vc来编译myparser.c,myparser.h这两个文件了。


打开Microsoft Visual C++ 6.0,新建一个工程。
clip_image006[7]


然后将Parser Generator生成的两个文件myparser.c,myparser.h导入工程。(这里就不多说了^-^)
现在要设置环境变量了,首先要导入Parser Generator的库文件和源文件。在工具->选项里要设置这些环境变量。
clip_image007[7]


clip_image008[7]


clip_image009[7]


设置完这些文件后,还要在工程->设置里添加yl.lib库:
clip_image010[7]


好,一切设置完毕,开始编译,编译通过后,就会生成yacc_vc.exe文件。
假设有文件demo.txt,此文件和yacc_vc.exe在同一个目录,其内容如下:
1+3*5
3*4-23
7- 9 *30 - 999


在此目录的命令行下运行如下命令:yacc_vc.exe <demo.txt,即可得到计算结果:
clip_image011[7]




单独lex文件的编译。
以下是一个单独的lex文件,实现一个简单的计算单词个数功能。
%{
/************************************************************
www.linmu100.com
************************************************************/
int wc = 0;        /* word count */
%}
%%
[a-zA-Z]+    { wc++; }
/n|.        { /* gobble up */ }
%%
int main(void)
{
    int n = yylex();
    return n;
}
int yywrap(void)
{
    printf("word count: %d/n", wc);
    return 1;
}


我们用Parser Generator新建一个工程:
clip_image012[7]


clip_image013[7]


下一步默认完成即可。这时,Parser Generator帮我们自动生成了一个mylexer.l文件,词法规则可以在这里加。
同样的,我们用上面展示的lex文件内容完全覆盖mylexer.l文件,编译后同样生成三个文件,然后用VC编译其中的myparser.c,myparser.h这两个文件。
VC的设置方法和上面编译单独yacc文件时的步骤完全一样,最终会生成一个可以计算文件单词数目的.exe文件。



yacc 和 lex整合文件的编译。
以下分别是yacc文件和lex文件的内容,这两个文件共同实现了自定义的一个简单语法规则。
yacc文件内容:
%{
/*
www.linmu100.com
*/
#include <stdio.h>
#include <string.h>
void yyerror(const char *str)
{
    fprintf(stderr,"error: %s/n",str);
}
int yywrap()
{
    return 1;
}
main()
{
    yyparse();
}
char *heater="xl's test";
%}
%token TOKHEATER TOKHEAT TOKTARGET TOKTEMPERATURE
%union
{
    int number;
    char *string;
}
%token <number> STATE
%token <number> NUMBER
%token <string> WORD
%%
commands:
    | commands command
    ;
command:
    heat_switch | target_set | heater_select
    ;
heat_switch:
    TOKHEAT STATE
    {
        if($2)
            printf("/tHeater '%s' turned on/n", heater);
        else
            printf("/tHeat '%s' turned off/n", heater);
    }
    ;
target_set:
    TOKTARGET TOKTEMPERATURE NUMBER
    {
        printf("/tHeater '%s' temperature set to %d/n",heater, $3);
    }
    ;
heater_select:
    TOKHEATER WORD
    {
        printf("/tSelected heater '%s'/n",$2);
        heater=$2;
    }
    ;
lex文件内容:
%{
/*
www.linmu100.com
*/
#include <stdio.h>
#include <string.h>
#include "myparser.h"                  //注意,这里的头文件要和Parser Generator生成的头文件名一样。
extern char *yytext;
%}
%%
[0-9]+                  {yylval.number=atoi(yytext); return NUMBER;}
heater            return TOKHEATER;
heat                    return TOKHEAT;
on|off                  {yylval.number=!strcmp(yytext,"on"); return STATE;}
target                  return TOKTARGET;
temperature             return TOKTEMPERATURE;
[a-z0-9]+        {yylval.string=strdup(yytext);return WORD;}
/n                      /* ignore end of line */;
[ /t]+                  /* ignore whitespace */;
%%
现在用Parser Generator创建新的工程:
clip_image014[7]


clip_image015[7]


clip_image016[7]


其余的步骤和上面编译yacc时的步骤相同,最终可以生成both_y_l.exe文件,放一个demo.txt和both_y_l.exe在同一个目录下,demo.txt内容如下:
heat on
target temperature 99
heater asdfsieiwef99adsf


然后在此目录的命令行下执行both_y_l.exe <demo.txt得到:
clip_image017[7]


以上即为Parser Generator的使用以及如何用VC编译。
/
/*-----Lex & Yacc ----www.linmu100.com ----*/
/
/*-----linux工具,Lex & Yacc,windows下操作----*/
/
/*-----linux配置,UNIX,开源软件,linux技术,makefile----*/
/
/*----------------------@xiaolin--------------------*/

VC6.0 + Parser Generator 2 详细设置 Parser Generator 2 下载地址:http://www.bumblebeesoftware.com/downloads.htm 一、parser generator 2的环境设置    安装好parser generator 2,打开集成开发环境,点项目Project菜单,在下拉菜单中选LibBuilder,弹出ibBuilder对话框选择属性按钮,弹出compiler 阅读详情

相关推荐

LexYacc使用教程(九).Windows下使用LexYacc

LexYacc应用方法(九).Windows下使用LexYacc草木瓜  20070904一、序    不想LexYacc系列的最后一篇文章竟如此“难产”,已时隔三个月之久。不由慨叹自由可支配时间是如此之少,如此岂不谓新时代的“奴隶”~    罢罢罢,闲话少叙,回归正题,本文主要介绍在Windows下如何去使用LexYacc,以作为本系列文章的终结。    二、方法介绍  

草木瓜 2万+

Parser Generator 2 编译C/C++库

本文总结了不使用LibBuilder的方法来构建Parser Generator 2的类库。

schoene的博客 1101

Parser Generator 使用指南

arser Generator 使用指南

Parser Generator使用说明

Parser Generator的使用说明最近1个星期,大致学习了一下lex,虽然在windows系统上它并没有我所期望的强大,在调试和编写代码都遇到了不少困难,但是总体来说Parser Generator还是让我体会到了lex编程的快捷, 为了自己加深印象把一些参考资料和认识总结了一下.1.     parser generator是什么?它是一款在windows编写l

xujianlane的专栏 2万+

yacc/lex windowsParser Generator 使用指南 - linux技术 动漫资源--林木100

导读: 关于yacclex 和在下面链接的文章里已经有所介绍了/html/linuxshijie/20070909/80.html链接中的文章还介绍了在linux下如何使用yacclex工具,下面主要是介绍yacclexwindows下的用法。以下内容属作者为xiaolin,请尊重作者的辛勤劳动,请勿转载。yacclexwindows已经移植成功,其中常用的一

xu的blog 3631

mysql lex yacc脚本_终于成功配置lexyacc工具Parser Generator

用的VC 2005, 和原来VC 6的设置项对应不上, 很多半天都找不到.好不容易找全了, 却还是编译出错.最后,只好选择再装一个VC6, 嗯, 两个VC, 不错.先介绍一下Parser Generator,主页下载:http://www.bumblebeesoftware.com/downloads.htmParser Generator isa YACC and Lex programming...

weixin_42349469的博客 403

yacc 简易计算机规则,YACC 使用说明——计算器实例.pdf

Yacc 实现计算器功能 说明文件目录1. parser generator2 的环境设置 12. vc++环境的设置(目录设置) 23. 建立YACC文件,实现计算器功能 44. VC++ 的项目设置 75. 用vc++编译Parser Generator 生成的c文件 10首先说一下windows 环境下parser generator 和vc++ 的各项配置。首先需要...

weixin_29357339的博客 837

windowsyacclex开发环境配置(Parser Generator篇)

1.下载安装 Parser GeneratorWindowsYACCLEX的实现,是由英国Bumble-Bee Software公司开发. 下载地址http://www.bumblebeesoftware.com/downloads.htm. 安装软件之后,设置系统环境变量path,在path属性中添加安装bin目录;以我的安装为例,在以前的path属性后添加;D:/Program File...

p312011150的博客 4847

VC与YACCLEX集成

在这里,将介绍由英国Bumble-Bee Software公司生产的Windows环境下的YACCLEX集成环境Parser GeneratorParser GeneratorWindowsYACCLEX的实现。它包括一个图形用户界面,同时包括YACCLex两个版本,分别叫做AYACC和AlexParser Generator非常适合于与VC++集成。    在安装了Par

余璜的技术博客 4256

Parser Generator的使用说明

Parser Generator的使用说明                                转自:http://blog.csdn.net/xujianlane/archive/2008/08/20/2801204.aspx最近1个星期,大致学习了一下lex,虽然在windows系统上它并没有我所期望的强大,在调试和编写代码都遇到了不少困难,但是总体来说Parser Gene

lbc611的专栏 1114

Parser Generator 和vc++6.0的配置

Windows环境下的YACCLEX集成环境Parser GeneratorParser GeneratorWindowsYACCLEX的实现。它包括一个图形用户界面,同时包括YACCLex两个版本,分别叫做AYACC和AlexParser Generator非常适合于与VC++集成。   在安装了Parser Generator后,执行以下步骤,即可使VC++编译和连接由Parse

bozhi521的专栏 1560

小结了一下Parser Generator 2使用中的几个问题

1、Whats Parser Generator 2?Parser Generator 2(以下简称PG2)是一个Windows下的lex(词法分析)与yacc(语法分析)工具,可以生成C和C++代码,并将其用于VC的工程中。2、简单的操作过程。在pg2中输入lexyacc源代码,选择Compile File后生成.c(.cpp)和.h文件,在VC工程中将其编译为xxx.lib。在自已的工程属

coding 4 FUN (tankaiha的布洛格) 4658

Windows下的yacc lex工具(Z+源码)

本测试的源码顺利编译通过,有需要的同仁可以从这里下载:http://download.csdn.net/source/1151308或者在csdn资源里搜widnows yacc lex  from: http://blog.csdn.net/JsuFcz/archive/2008/11/18/3331107.aspx   2009-03-28 12:47:22 只

flyic_ustc的专栏 1万+

windows环境下parser generator和vc++的各项配置 c语言的词法分析Lex

 一.parser generator的环境设置( 本人强烈建议尽量保留默认值,不要求改的就别改了,容易乱。呵呵VC++ 与 parser generator 安装目录都是默认的,即C:/Program Files/Microsoft Visual StudioC:/Program Files/Parser Generator 2还有图片如果看不清,右键打开单独

yaya's blog 1438

windows环境下parser generator和vc++的各项配置 (lex配置)

下面说一下windows环境下parser generator和vc++的各项配置 (一)parser generator的环境设置          安装好parser generator,打开集成开发环境,点项目Project菜单,在下拉菜单中选LibBuilder,弹出LibBuilder对话框选择属性按钮,弹出compiler properties 对话框:     Name 选择V

忆、瞻的专栏 4209
下一篇: Parser Generator的使用说明
answermj
博客等级 码龄21年 3粉丝 6原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值