2016-04-03 34 views
0

在YACC和其他Yacc类似的程序。当前解析的标记组有一些操作位置变量。我可能想要处理一些csv文件输入,列数由于未知原因而改变。通过我的规则,quoted_strings和数字可以是一个或多个找到的实例。YACC或野牛动作变量位置最大值

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); } 

有没有告诉我一个运行宏,建设或可变多少令牌已经阅读使我可以写一个循环来打印所有的令牌值?

什么是$最大

回答

2

在野牛行动的$n变量指向右侧的符号,而不是令牌。如果相应的rhs对象是非终结符,则$n引用非终结符的语义值,该语义值是通过在该非终结符的语义操作中分配给$$而设置的。

因此,如果规则右侧有五个符号,则可以使用$1$5。没有变量符号可以让你引用“第n个”符号。