yacc 中的默认数据类型

Default data type in yacc

yacc/bison中堆栈元素的数据类型是什么? 我试过 yacc 手册,一些学术 ppts,但找不到任何东西/ 喜欢$$, ,

默认类型为int

来自Bison manual section 3.4.1, Data types of semantic values

Bison normally uses the type int for semantic values if your program uses the same data type for all language constructs.

我强烈建议收藏和阅读 Bison 手册。它包含对该工具的高度可读性介绍,它实际上描述了 Bison 的工作原理。在 Internet 上,您会发现许多遗留工具的古老文档,这些文档可能就是您正在查看的文档。一般来说,他们都说默认类型是int,但你可能需要努力寻找规范。例如,您可以在 Stephen Johnson 的 often-linked Yacc documentation, on http://dinosaur.compilertools.net 中找到它,在标记为“支持任意值类型”的小节中:

By default, the values returned by actions and the lexical analyzer are integers.

您还可以在 yacc 的 Posix 规范中找到它,它可能以 man 1p yacc 的形式出现在您的机器上,可在 opengroup.org 上的 Linux man-pages repository on http://man7.org. Alternatively, you can consult the official Posix specification for yacc 在线获取(您可能必须注册才能查看该页面,但它与您在 man7.org 上找到的信息基本相同。)在这两种情况下,如果您仔细阅读非常,您会发现默认类型的描述;它在 %type 声明的描述中标有“声明部分”的部分中,它说:

If this construct [i.e. %type ...] is present, yacc shall perform type checking; if this construct is not present, the parse stack shall hold only the int type.

请注意,这并不是对 Bison 的完全准确描述。如果您使用声明 %define api.value.type { ... }(如我的第一个 link 中所述),那么这将是所有堆栈的语义类型,无论您的语法描述中是否有 %type 声明.如果您使用的是 Bison,Bison manual 应该是您的 goto 参考。