【问题标题】:Not sure how to assign $$ the value of a token不确定如何分配 $$ 令牌的值
【发布时间】:2017-03-04 02:28:52
【问题描述】:

我正在尝试赋予 $$ 令牌的价值。

例如:相关代码

%token VOID

... Yacc Code...

variableType : VOID {}; /*How to I assign variableType to the token VOID.*/

我原以为它会是 $$=$1,但这是不正确的,因为 $1 会查找值,但这是一个令牌。任何帮助将不胜感激。

【问题讨论】:

    标签: c parsing yacc


    【解决方案1】:

    我猜你想要$$ = VOID;

    在 bison/yacc 中,标记是较小的整数,它们的名称带有 enum 声明,将 bith 插入到生成的解析器和生成的头文件中,这就是扫描器可以使用它返回标记的方式。

    如果您打算将标记 void 的语义值作为标记的枚举值 VOID,则使用 yylval = VOID; return yylval; 或甚至return (yylval = VOID);。然后你可以在解析器操作中使用$1

    但是,我并不是说使用令牌枚举来识别类型是一个好主意。

    【讨论】:

    • @antti:这正是我认为使用诸如 273 之类的整数值(这是 s 野牛令牌的合理值)似乎不太可能的一个例子。 PHP 类型提示 aiui 是一小部分类型关键字 void 或命名类的任意标识符之一。在最后一种情况下,语义值应该允许操作恢复实际标识符;对于关键字,它很可能是一个枚举,但从 0 或 1 开始编号会更常见。因此,您可能期望一个指向字符串的指针或具有一些可区分值的符号表。但是一个中等大小的 int ???
    • 啊,确实,我记得 PHP 曾经有过 (void) 转换(当然没有);在 JavaScript 中,void 是一个运算符,但是也许在其中将它们放在单个关键字标记类型下也是有意义的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    • 2020-08-28
    相关资源
    最近更新 更多