在Bison中實現簡單的while循環的最佳方式是什麼?如果它有所作爲,我使用C,但我也可以使用C++。解析Bison中的While循環
回答
你所要求的並不適合堆棧溢出的答案。它非常詳細,許多書籍都是關於它的。
基本的答案是你不在Bison中實現while循環。野牛在這個意義上不是一種語言。 Bison從語法中構建解析器,並在該語法中構建與規則相關的操作。
解析器是一個pushdown automaton,它是一個附有堆棧的狀態機器。它需要線性序列的標記,並檢測語法中的規則何時得到滿足(或者是否有錯誤)。當規則滿足時,解析器將執行附加到該規則的動作。這裏,令牌(通常)是與語言中的關鍵字,標識符和文字相對應的整數值。用Bison編寫的解析器通常依靠一個單獨的例程(稱爲lexical scanner)將輸入文本翻譯爲令牌。
這臺機器沒有任何東西可以直接讓你實現一個while循環。相反,這些操作用於構建可以進一步處理的輸入的內部表示。對於具有while循環的複雜語法,此表示通常採用樹的形式,並且通常稱爲AST(abstract syntax tree)。爲了更具體的給定了輸入文本:
while (i < n) { ... }
相應AST可能是這樣的:
[while node]
_____/ \_____
_____/ \____
/ \
[operator <] [block subtree]
/ \
/ \
[ID: i] [ID: n]
的而節點預計兩個子樹:對應於所述繼續條件的表達式的子樹(i < n
)和塊對應的塊子樹({ ... }
)。
給定一個適當的while循環的AST,通過處理AST的節點來實現循環,並結合一些處理標識符和變量值的機器,這是相當直接的。
如果您給Bison一個proper grammar(即:適用於LALR(1)解析)和構建AST的動作,您將獲得一個將令牌流轉換爲AST的例程。從AST執行循環超出了Bison的範圍。
謝謝你的回答。我擔心情況會如此。 –
- 1. 嵌套while循環的Yacc解析器
- 2. PHP/MySQL的while循環不解析
- 3. 分析while循環
- 4. while循環解析Double.IsNaN不當
- 5. 瞭解while循環
- 6. 跳到下一個循環(XML解析內部while循環)
- 7. 將for循環轉換爲while循環以解析行
- 8. 如何使用For循環或While循環解析JSONObjects
- 9. while while while循環while循環
- 10. 水平分析while循環
- 11. SQL:在while循環中while循環
- 12. 用bison解析bibtex
- 13. while while循環中的Thread.sleep()
- 14. while while循環中的HTML
- 15. while while循環
- 16. while while循環
- 17. 瞭解while循環python
- 18. 瞭解Ruby while循環
- 19. while循環在if循環中while循環中
- 20. 如何破解while while循環?
- 21. 瞭解Tensorflow中的while循環
- 22. while while while while while循環
- 23. Python的while循環while循環
- 24. while循環和While循環的退出
- 25. while循環while循環的MySQL
- 26. Perl while while循環只在for循環中循環一次
- 27. JavaScript while while循環
- 28. setTimeout while while循環
- 29. while while循環? (JAVA)
- 30. fflush while while循環
你是什麼意思'實施'一個while循環?在你給野牛的C源?在野牛產生的語法中? –