flex - 没有入口点
flex - no entry point
我正在研究编译理论以及如何使用 flex,但我遇到了几个问题。
我创建了一个包含以下数据的 lex 文件:
%%
"hello" printf("GOODBYE");
. ;
%%
这是我能想到的最简单的一种。如果我理解正确,它会在每次遇到 hello 标记时打印 GOODBYE,并忽略其他所有内容。
我在这个 lex 文件上使用 flex 生成了一个 C 文件,我现在应该编译那个 C 代码以获得这个语法的词法分析器。
问题是生成的C代码没有入口点。它不编译。我的 .lex 文件不正确吗?我是不是误会了什么?
您只需要在此文件中声明自己的 main()
,在第二个 %%
或 link 此 .c 与其他 main()
声明的 .c 文件之后。
%%
"hello" printf("GOODBYE");
. ;
%%
int main()
{
yylex();
return 0;
}
The problem is that the generated C code has no entry point. It does not compile.
不,它不会link。
Is my .lex file incorrect?
没有
Am I misunderstanding something?
是的。
"entry point" 是 link 人对函数 main()
的说法。 Flex 只为一个词法分析器函数生成代码,所以如果你想要一个完整的程序那么你需要单独提供 main
。这是合适的,因为大多数情况下,词法分析器函数用于较大程序的上下文中,其中词法分析器函数是 Flex 唯一需要或想要的东西。
如果您希望程序做的所有事情都由您的词法分析规则描述,那么您需要一个重复调用词法分析函数的主函数,yylex()
,直到它 return 非零.您可以自己编写,但不需要这样做——flex 附带了一个运行时库 libfl,其主要目的就是提供这样一个 main
。您只需要 link 它,可能是通过在编译/ link 命令的末尾添加 -lfl
来实现。
我正在研究编译理论以及如何使用 flex,但我遇到了几个问题。
我创建了一个包含以下数据的 lex 文件:
%%
"hello" printf("GOODBYE");
. ;
%%
这是我能想到的最简单的一种。如果我理解正确,它会在每次遇到 hello 标记时打印 GOODBYE,并忽略其他所有内容。
我在这个 lex 文件上使用 flex 生成了一个 C 文件,我现在应该编译那个 C 代码以获得这个语法的词法分析器。
问题是生成的C代码没有入口点。它不编译。我的 .lex 文件不正确吗?我是不是误会了什么?
您只需要在此文件中声明自己的 main()
,在第二个 %%
或 link 此 .c 与其他 main()
声明的 .c 文件之后。
%%
"hello" printf("GOODBYE");
. ;
%%
int main()
{
yylex();
return 0;
}
The problem is that the generated C code has no entry point. It does not compile.
不,它不会link。
Is my .lex file incorrect?
没有
Am I misunderstanding something?
是的。
"entry point" 是 link 人对函数 main()
的说法。 Flex 只为一个词法分析器函数生成代码,所以如果你想要一个完整的程序那么你需要单独提供 main
。这是合适的,因为大多数情况下,词法分析器函数用于较大程序的上下文中,其中词法分析器函数是 Flex 唯一需要或想要的东西。
如果您希望程序做的所有事情都由您的词法分析规则描述,那么您需要一个重复调用词法分析函数的主函数,yylex()
,直到它 return 非零.您可以自己编写,但不需要这样做——flex 附带了一个运行时库 libfl,其主要目的就是提供这样一个 main
。您只需要 link 它,可能是通过在编译/ link 命令的末尾添加 -lfl
来实现。