0
爲什麼我必須在以下語法片段中明確使用$<nVal>4
?野牛語法%類型和%令牌
我以爲%type <nVal> expr
行會刪除需要,所以我可以簡單地把$4
?
難道不可以使用expr
的不同定義,以便我可以嗎?
%union
{
int nVal;
char *pszVal;
}
%token <nVal> tkNUMBER
%token <pszVal> tkIDENT
%type <nVal> expr
%%
for_statement : tkFOR
tkIDENT { printf("I:%s\n", $2); }
tkEQUALS
expr { printf("A:%d\n", $<nVal>4); } // Why not just $4?
tkTO
expr { printf("B:%d\n", $<nVal>6); } // Why not just $6?
step-statement
list
next-statement;
expr : tkNUMBER { $$ = $1; }
;
更新以下RICI的答案。這現在工作一種享受:
for_statement : tkFOR
tkIDENT { printf("I:%s\n", $2); }
tkEQUALS
expr { printf("A:%d\n", $5 /* $<nVal>5 */); }
tkTO
expr { printf("A:%d\n", $8 /* $<nVal>8 */); }
step-statement
list
next-statement;
謝謝 - 你是完全正確的。 – SparkyNZ
我明白了 - 一個「中間規則動作」是出現在規則中間的大括號「斑點」,而不是出現在最後。所以如果我在最後有一條規則,我所有的原始編號都可以工作。使用中間規則操作時,我需要在編號中包含中間規則斑點。 – SparkyNZ