在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
答案 0 :(得分:2)
野牛行动中的$n
变量是指右侧符号,而不是代币。如果对应的rhs对象是非终端对象,则$n
指的是非终端的语义值,该语义值是通过在该非终结符的语义动作中分配给$$
来设置的。 p>
因此,如果规则的右侧有五个符号,那么您可以使用$1
到$5
。没有变量符号可以让你引用&#34; nth&#34;符号