GameMale
登陆 / 注册 搜索

USERCENTER

SEARCHSITE

搜索

查看: 1567|回复: 47
收起左侧

[技术交流] 【自制】【Python】【编译原理】词法分析器和语法分析器

[复制链接] |关注本帖

邪恶的面具海盗弯钩神秘的红茶冒险用绷带魔法石碑箭术卷轴质量效应三部曲没有梦想的咸鱼

     楼主| 白冥 发表于 2024-11-14 21:14:16 | 显示全部楼层 |阅读模式 <
    这段代码是一个完整的**词法分析器(Lexer)**和**语法分析器(Parser)**的实现,分为以下几个关键部分:

    ### 1. **Token 类**
    - `Token`类用于表示一个词法单元,包括`type`和`value`两个属性,用于标识词法单元的类型和其原始字符串。

    ### 2. **Lexer 类**
    - `Lexer`类用于对输入代码进行词法分析,将其分解为一系列词法单元(tokens)。
    - `token_regex_patterns`属性定义了多种正则表达式模式,每个模式都对应一种词法单元类型,例如注释、字符串、布尔值、关键字、操作符等。
    - `tokenize`方法是词法分析的核心。它通过匹配正则表达式模式来生成词法单元列表。
      - 每次匹配一个词法单元后,将其存入`token_list`,并移除已匹配的源代码部分,直到源代码处理完毕。
      - `_unescape_string`方法用于处理字符串中的转义字符,如`"\n"`、`"\t"`等。

    ### 3. **ASTNode 类**
    - `ASTNode`类表示一个语法树节点,包括节点符号(symbol)和子节点(children)。
    - 提供了`insert_child`方法,用于向节点添加子节点,以及`print_ast`方法递归打印语法树结构。

    ### 4. **Parser 类**
    - `Parser`类用于根据定义的上下文无关文法将词法单元序列解析为语法树(AST)。
    - `grammar_production`属性定义了语法产生式规则,表示从顶层结构(如`program`)到基本结构的递归展开。
    - `mutually_exclusive`属性用于标识一些可以互斥的结构(例如不同类型的表达式或语句)。
    - `first_set`和`follow_set`用来存储符号的First集和Follow集,辅助生成解析表。
    - `parse_table`是预测解析表,用于决定在语法分析过程中,遇到某个词法单元时应应用的语法规则。
      
    #### 核心解析方法:
    - `parse`方法是解析器的核心,它使用LL(1)解析算法,根据`parse_table`从`token_list`中构建语法树。
      - `stack`维护语法分析中的栈,初始时为`program`,即整个程序的根节点。
      - `node_stack`用于维护AST节点,递归插入符合文法的子节点,生成语法树。
      - `parse_table`指导栈在遇到特定的`top`和`current_token`时,决定展开哪一个文法产生式。
    - `_get_first_set`和`_get_follow_set`方法用于构建First集和Follow集。
    - `_get_parse_table`使用First集和Follow集生成解析表。

    ### 5. **错误处理**
    - `Lexer`类的`tokenize`方法在无法匹配任何模式时抛出异常,指出无法解析的字符。
    - `Parser`类的`parse`方法在遇到无法处理的词法单元或未定义的解析表条目时也会抛出异常。

    ### 总结
    该代码实现了一个从词法分析到语法解析的完整流程,将源代码解析为语法树。







    非常普通的代码,学过一些编译原理的计科生都会写

    由于源代码是用python写的,运行会很慢
    主要是针对JavaScript写的分析器,不过非常简陋
    按理说应该再写一个语义分析器的(编译器的前端:1、词法分析器->2、语法分析器->3、语义分析器),但是代码已经太长了,已经花了我一周时间来测试,抽不出时间来接着写








    大家问我为什么这几星期怎么不在?因为缺钱了,所以去接单写代码去了







    关于小说的问题,我会继续写的,我不可能要断更


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x

    评分

    参与人数 2血液 +8 追随 +2 堕落 +1 收起 理由
    owen135 + 3 + 1 + 1 神马都是浮云
    星之子 + 5 + 1 (*/ω\*)

    查看全部评分

    回复

    使用道具 举报

    御医神兔

      不在彩虹脚下 发表于 2024-11-14 21:24:31 | 显示全部楼层 <
      看不懂但支持,楼主加油哇
        收起(2)
      回复

      举报

      幽灵竹筒金钱马车骑士遗盔我的冶金打火机成年独角兽苏醒的格罗姆落雪勇者与龙的传说-封面初入动物城

        BDonde 发表于 2024-11-14 21:30:42 | 显示全部楼层 <
        回复

        举报

        没有梦想的咸鱼『搓粉团珠』『不败之花』永亘环小狮欢舞诺曼底号和你一起飞行的皮卡丘『落樱缤纷』枕套幽灵诺克提斯·路西斯·伽拉姆

          2674820557 发表于 2024-11-14 21:38:20 | 显示全部楼层 <
          回复

          举报

          最终幻想XIV最终幻想XVI赛博朋克2077丹妮莉丝·坦格利安希尔瓦娜斯·风行者官复原职塞巴斯蒂安·斯坦杰森‧斯坦森荒野大镖客:救赎 II

            tuxonstar 发表于 2024-11-14 21:41:24 | 显示全部楼层 <
            回复

            举报

            没有梦想的咸鱼杰西·麦克雷实现梦想岛田半藏凯登‧阿兰科丹妮莉丝·坦格利安追忆享受美食的小伯人鱼之泪

              找乐子企鹅仔 发表于 2024-11-14 21:42:14 | 显示全部楼层 <
              回复

              举报

              永亘环小狮欢舞『搓粉团珠』黄粱一梦【新春限定】果体 隆死灵之书永远的克叔業火死鬥实现梦想官复原职

                娱乐法师火布偶 发表于 2024-11-14 21:45:02 | 显示全部楼层 <
                在编译原理课上面听过,但是早就忘了,后来确实也用不到这些知识
                回复

                举报

                我的天使天灾骑士和你一起飞行的皮卡丘吃饱金币的Doge官复原职实现梦想冰原史莱姆牧场丹妮莉丝·坦格利安不朽之恋

                  2297988 发表于 2024-11-14 21:58:58 | 显示全部楼层 <
                  回复

                  举报

                  我的天使GM吸血伯爵吃饱金币的Doge阿拉喵?神灯苏格兰圆脸胖鸡小小舞台永浴爱河

                    毛茸茸兽兽 发表于 2024-11-14 22:03:03 | 显示全部楼层 <
                    回复

                    举报

                    没有梦想的咸鱼超人塞巴斯蒂安·斯坦丹妮莉丝·坦格利安希尔瓦娜斯·风行者骑士遗盔上古卷轴V:天际龙腾世纪:审判

                      396149358 发表于 2024-11-14 22:09:30 | 显示全部楼层 <
                      回复

                      举报

                      枕套幽灵『不败之花』组成家庭吃饱金币的Doge夏日柯基诺克提斯·路西斯·伽拉姆未来的黎明不朽之恋史莱姆牧场男巫之歌

                        phillipé 发表于 2024-11-14 22:10:57 | 显示全部楼层 <
                        回复

                        举报

                        实现梦想業火死鬥魔法不朽·传奇不熄卡洛斯·奥利维拉泰比里厄斯十年一梦官复原职男巫之歌永浴爱河虚空之海的鲸

                          Burry 发表于 2024-11-14 22:22:14 | 显示全部楼层 <
                          回复

                          举报

                          这是怎么辉石呢吃了一半的面包死亡化身BIG BOSS实现梦想官复原职召唤兽拉姆寶可夢 Pokémon双重身份擎天柱(Peterbilt389)

                            糖醋鲤鱼 发表于 2024-11-14 22:26:06 | 显示全部楼层 <
                            回复

                            举报

                            史莱哲林史莱姆牧场吸血魔蝠萨菲罗斯苏醒的格罗姆圣甲虫秘典可爱黑猫诺克提斯·路西斯·伽拉姆风暴磁场之鳄雷夜嘯聲

                              圣卫幻梦 发表于 2024-11-14 22:32:25 | 显示全部楼层 <
                              感觉在大学的python a课程里面学到过,不过都不记得的,现在只会chat4直接写需求了,对于审计来说完全够用了
                              回复

                              举报

                              安德鲁·库珀夏日柯基【新春限定】果体 隆我的冶金打火机极·龙の意闪耀的魔仙棒『冰雕马拉橇』【一阶】棱镜奥利弗‧奎恩卡斯迪奥

                                2337891498 发表于 2024-11-14 22:33:42 | 显示全部楼层 <
                                回复

                                举报

                                猩红魔鹫未散的宴席宵眼定死极·龙の意【圣诞限定】心心念念小雪人不朽之恋组成家庭我的天使男巫之歌

                                  亚洛斯 发表于 2024-11-14 22:33:59 | 显示全部楼层 <
                                  回复

                                  举报

                                  岛田源氏岛田半藏希德法斯·特拉蒙康纳/Connor亚当‧简森幻象威尔卡斯克里斯·埃文斯

                                    枫糖 发表于 2024-11-14 22:35:28 | 显示全部楼层 <
                                    回复

                                    举报

                                    永亘环『搓粉团珠』阿拉贡·王者归来『冰雕马拉橇』杰森‧斯坦森史莱姆牧场男巫之歌吃饱金币的Doge和你一起飞行的皮卡丘剑指撒冷

                                      白鸟探 发表于 2024-11-14 22:49:25 | 显示全部楼层 <
                                      回复

                                      举报

                                      龙腾世纪:审判『逆境中的幸运女神』赛博朋克2077无瑕的回忆贝优妮塔星芒戒指日荒戒指月陨戒指剑指撒冷质量效应三部曲

                                        饥渴难耐的G 发表于 2024-11-14 23:16:15 | 显示全部楼层 <
                                        回复

                                        举报

                                        『搓粉团珠』【新春限定】果体 隆『落樱缤纷』里昂‧S‧甘乃迪闪耀的魔仙棒岛田源氏杰西·麦克雷超人巴基

                                          boshen 发表于 2024-11-14 23:28:02 | 显示全部楼层 <
                                          回复

                                          举报

                                          您需要登录后才可以回帖 登录 | 立即注册

                                          本版积分规则

                                          文字版|手机版|小黑屋|GameMale

                                          GMT+8, 2025-2-25 00:32 , Processed in 0.158429 second(s), 146 queries , Redis On.

                                          Copyright © 2013-2025 GameMale

                                          All Rights Reserved.

                                          快速回复 返回列表