Compiler construction 将属性从flex返回到bison

Compiler construction 将属性从flex返回到bison,compiler-construction,bison,context-free-grammar,flex-lexer,Compiler Construction,Bison,Context Free Grammar,Flex Lexer,我正在尝试编写一个简单的编译器来检测未声明的变量,并做一些额外的工作。问题是,我不能在bison文件中使用“$$”,它说,`type'的“$$”没有声明的类型“。以下是我的flex和bison文件的相关部分: flx file: int[ \t\n]+matrix {yylval.type_id.Type = 4;return tINTMATRIXTYPE; } 在bison文件中写入$1.Type是可行的,但$$.Type不起作用。 有人能帮忙吗?谢谢您需要明确告诉bison您计划为每个

我正在尝试编写一个简单的编译器来检测未声明的变量,并做一些额外的工作。问题是,我不能在bison文件中使用“$$”,它说,`type'的“$$”没有声明的类型“。以下是我的flex和bison文件的相关部分:

flx file:

int[ \t\n]+matrix {yylval.type_id.Type = 4;return tINTMATRIXTYPE; }

在bison文件中写入$1.Type是可行的,但$$.Type不起作用。
有人能帮忙吗?谢谢

您需要明确告诉bison您计划为每个令牌分配值的类型(终端和非终端)。看起来您也没有声明任何令牌

%type <Type> type 
%类型
会让你开始的。但现在您还必须确保为所有其他类型(tINTTYPE等)设置了$$


这里有一个简单的例子,可以让你大致了解bison是如何运作的:

flex/bison是有趣而强大的小工具,但一开始可能很难弄清楚。如果你有任何问题,一定要发布。出于好奇,这个项目的背景是什么?谢谢,实际上我还有一个问题。关于你的问题,这个项目的背景是,我们为基本的数学运算编写了一个扫描器和语义分析器。我们在前一步中解决了语法问题,现在我们必须检测语义错误。1) 未声明的变量2)将矩阵或向量与整数、实数等进行比较。我的另一个问题是,我可以这样做:%token tIDENT,但我不能这样做:%type vars。我的意思是,如果它是一个标记,那么我可以将它与两个属性相关联,但是如果它是一个类型,我不能。我可以对此做些什么@您不应该将标记或类型与联合中的多个元素相关联。您发布的语法是结构化的,因此您不必这样做。但我希望使用非终结符“vars”或“value”保留id和类型信息。我该怎么做?
%type <Type> type