python 實現乙個簡單的C語言詞法分析

2021-10-06 03:20:20 字數 2889 閱讀 4783

python 實現乙個簡單的c語言詞法分析

# 定義乙個字典或者列表與其中的字串進行輸出來的進行匹配

import sys

map_key =

map_sym =",

"+",

"-",

"*",

"=",

"/",

">"

,"<"

,";"

,":"

,","

,"#"

}# 寫乙個編碼字典

map_data =":

29,"+":22,

"-":23,

"*":24,

"=":25,

"/":25,

">":35

,"<":36

,";":34

,":":33

,",":32

,"#":0

,"include":56

,"*/":57

}def

data_map

(a, b)

:# a代表要比較的字元 b 代表map

for i in

range

(len

(a))

:if a[i]

in b:

print

(a[i]

, map_data[a[i]])

# 判斷字母或數字,可以利用異常捕獲,系統自帶的string.isdigit()的方法,

# 該方法用於判定輸入的字串是否為純數,但是一旦是浮點型別就會返回false

defdata_is_number

(a):

try:

float

(a)return

true

except valueerror:

pass

else

:return

true

defdata_start

(a, b)

:if a.startswith(

'/*'):

return a

elif a.endswith(

'*/'):

return

'*/'

else

:for i in b:

if a.startswith(i)

:print

(i, map_data[i]

) a = a.replace(i,'')

return a

# 開啟需要檢測的c程式txt文字檔案

with

open

("cc.txt"

,"r"

, encoding=

'utf-8'

)as f:

data = f.readlines(

)# print(data) # 測試是否正常輸出

f.close(

)# 刪除字串中的 \n

for i in

range

(len

(data)):

data_strip = data[i]

.replace(

'\n',''

).strip(

).split(

)# 刪除\n 與 空白 並將其分割成字元塊

for i in

range

(len

(data_strip)):

data_strip[i]

= data_start(data_strip[i]

, map_sym)

# 解決標頭檔案形式

if data_strip[i]

in map_key:

# 判斷字元在map中嘛

print

(data_strip[i]

, map_data[data_strip[i]])

else

:# 解決 main()的問題

data_str = data_strip[i]

for i in map_key:

if data_str.startswith(i)

: data_str = data_str.replace(i,'')

print

(i, map_data[i]

)# 這裡開始對字串進行列表化處理

data_data =

list

(data_str)

for i in

range

(len

(data_data)):

if data_is_number(data_data[i]):

if data_data[i+1]

:if data_data[i+1]

.encode(

'utf-8'

).isalpha():

print

(data_data[i],10

)print

('該程式存在詞法錯誤'

) sys.exit(0)

else

:print

(data_data[i],10

)elif data_data[i]

in map_sym:

print

(data_data[i]

,map_data[data_data[i]])

elif data_data[i]

.encode(

'utf-8'

).isalpha():

print

(data_data[i],20

)

Python實現的乙個簡單LRU cache

起因 我的同事需要乙個固定大小的cache,如果記錄在cache中,直接從cache中讀取,否則從資料庫中讀取。python的dict 是乙個非常簡單的cache,但是由於資料量很大,記憶體很可能增長的過大,因此需要限定記錄數,並用lru演算法丟棄舊記錄。key 是整型,value是10kb左右的p...

C 實現乙個簡單的unordered map

無序關聯容器的底層是乙個鏈式雜湊表,包括下列四種 無序關聯容器 特點unordered set 無序集合,只儲存key且不允許重複 unordered multiset 無序多重集合,只儲存key且允許重複 unordered map 無序對映表,儲存key value且不允許重複 unordere...

Python 實現乙個簡單的多執行緒

import threading def main str print str def create thread num,args threads for i in range num try t threading.thread target main,args args t.start exc...