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()
运行效果图:
图1.运行效果
输出结果截图:
图2.分析结果
以上就是WBB对词法分析器的设计,如果有帮助到各位博友记的点赞加关注吧!!!