【编译原理】LL(1)文法分析器 Python实现 带界面(wxPython)

    最近正在学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),
    
  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值