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

时间:2015-09-09 06:41:08

标签: c++ c flex-lexer lex

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

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

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

1 个答案:

答案 0 :(得分:3)

您可以使用%prefix声明将yy(以及各种其他全局名称)中的yylex更改为不同的内容,这样您就可以在同一个中使用多个扫描程序项目。您可能还希望使用-o选项来设置生成的文件的名称;否则,构建过程变得丑陋。

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

如果您想要一个可以将词法定义更改为另一组的扫描程序,则需要使用start conditions。这将允许您在不同的上下文中更改扫描仪行为,并且具有可以共享常见词法功能的优势。