快捷搜索:  汽车  科技

python写词法分析器(编译程序中的词法分析器)

python写词法分析器(编译程序中的词法分析器)输出结果截图:图2.分析结果以上就是WBB对词法分析器的设计,如果有帮助到各位博友记的点赞加关注吧!!!

这个学期选了编译原理这门课,还附带一个课程设计,经过几天的鏖战,终于算是告一段落了,下面是我对词法分析器的一些设计,希望可以帮到和我有相同遭遇的博友们……


代码实现:

from tkinter import * import threading #预定义的可以分析的各种字符和关键字,依个人需求可进行修改 #运算符 a = ['*' '-' '/' '=' '>' '<' '>=' '=' '<=' ' ' '<>'] #界符 b = ['(' ')' '"' ';' '!'] #关键字 c = ['long' 'float' 'static' 'char' 'short' 'switch' 'int' 'const' 'if' 'then' 'else' 'for' 'while' 'break'] def GUI(): #GUI的实现 root = Tk() root.title("编译原理课程设计") root.geometry("350x180 500 300") lb = Label(root text="请输入程序文件的绝对地址:") lb.grid(row=0 column=0) entry = Entry(root) entry.grid(row=0 column=1) btn = Button(root text="开始分析" fg='black' relief="raised" bd="9") btn.grid(row=1 column=1) btn.bind("<Button-1>" lambda x: xiancheng(entry)) root.mainloop() #判断是否字符 def IsLetter(Char): if ((Char >= 'a' and Char <= 'z') or (Char >= 'A' and Char <= 'Z')): return True else: return False #判断是否是数字 def IsDigit(Char): if (Char <= '9' and Char >= '0'): return True else: return False #判断是否是空格 def IsSpace(Char): if (Char == ' '): return True else: return False #词法分析的核心算法,将文件中代码按关键字,界符,运算符等进行分离,并把结果以列表形式返回 def fenli(List): ResultList = [] for String in List: Letter = '' letter = '' index = 0 for Char in String: if (index < len(String) - 1): index = 1 if (IsLetter(Char) or IsDigit(Char)): if (IsLetter(String[index]) or IsDigit(String[index])): Letter = Char elif (IsSpace(String[index]) or (String[index] in b) or ( String[index] in a) or (String[index:index 2] in a)): Letter = Char ResultList.append(Letter) Letter = '' elif Char in b: ResultList.append(Char) elif Char in a: letter = Char if (String[index] in a): letter = String[index] ResultList.append(letter) letter = '' else: ResultList.append(letter) letter = '' elif IsSpace(Char): pass return ResultList #对fenli()方法中返回的列表进行遍历判断,并输出所述类别 def panduan(char): for i in char: if i in a: print("<运算符 " i ">") elif i in b: print("<界符 " i ">") elif i in c: print("<关键字 " i ">") elif i.isdigit(): print("<常数 " i ">") elif i.isalnum(): print("<标识符 " i ">") else: print("语法错误:" i "不是合法字符!!!") def center(entry): p=[] #打开代码文件 with open(entry.get() 'r') as f: #按行进行读取 m=f.readlines() #按行进行遍历 for i in m: #消除每行两边的空格 n=i.strip() #追加到预定义列表中 p.append(n) #代码的所有内容传给fenli()方法进行分离 y=fenli(p) panduan(y) def xiancheng(entry): # 创建一个线程 t = threading.Thread( target=center args=(entry )) # 设置守护线程,主线程退出不用等待子线程完成 t.setDaemon(True) # 开始 t.start() if __name__=="__main__": GUI()

运行效果图:

python写词法分析器(编译程序中的词法分析器)(1)

图1.运行效果

输出结果截图:

python写词法分析器(编译程序中的词法分析器)(2)

图2.分析结果


以上就是WBB对词法分析器的设计,如果有帮助到各位博友记的点赞加关注吧!!!

猜您喜欢: