2016-04-03 33 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個」符號。