C++ 是否可以在同一C/C+;中使用两个或多个不同的yylex()函数+;节目?
我正在为C语言做一个词法分析器,这是一个功能较弱的版本 我想在不同的时间处理不同种类的正则表达式,例如,第一次是源程序的输入字符流,第二次是第一次处理后生成的程序的中间表示形式 因此,是否可以使用FLEX创建2个或更多的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
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。是的,学术惯性有时无法帮助。;-)