2012-04-14 46 views
1

我寫了一個簡單的使用flex + bison的彙編程序。我想將一個預處理器(宏)添加到彙編語言中。這是我第一次嘗試使用flex + bison,我不知道如何去做這件事。我應該如何將預處理程序添加到flex + bison彙編程序?

添加一個單獨的flex + bison實例並完全單獨進行預處理是否合適?或者他們是否支持爲不同的處理階段表達不同的結構?

如果好奇,the assembler is here,爲DCPU-16架構。

回答

3

你絕對需要一個單獨的解析器。這就是gcc的做法 - 您可以在預處理後停止編譯(我相信-E)。從技術角度來看,編寫單個解析器是可能的,但它會遇到更多的麻煩,而且我沒有看到它有用的特殊原因,而將它們分開將允許您在預處理後停止編譯,不僅可以在預處理器/彙編器本身中跟蹤錯誤,而且可以輕鬆跟蹤任何使用它編寫的程序。

+0

你描述了一個理想的*效果*。我問的是method:在flex + bison的一個「實例」中表達(並處理解析器回調中的階段),或者有一個完整的單獨的flex + bison實例。 – blueshift 2012-04-14 06:01:12

+2

編寫兩個單獨的詞法分析器和分析器。使用prefix指令,它們不會發生衝突。 – Kevin 2012-04-14 14:07:38

+0

謝謝。聽起來很合理。 – blueshift 2012-04-14 23:25:35

2

你可以看看我的。我有同樣的想法,你有:P You can find it here它支持表達式,但我意識到,如果你想支持向前引用你必須有一個ast。也許當Notch指出,未固定大小的op代碼難以製作彙編器,因爲他會改變它:)

一本關於這個主題的好書是Flex and Bison它顯示了你可以如何做「狀態」,你可以推動詞法分析器狀態並更改文件緩衝區。它顯示了一個基本的解析器/ lex。它幫助了我的學習:)

+0

謝謝,我來看看。如果你想支持涉及符號的短文字,你也需要一個AST。他們讓生活變得艱難但肯定可以被視爲0x10c世界挑戰的一部分? :) – blueshift 2012-04-23 04:15:06

相關問題