【问题标题】:YACC or Bison Action Variables positional max valueYACC 或 Bison 动作变量位置最大值
【发布时间】:2016-04-03 08:12:56
【问题描述】:

在 YACC 和其他类似 Yacc 的程序中。当前解析的标记组有动作位置变量。我可能想处理一些列数因未知原因而发生变化的 csv 文件输入。根据我的规则,quoted_strings 和 numbers 可以找到一个或多个实例。

rule : DATE_TOKEN QUOTED_NUMBERS q_string numbers { printf(..... $1,$2....}

q_string
    : QUOTED_STRING
    | QUOTED_STRING q_string
    ;

numbers
    : number numbers
    | number
    ;

number
    : INT_VALUE
    | FLOAT_VALUE
    ; 

可以添加操作以按原样进行解析

{ printf("%s %s %s \n",$<string>1, $<string>1, $<string>1); }

是否有运行时宏、构造或变量告诉我已经读取了多少令牌,以便我可以编写一个循环来打印所有令牌值?

什么是 $max

【问题讨论】:

    标签: yacc


    【解决方案1】:

    bison 动作中的$n 变量指的是右侧符号,而不是标记。如果对应的 rhs 对象是一个非终结符,$n 指的是该非终结符的语义值,该值是通过在该非终结符的语义操作中分配给 $$ 来设置的。

    因此,如果规则右侧有五个符号,那么您可以使用$1$5。没有变量表示法允许您引用“第 n 个”符号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 2011-09-27
      相关资源
      最近更新 更多