編譯原理課程設計-簡單計算器實現_第1頁
編譯原理課程設計-簡單計算器實現_第2頁
編譯原理課程設計-簡單計算器實現_第3頁
編譯原理課程設計-簡單計算器實現_第4頁
編譯原理課程設計-簡單計算器實現_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、課程設計報告課程:編譯原理學號:姓名:班級:教師:時間:11 級嵌入式應用技術班2014 年 6 月簡單計算器的實現如蘭式并執行計算,最后輸出該表達式的結果。1、對單詞的構詞規則有明確的定義;2、編寫的分析程序能夠正確識別源程序中的語法符號;3、計算器源程序的以.c格式輸出;4、對于源程序中的語法錯誤,能夠做出簡單的錯誤處理,給出簡單的錯誤提示,保證順利完成整個源程序的分析;1、將非后綴式用來表示的算術表達式轉換為用逆波蘭式來表示的算術表達式,并計算用逆波蘭式來表示的算術表達式的值。2、掌握利用算符優先分析法完成中綴表達式到逆波蘭式的轉化。計劃與進度安排:5月20日5月21日:確定本次課程設計

2、研究課題:實現簡單計算器。5月22日5月30日:進行需求分析,分析該計算器具有哪些功能,并明確該課題的一些要求。5月31日6月 3日:查找相關資料和書籍,了解本課題涉及有關知識,如:波蘭式的轉化問題等。6月4日6月8程圖6月8日6月10日:詳細設計,寫出代碼并進行調試6月10日6月12日:運行程序,如果能夠實現本次課程設計則進行優化,如果不能滿足要求則繼續改進。1一、需求分析在日常的學習與工作過程中,經常遇到計算表達式數值的問題,諸如34- 難免因疏漏了括號或字符而導致結果出錯。達式到逆波蘭式的轉化,并計算輸入表達式的結果。我們每個人都使用過計算器, 專用的計算器都是一個現成的器件, 是由運

3、不能進行表 用計算機來實現一個基于表達式的計算器, 也就是用編寫程序( 即軟件) 的方法來實現。所謂的編譯程序是指這樣的一種程序, 它能夠把某一種語言程序( 稱為源語言程序) 轉換成另一種語言程序( 稱為目標語言程序) , 而后者與前者在邏輯上是等價的。四則混合計算器的輸入是一個由字符組成的表達式( 源程序) ,如果這個表達式是合法的, 則輸出是這個表達式的計算結果( 目標代碼) ; 否比較類似, 但由于編譯程序所翻譯的畢竟不是自然語言 , 必然有其自身特性,門課, 許多從事計算機專 就等價于編寫一個小的編譯系統, 而且又具有可實現性, 因此, 把這個題目作為 一類是翻譯, 是指在計算機中放置

4、一個能為計算機直接執行的翻譯程序, 它以某一種程序設計語言( 源語言) 所編寫的程序(源程序)作為翻譯或加工的對象, 當計算機執行翻譯程序時, 就將它翻譯為與之等價的另一種語言目標語言的程序( 目標程序) 。如 C 編譯程序就是一種翻譯程序,它的源語言和目標語言分別是相應的 C 語言和機器語言。解釋程序也是以源程序作為它的輸入, 它與編譯的主要區別是在解釋程序的執行過程中不產生目標程序, 而是邊解釋邊執行源程序本身。要求:實現具有加、減、乘、除、括號等運算的簡單計算器,輸入表達式,轉換為逆波蘭式,輸出該表達式的值。2二、概要設計2.1 開發環境操作系統: Windows 72.2 總體設計程序

5、在VC+6.0中使用面向對象的技術實現了計算器。程序主要結構如下:1.定義部分:定義常量、變量、數據結構。3.控制部分:從鍵盤輸入一個表達式符號串;式符號串進行堆棧(或其他)操作,輸出分析結果,如果遇到錯誤則顯示錯誤信息。將運算對象寫在前面,而把運算符號寫在后面。用這種表示法表示的表達處理表達式。利用一個棧單純地從左至右掃描逆波蘭式中各個字符,就能計算出他們的某種運算所產生的結果。運算規則如下:如果掃描的字符是操作符,則其值進棧,并掃描下一個字符如果掃描的字符是一個二目運算符,則對棧頂的兩個操作數執行該運算,并用運算的結果代替這兩個元素。如果掃描的字符是一個一目運算符,則對棧頂的操作數執行該運

6、算,并用運算的結果代替該運算對象。(2)讀入一個用中綴表示的簡單算術表達式,表達式以“/0”結束。則分析到該數字串的結束并將該數字串直接輸出。(4)如果不是數字,該字符則是運算符,此時需比較優先關系。運算符棧頂的運算從棧中彈出,將該字符入棧。(4)重復上述操作直至掃描完整個簡單算術表達式,確定所有字符都得到正確3表達式。輸入一個簡單運算表達式當前輸入符號是數字嗎?是否是否棧頂運算符優先級與相同嗎?否是是)嗎否是否圖一 生成逆波蘭式流程圖2.2.4 表達式計算的設計思想及算法(1)構造一個棧,存放運算對象。(2)讀入一個用逆波蘭式表示的簡單算術表達式。棧頂彈出。如果該字符是一目運算符,則對棧頂部

7、的元素實施該運算,將該棧頂部的元素彈出,將運算結果入棧。(4)重復上述操作直至掃描完整個簡單算術表達式的逆波蘭式,確定所有字符都得到正確處理,我們便可以求出該簡單算術表達式的值。4輸入一個簡單運算表達式入符號否A=0是是根據運算符的特點從棧頂部取出若干個運算對象進行該運算,將運果入棧程序結束圖三 實現計算器加法功能5圖四 實現計算器減法功能圖五 實現計算器乘法功能6圖六 實現計算器除法功能7設計體會與建議:器的實現。本課題的設計要求是實現具有加、減、乘、除、括號等運算的簡單計算器,輸入表達式,輸出該表達式的值。從大一學習C 語言,到大三學習JAVA,這次的課程設計我們選擇是用 C 堆棧實現對表

8、達式的分析后進行計算。在編程的過程中,有些C 語言的知識已經忘記,我重新找出C 語言的書,一中,通過我們小組的積極配合,共同努力,我們很順利的完成這次任務。但是我這兩點需要提升。總的來說,對于這次課程設計我很滿意。理,理論的知識,是不需要編寫代碼的,但是在第一堂課經過老師的介紹之后,我了解到,雖然本課程是編譯原理,書本上講到的都是一些理論知識,但是無論是哪一門課程都是需要有實踐作為基礎才能夠將其學習的更好。在第一次課上,老師就聲明這門課比較難,要認真學,所以我很認真的對待這門課程。本次課程設計是實現一個簡易的計算器,經過大一以到大三的學習,再重新運用 C C 這一點是很重要的。就目前來說,我的

9、動手能力雖然差一點,但我想,通過我的不懈努力,在這方面,我總會得到提高。在此次的課程設計中我最大的體會就是力。我相信經過實踐后的學習我可以將編譯原理這門課程掌握的更好。編譯原理是一門比較難懂但是又非常核心的計算機課程,在學習的過程中對致的了解。但是要想真正理解,那就需要實踐。本次課程設計就是一個將課本上的知識運用于實踐的過程。 3+4-5*2/2。支持括號運算,如(4+5)*5/8。用戶輸加深了對于編譯原理中算符優先分析算法的理解,通過自己編寫一個程序去實現這個算法,增強了對于編譯原理的理解和應用能力,從另一個方面,提高了理論與實踐相結合的能力,鍛煉了使用 VC6 等編程環境將課上所學習的各種理論知識轉換為可執行的應用程序并使用其解決問題的能力,為進一步深入學習編譯原理打下了良好的基礎,加深了動手能力的鍛煉。8通過課程設計,與其他兩名同組的同學一起,以編譯原理課上所學知識為基礎,通過編程實現一個能夠實現簡單計算器的程序。在此過程中遇到了許許多多

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論