【问题标题】:yylloc undefined in this scopeyylloc 在此范围内未定义
【发布时间】:2023-04-28 03:22:01
【问题描述】:

我在编译文件时遇到以下问题。我已经覆盖了YYLTYPE的定义如下(虽然它与默认相同但我会扩展它

typedef struct YYLTYPE  
{  
  int first_line;  
  int first_column;  
  int last_line;  
  int last_column;  
} YYLTYPE;

当我在 lex 文件中添加以下内容时,我得到“yylloc undefined in this scope”错误。

#define YY_USER_INIT yylloc.first_line = yylloc.first_column = 1;

粘贴箱:

【问题讨论】:

  • 我假设您打算将其标记为 gnu-flex 而不是 Adob​​e Flex。

标签: bison flex-lexer


【解决方案1】:

你需要把YYLTYPEYYLTYPE_IS_DECLARED的定义放到你#include在你的.y.l文件中的一个头文件中,你需要#include.tab.h文件在定义YYLTYPE 的文件的#include 之后的.l 文件中。

上述原因是野牛不会从您的.y 文件顶部导出YYLTYPE您的 定义,因此如果您想要它在其他地方,您需要安排它它可用。更糟糕的是,.tab.h 文件将始终具有默认的YYLTYPE(由#ifndef YYLTYPE_IS_DECLARED 保护),因此您需要确保在它之前看到您的定义。

【讨论】: