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...