C++原始碼單詞掃描程式(詞法分析)
實驗內容及要求:
(1)C++原始碼掃描程式識別C++記號。
C++語言包含了幾種型別的記號:識別符號,關鍵字,數(包括整數、浮點數),字串、註釋、特殊符號(分界符)和運算子號等。
(2)開啟一個C++原始檔,列印出所有以上的記號。
(3)要求應用程式應為Windows介面。
(4)選作部分:為了提高C++源程式的可讀性,C++程式在書寫過程中加入了空行、空格、縮排、註釋等。假設你想犧牲可讀性,以節省磁碟空間,那麼你可以存貯一個刪除了所有不必要空格和註釋的C++源程式的壓縮文字。因此,程式中還應該有這樣的壓縮功能。
(5)選作部分:進一步思考或實現——如何進一步實現減小原始檔大小的壓縮功能。
思路:
(1)由於需要處理特殊字元等,因此只能逐個字元掃描;
(2)觀察上述要求的記號:識別符號、關鍵字、數、特殊符號、運算子號(暫時不考慮註釋和字串,比較特殊後面再進行處理),可以發現這些記號幾乎都被特殊符號分割開來了,如空格符、換行符、製表符、逗號、分號等;
(3)分詞: 也就是說我們再逐個字元掃描的時候,若遇到這些特殊字元,要麼就是某個記號的結束,或者記號本身(分號、逗號也是記號,即特殊符號);而我們掃描過程中,正在處理的字元若不是特殊符號,可以暫存起來,直到遇到結束符,然後把之前快取起來的字元組合成一個詞;
(4)型別判斷:經過一輪掃描之後,我們就會得到一個個劃分號的詞,此時再進行記號型別的判斷就容易多了;
(5)當然,除了註釋和字串需要特殊處理外,還有一些特殊字元不一定只有一個位元組,比如(++,--)這些是兩個字元作為一個整體,若按上面進行分詞,這些記號就會被切分開來,不符合要求;這裡我們也可以把無法判斷是否多個位元組的特殊字元快取起來,等到下一個能確定結束的字元再進行處理;
程式執行效果圖:
相關文章
- 詞法分析程式詞法分析
- C語言編譯器開發之旅(一):詞法分析掃描器C語言編譯詞法分析
- 中文詞法分析的簡單程式 (轉)詞法分析
- PHP-7.1 原始碼學習:詞法分析PHP原始碼詞法分析
- 一個詞法分析器原始碼的剖析詞法分析原始碼
- Shading-jdbc原始碼分析-sql詞法解析JDBC原始碼SQL
- 詞法分析心得詞法分析
- 【附原始碼】小程式初窺之簡單查單詞原始碼
- 詞法分析器詞法分析
- vue之詞法分析Vue詞法分析
- 詞法分析基礎詞法分析
- 什麼是詞法分析?請描述下js詞法分析的過程?詞法分析JS
- Hanlp分詞之CRF中文詞法分析詳解HanLP分詞CRF詞法分析
- Lex詞法分析器詞法分析
- 詞法分析器Java詞法分析Java
- 詞法分析(修改版)詞法分析
- 0916詞法分析詞法分析
- C++ 統計單詞數C++
- 關於程式設計詞法分析的感想程式設計詞法分析
- 詞法分析的前奏:字元分析(三)詞法分析字元
- Partition 表掃描的過程,使用key作為謂詞與使用非key值做謂詞....
- 詞法分析實驗總結詞法分析
- 0916 詞法分析(2)詞法分析
- 0916 詞法分析(3)詞法分析
- Java 實現《編譯原理》簡單詞法分析功能Java編譯原理詞法分析
- PostgreSQL 原始碼解讀(165)- 查詢#85(基礎知識-詞法分析)SQL原始碼詞法分析
- 文字分析——分配單詞權重
- 單詞
- 0916 程式設計實驗一 詞法分析程式程式設計詞法分析
- C++謂詞C++
- 程式碼 PK 詩詞
- 詞法分析器的實現詞法分析
- 實現指令碼直譯器 - 詞法分析器指令碼詞法分析
- Go 語言的詞法分析和語法分析(1)Go詞法分析語法分析
- 單詞小卡片 -- 從單詞、例句收集到命令式背單詞
- 原始碼掃描裝置/軟體列表原始碼
- 劍指offer—58.翻轉單詞順序列—分析及程式碼(Java)Java
- 單詞背背佳1.0演算法分析演算法