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 参考。
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 参考。