Flex生成的pl0_lexer.h未包含自定义头文件问题求助
Flex词法分析器头文件与源文件Include不匹配问题解决
问题原因
Flex默认只会把%option header-file之后的%{ ... %}块内容插入到生成的.c文件中,而头文件pl0_lexer.h仅包含标准库头文件和Flex自动生成的声明。你自定义的ast.h等头文件都写在%option header-file之后的%{ ... %}块里,因此只会出现在.c文件中。
解决方法
把需要同时出现在.h和.c文件中的头文件,放在**%option header-file之前**的独立%{ ... %}块里。若有仅在.c中需要的内容,再单独放在后面的%{ ... %}块中。
修改后的pl0_lexer.l示例:
%{ // 这些头文件会同时插入到pl0_lexer.h和pl0_lexer.c中 #include <stdio.h> #include <string.h> #include <stdbool.h> #include <limits.h> #include "ast.h" #include "parser_types.h" #include "utilities.h" #include "lexer.h" #include "pl0.tab.h" %} %option header-file = "pl0_lexer.h" %option outfile = "pl0_lexer.c" %option yylineno %option bison-bridge %{ // 这里放仅需在pl0_lexer.c中使用的内容 // 比如局部函数声明、静态变量定义等 %}
补充说明
如果部分自定义头文件仅在词法分析器的实现代码中用到,不需要暴露给其他模块(如解析器),可以留在后面的%{ ... %}块里,只让它们出现在.c文件中即可。
内容的提问来源于stack exchange,提问作者Nawfal Cherkaoui Elmalki
相关产品推荐
相关产品推荐

