是否可以在同一个C/ c++程序中使用两个或多个不同的yylex()函数?
Is it possible to use two or more different yylex() functions in same C/C++ program?
我正在为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没有这样的参数。
相关文章:
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 两个函数模板候选项.将一个参数作为引用后,选择不太专业的模板
- 如何比较两个函数的速度和性能
- 如何在构造器的成员初始值设定项列表中调用两个函数?
- 如何将这两个函数组合成一个实现?
- 将具有相反操作数的两个函数重构为一个
- 创建整数的 2D 数组,该数组将使用两个函数用随机数填充矩阵.我做错了什么?
- 具有相同主体的两个函数具有不同的名称
- 通过作为类的公共成员的两个函数将函数作为参数传递
- 如何使用排序和比较这两个函数在 c++ 中对字符数组进行排序?
- 是否可以在C++中将两个函数一起添加
- C++ 两个函数除了一行之外执行相同的操作
- 如何编写连接两个函数的函数
- 如何执行两个函数参数具有相同的模板类型
- 当两个函数位于一行中时,堆栈框架的样子
- 为什么这两个函数的行为不同
- 为什么当我有两个函数时编译器没有显示错误,一个将采用基类,一个将派生类作为参数
- 系统堆栈中的两个函数的递归调用(将不同数量的数组作为参数传递)有什么区别
- 如何在一个构造函数中使用两个可变参数模板参数来绑定两个函数
- 如何在c++中的两个函数中传递对象的同一实例