前言:
目前你们对“词法分析器识别程序段输出种别码”都比较注意,姐妹们都想要分析一些“词法分析器识别程序段输出种别码”的相关内容。那么小编同时在网络上搜集了一些有关“词法分析器识别程序段输出种别码””的相关内容,希望小伙伴们能喜欢,咱们一起来了解一下吧!这个学期选了编译原理这门课,还附带一个课程设计,经过几天的鏖战,终于算是告一段落了,下面是我对词法分析器的一些设计,希望可以帮到和我有相同遭遇的博友们……
代码实现:
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()
运行效果图:
输出结果截图:
以上就是WBB对词法分析器的设计,如果有帮助到各位博友记的点赞加关注吧!!!
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #词法分析器识别程序段输出种别码 #词法分析主要算法 #编译原理预测分析算法 #c语言实现语法分析器 #c语言词法分析器代码