首页 > 解决方案 > yylval 可能是结构而不是联合?

问题描述

在 Bison 上, yylval 可能是 struct 而不是 union ?我知道我可以将 yylval 定义为 union with%union{}但是有没有办法将 yylval 定义为 struct ?例如,返回标识符的行和字符串,并在对野牛的某些语法规则的操作上访问这些信息。

标签: parsingbison

解决方案


是的,你可以#define YYSTYPE成为任何你想要的类型,而不是使用%union. 但是,这样做很少有用1 - 如果您想要源位置信息,最好%position结合使用%union.

%union声明中使用结构也是可能的(也是常见的) 。这使得某些规则很容易(有效地)返回多个值。


1主要问题是,如果您使用%type指定使用一个结构字段,那么在同一操作中使用其他字段会很痛苦。您需要手动完成所有操作,从而失去了野牛联合类型检查的好处


推荐阅读