我想在C語言中構建一個編譯器。我現在寫了一個詞法分析器,它可以讀取輸入文件並輸出一個令牌流。 現在,我理解語法背後的理論,並且我知道如何爲不同的表達式手工編寫解析樹。 但我有點失落,將其與實際的代碼相關聯! 我得到令牌後應該如何開始解析過程? 首先,我的解析器程序在接收到第一個標記時應該做些什麼?我知道它必須以樹的形式排列。但我該如何開始? 任何幫助都會很棒,我只是一個初學者。一旦詞法分析器返回一個標記,如何開始分析? (建立一個編譯器)
非常感謝!
它處理當前令牌後的下一個令牌。現在,我打算假設我的語言完全由賦值語句組成。
所以,BNF形式是一樣的東西:
<assignment_statement> ::= <destination> := <factor>
<destination> ::= <identifier>
<identifier> ::= [a-zA-Z][a-zA-Z0-9]*
<factor > ::= <name>|<number>|<string>
<name> ::= <identifier>
<number> ::= [0-9]+
<string> ::="[a-zA-Z0-9]*"
現在,當我看到這樣的聲明:var := 9
,詞法分析器將返回的第一個標記爲「無功」,會出現什麼父規則是和子規則是? 另外,我該如何去構建這個語句的解析樹?
非常感謝!
或者您可能想要使用YACC,或者更確切地說,它的盛大的孩子Bison。 – 2011-01-13 14:18:02