利用flex & bison (lex & yacc)创建可重入(线程安全)的词法分析和语法解析器

本文介绍了如何使用flex和bison创建可重入(线程安全)的词法分析器和语法解析器,强调了在多线程环境下线程安全的重要性,并提供了flex的C++实现示例以及bison的可重入配置方法。
摘要由CSDN通过智能技术生成

 利用flex & bison (lex & yacc)创建可重入(线程安全)的词法分析和语法解析器
希望读者能有lex yacc基础。
来自:http://www.loveopensource.com/?p=29

    使用flex(lex)和bison(yacc)可以非常方便的创建词法分析和语法分析器,典型的这类程序都是
使用一些全局变量进行信息的传递,这也是程序默认的方式,比如:flex解析到一个string,可以通过
yylval传递给bison;再就是flex和bison默认是通过一些全局变量来保存解析的status信息。简单点说,
flex和bison默认创建的词法分析和语法分析的C代码都不是线程安全的,都是不可重入的。
    随着多线程编码在linux上的广泛使用,我们对线程安全的词法分析和语法分析的需求也越来越强烈。
本节讨论一下实施方法。

(1) flex的可重入实施
    使用flex创建C++的词法解析器时,默认就是可重入的。
    需求加入:
    %option c++
    
    flex test.lex时,会自动生成lex.yy.cc文件。
    root@horde1:~/test/Reentrant Parser#locate FlexLexer.h
    /usr/include/FlexLexer.h
    
    可以查看一下FlexLexer.h
    里面定义了2个类:FlexLexer和yyFlexLexer
    说明见:
    http://dinosaur.compilertools.net/flex/flex_19.html#SEC19
    
    范例

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值