【发布时间】:2017-03-04 02:28:52
【问题描述】:
我正在尝试赋予 $$ 令牌的价值。
例如:相关代码
%token VOID
... Yacc Code...
variableType : VOID {}; /*How to I assign variableType to the token VOID.*/
我原以为它会是 $$=$1,但这是不正确的,因为 $1 会查找值,但这是一个令牌。任何帮助将不胜感激。
【问题讨论】:
我正在尝试赋予 $$ 令牌的价值。
例如:相关代码
%token VOID
... Yacc Code...
variableType : VOID {}; /*How to I assign variableType to the token VOID.*/
我原以为它会是 $$=$1,但这是不正确的,因为 $1 会查找值,但这是一个令牌。任何帮助将不胜感激。
【问题讨论】:
我猜你想要$$ = VOID;。
在 bison/yacc 中,标记是较小的整数,它们的名称带有 enum 声明,将 bith 插入到生成的解析器和生成的头文件中,这就是扫描器可以使用它返回标记的方式。
如果您打算将标记 void 的语义值作为标记的枚举值 VOID,则使用 yylval = VOID; return yylval; 或甚至return (yylval = VOID);。然后你可以在解析器操作中使用$1。
但是,我并不是说使用令牌枚举来识别类型是一个好主意。
【讨论】:
void 或命名类的任意标识符之一。在最后一种情况下,语义值应该允许操作恢复实际标识符;对于关键字,它很可能是一个枚举,但从 0 或 1 开始编号会更常见。因此,您可能期望一个指向字符串的指针或具有一些可区分值的符号表。但是一个中等大小的 int ???
(void) 转换(当然没有);在 JavaScript 中,void 是一个运算符,但是也许在其中将它们放在单个关键字标记类型下也是有意义的。