是否可以在同一个C/ c++程序中使用两个或多个不同的yylex()函数?

Is it possible to use two or more different yylex() functions in same C/C++ program?

本文关键字:两个 函数 yylex c++ 同一个 程序 是否      更新时间:2023-10-16

我正在为C语言制作一个词法分析器,一个功能较弱的版本。

我想在不同的时间处理不同类型的正则表达式,例如,第一次处理源程序的输入字符流,第二次处理第一次处理后生成的程序的中间表示形式。

那么有可能使用FLEX创建2个或更多的yylex()函数,并在同一个C/c++程序(词法分析器)中使用它吗?

您可以使用%前缀声明将yylex(以及各种其他全局名称)中的yy更改为不同的内容,这允许您在同一个项目中拥有多个扫描仪。您可能还需要使用-o选项来设置生成文件的名称;否则,构建过程会变得很难看。

但是它们将是完全独立的扫描器,每个扫描器都有自己的输入流。这可能不是你想要的。

如果您想要一个可以将其词法定义更改为另一组的扫描器,则需要使用start条件。这将允许您在不同的上下文中更改扫描器的行为,并且具有共享公共词法特性的优点。

flex有一个类似的参数:

' -PPREFIX,——prefix= prefix, %option prefix=" prefix " '改变flex为所有全局可见的变量和使用默认的' yy '前缀函数名改为' PREFIX '。例如,'——prefix=foo '将yytext的名称更改为footext。的名称也会改变从lex.yy.c到lex.foo.c的默认输出文件

因此您可以重命名第二个函数及其变量。遗憾的是,POSIX lex没有这样的参数。