1
我試圖使自定義基於C語言的編譯器,它支持使用C++和Flex +野牛變量的作用域與作用域的語言。我已經做了詞法和語法分析器,但我有麻煩解決問題與作用域。我在野牛解析器文件中實現了語義動作,例如編譯器使用野牛
while_stmt : WHILE LEFT_PAREN expr RIGHT_PAREN LEFT_CBRACE stmts RIGHT_CBRACE { $$ = new WhileStatement($3, *$6); }
;
我有是什麼時候把新的符號表上的上下文符號表堆找到了片刻的問題是什麼。由於它是一個自下而上的解析器,我不知道什麼時候新的塊開始,它剛剛結束時,進行還原後,它是太晚了我。我放在規則後面的代碼在裁減之後被擴展。
怎麼可以這樣解決了使用野牛?我正在頭腦風暴一會兒沒有解決方案。謝謝。
幾分鐘前,我已經發現了關於http://www.gnu.org/software/bison/manual/html_node/Using-Mid_002dRule-Actions.html#Using-Mid_002dRule-Actions什麼似乎解決了我所嘗試的實現。我已經實現了作用域符號表,如果我能夠將該操作置於規則的中間,那麼只要出現LEFT_CBRACE,我就可以放入新的符號表,並在RIGHT_CBRACE終止該塊時從堆棧中彈出它。我目前正在實施它,並讓你知道它是如何結束的。 –