利用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)创建可重入(线程安全)的词法分析和语法解析器
最新推荐文章于 2023-09-13 23:33:32 发布