C14 詞法分析器,掃瞄文字提卻詞義

2021-09-23 15:25:28 字數 2953 閱讀 4170

兩個斷點定位問題

用兩個斷點,不斷縮少出現bug範圍,定位錯誤位置.

方塊為中文字元佔2個字元

對於上次方塊佔位的時候,有空心方塊

解決的方案是:以前是合起來,再分開避免的問題

現在直接用 showbrick 直接不畫空心方塊 就不做什麼就可以了

這樣直接showbackground showbrick 就可以了

對於詞法分析器我們先從 單詞數量開始.

這是一道平時很常見的習題或者面試題

hello world. i love you.
對以上文字(以空格作為單詞分隔),統計單詞個數

下面比較簡單的版本:

#include

"stdafx.h"

#include

#include

intwordnum

(char

*str)

str++;}

return

++ncount;

}int

main

(void

)

這個版本是有bug的 :比如中間加空格,後面加空格都會影響結果。

所以就知道,不能僅僅以空格為評判標準

就像我們怎麼知道這是乙個單詞,以人的直觀角度去判斷

那就是遇到空格前面是什麼狀態 如果是非空格 那麼計數加一,如果是空格那麼不計數

講一下演算法:

然後根據圖去寫程式:

多餘結束的時候我就圖示捨去了

判斷結束是否要加上1 就是判斷『\0』前面是否為非空格如果是那麼計數加一

#include

"stdafx.h"

#include

#include

#define state_start 0

#define state_blank 1

#define state_nonspace 2

intwordnum

(char

*pszcontent)

else

}else

if(nstate == state_blank)

}else

if(nstate == state_nonspace)

} pszcontent++;}

if(nstate==state_nonspace)

}return ncount;

}int

main

(void

)

以上就是狀態機(又稱自動機,有限狀態的自動機)

常常用於詞法分析過程製作詞法分析器

詞法分析就是將單詞分類。比如c語言的字元,由多種分類:

當然有人會說0x1234 分隔符號還有其他等問題 ,今天講的初級版本就不涉及了。

我們可以將以上版本同時用狀態機器表達出來

對應程式如下

如果不用彩色的化 將printf解鎖,將wirtchar注釋掉就可以了

C 詞法分析器

編譯原理實驗 一 實驗題目 設計 編制 除錯乙個識別一簡單語言單詞的詞法分析程式。程式能夠識別基本字 識別符號 無符號整數 浮點數 運算子和界符 單詞符號及種別表如下 單詞符號 種別編碼 begin1if 2then 3while4do 5end 6l l d 10dd 11 13 14 15 16...

C 的詞法分析器

lexical analyzer.h ifndef lexical analyzer h define lexical analyzer h enum lexical status enum token category struct token class lexical analyzer inl...

C 實現詞法分析器

written by zzg date 11,25,2017 include include include using namespace std string keyword 15 char separater 8 分隔符 char operator 8 運算子 char filter 4 過濾...