表示式計算

2021-10-08 03:06:32 字數 776 閱讀 5571

為了使看起來複雜的東西簡單化,這裡用例子表達。

什麼叫表示式:

a=b+c;b=1,c=2;

什麼叫表示式計算:

輸入字串「a=b+c;b=1,c=2;」,返回計算結果 ;

有什麼意義:

追求程式的通用化。不需要每個專案都開發。

比如做一套報表,裡邊的各個資料,都可以通過表示式定義。

這樣這個報表的通用性是不是大大提公升?

另外,表示式不僅僅限定於數**算,還可以自定義方法。

設計方案:

採用開源框架antlr4。具體的入門教程,網上很多,這裡不贅述。

其實使用起來不複雜,關鍵是如何自定義語法規則。

可以參考別人定義好的語法規則:

這裡大概做個入門介紹。

1、語法分為詞法(lexer)和語法(grammar)

2、詞法採用大寫字母表示,定義一些關鍵字之類的。

3、語法採用小寫字母表示,定義計算規則、優先順序等等。

4、優先順序採用自上往下的方式定義,優先順序高的運算寫在前面,優先順序低的寫在後面。

5、乙個語法可以有多個分支,採用【|】進行分割。【;】表示結束。

6、語法後面【?】表示可選,【*】表示0個或者多個,【+】表示1個或者多個。

7、詞法語法可以分開寫,採用【lexer grammar 】指定當前為語法檔案,

採用【import xx】的方式匯入詞法檔案。

8、注意!語法檔案不區分字串與字元,統一採用單引號包住字元或者字串。

9、最終計算的實現,採用觀察者或者監聽者的方式實現。

表示式計算

棧的應用舉例 棧在表示式計算過程中的應用 建立運算元棧和運算子棧。運算子有優先順序。規則 自左至右掃瞄表示式,凡是遇到運算元一律進運算元棧。當遇到運算子時,如果它的優先順序比運算子棧棧頂元素的優先順序高就進棧。反之,取出棧頂運算子和運算元棧棧頂的連續兩個運算元進行運算,並將結果存入運算元棧,然後繼續...

表示式計算

表示式計算對於我們人來說,喜歡通過中綴表示式來計算,而計算機則不一樣,需要通過字尾表示式來計算,首先通過例項來介紹一下中綴表示式和字尾表示式 例子 中綴表示式 3 5 2 3 6 字尾表示式 3 5 2 3 6 那麼轉換規則是怎麼樣的呢?規則 從左到右遍歷中綴表示式的每個數字和符號,若是數字就輸出,...

表示式計算

表示式計算 時間限制 1.0s 記憶體限制 256.0mb 問題描述 輸入乙個只包含加減乖除和括號的合法表示式,求表示式的值。其中除表示整除。輸入格式 輸入一行,包含乙個表示式。輸出格式 輸出這個表示式的值。樣例輸入 1 2 3 4 5 樣例輸出 4資料規模和約定 表示式長度不超過100,表示式運算...