国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python實(shí)現(xiàn)詞法分析器

2020-02-16 01:01:39
字體:
供稿:網(wǎng)友

簡單Python詞法分析器實(shí)現(xiàn),供大家參考,具體內(nèi)容如下

詞法分析器狀態(tài)轉(zhuǎn)換圖:

詞法分析器總流程圖:

預(yù)處理程序:

詞法分析器:

詞法分析器程序詳細(xì)設(shè)計(jì)

詳細(xì)代碼實(shí)現(xiàn):

#!/usr/bin/env python3.4# coding=utf-8import sysimport stringkeywards = {}# 關(guān)鍵字部分keywards['False'] = 101keywards['class'] = 102keywards['finally'] = 103keywards['is'] = 104keywards['return'] = 105keywards['None'] = 106keywards['continue'] = 107keywards['for'] = 108keywards['lambda'] = 109keywards['try'] = 110keywards['True'] = 111keywards['def'] = 112keywards['from'] = 113keywards['nonlocal'] = 114keywards['while'] = 115keywards['and'] = 116keywards['del'] = 117keywards['global'] = 118keywards['not'] = 119keywards['with'] = 120keywards['as'] = 121keywards['elif'] = 122keywards['if'] = 123keywards['or'] = 124keywards['yield'] = 125keywards['assert'] = 126keywards['else'] = 127keywards['import'] = 128keywards['pass'] = 129keywards['break'] = 130keywards['except'] = 131keywards['in'] = 132keywards['raise'] = 133# 符號(hào)keywards['+'] = 201keywards['-'] = 202keywards['*'] = 203keywards['/'] = 204keywards['='] = 205keywards[':'] = 206keywards['<'] = 207keywards['>'] = 208keywards['%'] = 209keywards['&'] = 210keywards['!'] = 211keywards['('] = 212keywards[')'] = 213keywards['['] = 214keywards[']'] = 215keywards['{'] = 216keywards['}'] = 217keywards['#'] = 218keywards['|'] = 219keywards[','] = 220# 變量# keywards['var'] = 301# 常量# keywards['const'] = 401# Error# keywards['const'] = 501signlist = {}# 預(yù)處理函數(shù),將文件中的空格,換行等無關(guān)字符處理掉def pretreatment(file_name): try:  fp_read = open(file_name, 'r')  fp_write = open('file.tmp', 'w')  sign = 0  while True:   read = fp_read.readline()   if not read:    break   length = len(read)   i = -1   while i < length - 1:    i += 1    if sign == 0:     if read[i] == ' ':      continue    if read[i] == '#':     break    elif read[i] == ' ':     if sign == 1:      continue     else:      sign = 1      fp_write.write(' ')    elif read[i] == '/t':     if sign == 1:      continue     else:      sign = 1      fp_write.write(' ')    elif read[i] == '/n':     if sign == 1:      continue     else:      fp_write.write(' ')      sign = 1    elif read[i] == '"':     fp_write.write(read[i])     i += 1     while i < length and read[i] != '"':      fp_write.write(read[i])      i += 1     if i >= length:      break     fp_write.write(read[i])    elif read[i] == "'":     fp_write.write(read[i])     i += 1     while i < length and read[i] != "'":      fp_write.write(read[i])      i += 1     if i >= length:      break     fp_write.write(read[i])    else:     sign = 3     fp_write.write(read[i]) except Exception:  print(file_name, ': This FileName Not Found!')def save(string): if string in keywards.keys():  if string not in signlist.keys():   signlist[string] = keywards[string] else:  try:   float(string)   save_const(string)  except ValueError:   save_var(string)def save_var(string): if string not in signlist.keys():  if len(string.strip()) < 1:   pass  else:   if is_signal(string) == 1:    signlist[string] = 301   else:    signlist[string] = 501def save_const(string): if string not in signlist.keys():  signlist[string] = 401def save_error(string): if string not in signlist.keys():  signlist[string] = 501def is_signal(s): if s[0] == '_' or s[0] in string.ascii_letters:  for i in s:   if i in string.ascii_letters or i == '_' or i in string.digits:    pass   else:    return 0  return 1 else:  return 0def recognition(filename): try:  fp_read = open(filename, 'r')  string = ""  sign = 0  while True:   read = fp_read.read(1)   if not read:    break   if read == ' ':    if len(string.strip()) < 1:     sign = 0     pass    else:     if sign == 1 or sign == 2:      string += read     else:      save(string)      string = ""      sign = 0   elif read == '(':    if sign == 1 or sign == 2:     string += read    else:     save(string)     string = ""     save('(')   elif read == ')':    if sign == 1 or sign == 2:     string += read    else:     save(string)     string = ""     save(')')   elif read == '[':    if sign == 1 or sign == 2:     string += read    else:     save(string)     string = ""     save('[')   elif read == ']':    if sign == 1 or sign == 2:     string += read    else:     save(string)     string = ""     save(']')   elif read == '{':    if sign == 1 or sign == 2:     string += read    else:     save(string)     string = ""     save('{')   elif read == '}':    if sign == 1 or sign == 2:     string += read    else:     save(string)     string = ""     save('}')   elif read == '<':    save(string)    string = ""    save('<')   elif read == '>':    save(string)    string = ""    save('>')   elif read == ',':    save(string)    string = ""    save(',')   elif read == "'":    string += read    if sign == 1:     sign = 0     save_const(string)     string = ""    else:     if sign != 2:      sign = 1   elif read == '"':    string += read    if sign == 2:     sign = 0     save_const(string)     string = ""    else:     if sign != 1:      sign = 2   elif read == ':':    if sign == 1 or sign == 2:     string += read    else:     save(string)     string = ""     save(':')   elif read == '+':    save(string)    string = ""    save('+')   elif read == '=':    save(string)    string = ""    save('=')   else:    string += read except Exception as e:  print(e)def main(): if len(sys.argv) < 2:  print("Please Input FileName") else:  pretreatment(sys.argv[1]) recognition('file.tmp') for i in signlist.keys():  print("(", signlist[i], ",", i, ")")if __name__ == '__main__': main()            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 获嘉县| 靖西县| 四会市| 延吉市| 北碚区| 凯里市| 甘谷县| 青海省| 长宁区| 浮梁县| 仪陇县| 集安市| 江门市| 建始县| 天水市| 彭水| 滕州市| 惠东县| 藁城市| 阿克苏市| 新化县| 池州市| 犍为县| 卢龙县| 北流市| 东乌珠穆沁旗| 丹江口市| 新沂市| 临城县| 乌苏市| 柘城县| 麻江县| 楚雄市| 永昌县| 光泽县| 军事| 南康市| 英吉沙县| 安徽省| 云霄县| 基隆市|