Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以在同一C/C+;中使用两个或多个不同的yylex()函数+;节目?_C++_C_Flex Lexer_Lex - Fatal编程技术网

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

C++ 是否可以在同一C/C+;中使用两个或多个不同的yylex()函数+;节目?,c++,c,flex-lexer,lex,C++,C,Flex Lexer,Lex,我正在为C语言做一个词法分析器,这是一个功能较弱的版本 我想在不同的时间处理不同种类的正则表达式,例如,第一次是源程序的输入字符流,第二次是第一次处理后生成的程序的中间表示形式 因此,是否可以使用FLEX创建2个或更多的yylex()函数,并在同一个C/C++程序中使用它,词法分析器?FLEX具有: '-PPREFIX,--prefix=prefix,%option prefix=“prefix”更改 flex对所有全局可见变量和 函数名改为“前缀”。例如,“--prefix=foo” 将yyt

我正在为C语言做一个词法分析器,这是一个功能较弱的版本

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

因此,是否可以使用FLEX创建2个或更多的
yylex()
函数,并在同一个C/C++程序中使用它,词法分析器?

FLEX
具有:

'-PPREFIX,--prefix=prefix,%option prefix=“prefix”更改 flex对所有全局可见变量和 函数名改为“前缀”。例如,“--prefix=foo” 将yytext的名称更改为footext。它还将更改文件的名称 从lex.yy.c到lex.foo.c的默认输出文件

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

flex
有一个:

'-PPREFIX,--prefix=prefix,%option prefix=“prefix”更改 flex对所有全局可见变量和 函数名改为“前缀”。例如,“--prefix=foo” 将yytext的名称更改为footext。它还将更改文件的名称 从lex.yy.c到lex.foo.c的默认输出文件

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

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

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

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

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

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


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

您确定要使用flex/bison而不是?@DevSolar是的。这是一个学术课程项目,必须使用flex/bison。是的,学术惯性有时无法帮助。;-)你确定要用flex/bison来做这件事,而不是吗?@DevSolar是的。这是一个学术课程项目,必须使用flex/bison。是的,学术惯性有时无法帮助。;-)