1. 程式人生 > 其它 >BUAA_OO 第一單元總結——表示式分析

BUAA_OO 第一單元總結——表示式分析

BUAA_OO 第一單元總結——表示式分析

前言

第一單元OO終於落下了帷幕,期間無論是構建程式碼的辛苦,還是第二次作業寄了之後的接近崩潰,都給我留下了深刻的印象。不得不說,這門課真是在某種程度上折磨了我很久。但是,當我真正做完了第三次作業,再回首之前奮戰的經歷,讓人有些回味。

本門課為面向物件設計與構造,第一單元的內容為表示式分析,通過對錶達式結構進行建模,完成單變數多項式的括號展開,到完成多項式的括號展開與函式呼叫、化簡,最後到完成多層巢狀表示式和函式呼叫的括號展開與化簡。層層深度,逐層遞進,幫助學生掌握層次化設計的思想。

程式碼分析工具

本次使用的程式碼分析工具為MetricsReload

Statistic來分析程式碼的複雜度和各個模組之間的長度

第一次作業

1.整體架構

​ 在第一次作業中,由於表示式的形式比較簡單,且括號只有一層,在結構上並沒有出現遞迴下降的情況,因此我將表示式分析分成了預處理、遞迴下降法處理表達式、輸出處理三部分。

1.1預處理

目的:便於處理後續表示式,使用replaceAll較為方便(雖然我最開始是一個一個字元分析)

  • 去除冗餘的+-

    這個方法並不是一個十分符合處理表達式的方法,本質上還是一種字串替換,而這個問題在經過我的不斷學習之後,在第三次作業得以改善-

  • 去除空白符(使用replaceAll)

  • 在以+或者-開頭的表示式前補加0。

    這個是因為在我的第一次設計架構中,我對於因子的解析為表示式因子、冪函式因子和常數因子。其中,後兩個在解析時是可以帶符號的,而對於表示式因子來說,如果對這個因子進行分析時前面是負號令我十分困擾,因此我通過對於表示式形式化描述的分析,確認了表示式因子只會在第一項的第一個因子有符號。

1.2遞迴下降法

在對正則表示式和遞迴下降法分析時,我個人認為遞迴下降法更能層級性的表示出表示式分析的層次建構。下面是我的表示式建構

  • 表示式Expr

  • Term、符號因子Sign

  • 常數因子NUM、變數因子Variable、表示式因子Expr

處理過程與最為基礎的遞迴下降法(train 2)有三處不同。

  1. 添加了符號因子,這個因子表示了不同項之間的符號,在後續的輸出處理中再將符號挪到不同的項中。

    這個問題在第三次作業解決

  2. 在得出表示式因子時,程式判斷表示式因子後面的指數,通過for迴圈輸出n個表示式依著你

  3. 由於預處理使表示式因子前面的符號一定是項的符號,因此對於另外兩個因子處理時會先考慮正負號,再考慮因子的種類。儲存常數因子和冪函式因子時,程式直接儲存它們的值而沒有進行化簡(例如設定係數指數等等)。

1.3輸出處理