利用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
范例
利用flex & bison (lex & yacc)创建可重入(线程安全)的词法分析和语法解析器
最新推荐文章于 2024-03-22 09:39:40 发布
本文介绍了如何使用flex和bison创建可重入(线程安全)的词法分析器和语法解析器,强调了在多线程环境下线程安全的重要性,并提供了flex的C++实现示例以及bison的可重入配置方法。
摘要由CSDN通过智能技术生成