由于時間緊迫及事先準備不足,編譯器最后定型時暴露出不少問題及不足之處,主要有以下一些方面: 不支持數組數據類型,這是文法分析器設計時的一個疏漏,由于時間關系,最后只得把掃描器中已做好的相關的數組部分刪去。 對于float數據類型的支持,直到語義分析都是正常的,也能生成相應的匯編代碼,但由于我們對8086/8088指令系統本身了解不足,這樣的匯編代碼將只能做到含義上完全忠實于源程序,但不能運行。 對于局部變量的支持,則于時間緊迫,所有的局部變量全被處理成靜態變量。使遞歸函數不能得到正確的結果。 對于函數調用語句,不進行參數匹配檢查,如果參數數量不對,也將能通過編譯,但運行時將產生非法操作。 對&& !等邏輯操作在最后生成代碼時處理比較粗燥,生成的代碼在邏輯復雜時將不能保證運行正常。 接下來有一些,不能說是缺陷,但必須說明的問題: 對于main函數,沒有參數表,通回類型也必須為void,但如果寫上參數表及其他返回類型也能編譯通過,生成代碼時將簡單地忽略,不影響最后的代碼的運行。 對于while,for,if語句,其語句體不管是一句還是多句,必須都有{}圍起來。這跟C語言中若是一句則可省略{}不同。
標簽:
上傳時間:
2015-03-14
上傳用戶:gmh1314