BUAA_OO 第一單元總結——表示式分析
BUAA_OO 第一單元總結——表示式分析
前言
第一單元OO終於落下了帷幕,期間無論是構建程式碼的辛苦,還是第二次作業寄了之後的接近崩潰,都給我留下了深刻的印象。不得不說,這門課真是在某種程度上折磨了我很久。但是,當我真正做完了第三次作業,再回首之前奮戰的經歷,讓人有些回味。
本門課為面向物件設計與構造,第一單元的內容為表示式分析,通過對錶達式結構進行建模,完成單變數多項式的括號展開,到完成多項式的括號展開與函式呼叫、化簡,最後到完成多層巢狀表示式和函式呼叫的括號展開與化簡。層層深度,逐層遞進,幫助學生掌握層次化設計的思想。
程式碼分析工具
本次使用的程式碼分析工具為MetricsReload
Statistic
來分析程式碼的複雜度和各個模組之間的長度
第一次作業
1.整體架構
在第一次作業中,由於表示式的形式比較簡單,且括號只有一層,在結構上並沒有出現遞迴下降的情況,因此我將表示式分析分成了預處理、遞迴下降法處理表達式、輸出處理三部分。
1.1預處理
目的:便於處理後續表示式,使用replaceAll
較為方便(雖然我最開始是一個一個字元分析)
-
去除冗餘的
+-
這個方法並不是一個十分符合處理表達式的方法,本質上還是一種字串替換,而這個問題在經過我的不斷學習之後,在第三次作業得以改善-
-
去除空白符(使用
replaceAll
) -
在以
+
或者-
開頭的表示式前補加0。這個是因為在我的第一次設計架構中,我對於因子的解析為表示式因子、冪函式因子和常數因子。其中,後兩個在解析時是可以帶符號的,而對於表示式因子來說,如果對這個因子進行分析時前面是負號令我十分困擾,因此我通過對於表示式形式化描述的分析,確認了表示式因子只會在第一項的第一個因子有符號。
1.2遞迴下降法
在對正則表示式和遞迴下降法分析時,我個人認為遞迴下降法更能層級性的表示出表示式分析的層次建構。下面是我的表示式建構
-
表示式
Expr
-
項
Term
、符號因子Sign
-
常數因子
NUM
、變數因子Variable
、表示式因子Expr
處理過程與最為基礎的遞迴下降法(train 2)有三處不同。
-
添加了符號因子,這個因子表示了不同項之間的符號,在後續的輸出處理中再將符號挪到不同的項中。
這個問題在第三次作業解決
-
在得出表示式因子時,程式判斷表示式因子後面的指數,通過for迴圈輸出n個表示式依著你
-
由於預處理使表示式因子前面的符號一定是項的符號,因此對於另外兩個因子處理時會先考慮正負號,再考慮因子的種類。儲存常數因子和冪函式因子時,程式直接儲存它們的值而沒有進行化簡(例如設定係數指數等等)。