最近正在学Python,一直看代码总是没有机会上手,恰逢编译原理课程实验,之前一直用C++写,想着用Python来实现,顺便熟悉这门新的语言,但编程过程中发现许多地方还是没有摆脱C++的编程思想。
算法方面不必多说,主要分为构建FIRST集、FOLLOW集;构建分析表;总控程序三部分。
界面用wxPython编写,wxPython也是第一次用,搞得我够呛。
(LL1分析器界面预览)
下面给出Python代码,关键之处已给出注释。欢迎批评指正。
import wx
import wx.xrc
#------全局变量------#
FIRST = dict() # FIRST集
FOLLOW = dict() # FOLLOW集
LAN = dict() # 文法
Table = dict() # 分析表
VT = set() # 终结符
ProcessList = dict()
class MyFrame1(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=u"LL(1)分析器 By Jack", pos=wx.DefaultPosition,
size=wx.Size(460, 327), style=wx.CAPTION|wx.CLOSE_BOX|wx.MINIMIZE_BOX|wx.SYSTEM_MENU|wx.TAB_TRAVERSAL, name=u"Main")
self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize)
self.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNTEXT))
self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOW))
bSizer1 = wx.BoxSizer(wx.VERTICAL)
fgSizer2 = wx.FlexGridSizer(0, 2, 0, 0)
fgSizer2.SetFlexibleDirection(wx.BOTH)
fgSizer2.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED)
self.m_staticText3 = wx.StaticText(self, wx.ID_ANY, u"请选择文法文件的位置", wx.DefaultPosition, wx.DefaultSize, 0)
self.m_staticText3.Wrap(-1)
self.m_staticText3.SetFont(wx.Font(wx.NORMAL_FONT.GetPointSize(), 70, 90, 90, False, wx.EmptyString))
fgSizer2.Add(self.m_staticText3, 0, wx.ALL, 5)
self.m_filePicker1 = wx.FilePickerCtrl(self, wx.ID_ANY, wx.EmptyString, u"Select a file", u"*.*",
wx.DefaultPosition, wx.Size(300, -1),