可以說我有這樣我.Y語法的一部分:YACC(野牛)AST簡化
stmt : expr { $$ = $1; }
| stmt expr { $$ = insert_stmt_list($1, $2); }
在那裏我可以有給出了一個表達的陳述,或者我可以有幾種表達導致一份聲明清單。 關於後者,我通過insert_stmt ...函數來存儲它,但是第一次將它發送到棧頂。
我的問題是:我如何處理$$ = $ 1? 我的意思是,insert_stmt_list將所有內容放在一個結構中,我知道它在那裏,我可以打印它們的值等等,但是$$ = S1到底在哪裏?如何閱讀? :-)
謝謝!
最大的問題是,如果我期待一個陳述,如何處理表達呢?我能夠處理這個使用泛型結構,我有一個標誌{is_STATEMENT,is_EXPRESSION,...}和一個指向各自結構的指針。所有這些都是因爲C不允許知道指針的類型。 – Nitrate 2012-04-24 18:48:15
你可以看看Lisp的抽象語法。評價的基本句法單位是表達式。如果您希望對幾個表達式進行單一表達式預期的副作用評估,則可以使用類似'progn'的操作符:'(progn expr1 expr2 ... exprn)'。這不是一個多餘的節點。 – Kaz 2012-04-24 19:33:09