yacc/bison中堆栈元素的数据类型是什么?
我试过yacc手册,一些学术PPT,但找不到任何东西/
比如$$,$1,$2等等
默认类型为int
根据《野牛手册》第3.4.1节,语义值的数据类型:
如果您的程序对所有语言构造使用相同的数据类型,Bison通常会对语义值使用int类型
我强烈建议大家把野牛手册作为书签和阅读。它包含了一个高度可读的工具介绍,它实际上描述了野牛是如何工作的。在互联网上,你会发现很多关于遗留工具的古代文档,这些文档可能就是你正在查看的文档。一般来说,它们都会说默认类型是int,但是您可能需要仔细查找才能找到规范。例如,您可以在Stephen Johnson经常链接的Yacc文档中找到它http://dinosaur.compilertools.net,在标有“的小节中;支持任意值类型";:
默认情况下,操作和词法分析器返回的值是整数
您还可以在针对yacc的Posix规范中找到它,该规范可能以man 1p yacc的形式出现在您的机器上,可在上的Linux手册页存储库中在线获得http://man7.org. 或者,您可以在opengroup.org上查阅官方的Posix yacc规范(您可能需要注册才能看到该页面,但它基本上与您在man7.org上找到的信息相同)。在这两种情况下,如果您非常仔细地阅读,就会找到默认类型的描述;在这一节中,它被贴上了标签;声明部分“;在%声明的描述中,键入声明,其中说明:
如果存在该结构,yacc应进行类型检查;如果不存在此构造,则解析堆栈应仅保存int类型
请注意,这并不是对野牛的完全准确描述。如果使用声明%define api.value.type{…}(如我的第一个链接中所述),那么无论语法描述中是否有%type声明,该声明都将是所有堆栈的语义类型。如果你正在使用野牛,野牛手册应该是你的goto参考