白冥 发表于 2024-11-14 21:14:16

【自制】【Python】【编译原理】词法分析器和语法分析器

这段代码是一个完整的**词法分析器(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`方法在遇到无法处理的词法单元或未定义的解析表条目时也会抛出异常。

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

static/image/hrline/5.gif
static/image/hrline/5.gif



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

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


static/image/hrline/5.gif

static/image/hrline/5.gif



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


static/image/hrline/5.gif

static/image/hrline/5.gif


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


不在彩虹脚下 发表于 2024-11-14 21:24:31

看不懂但支持,楼主加油哇https://img.gamemale.com/album/202410/17/232221fykmdblkvvst7fl4.gif

BDonde 发表于 2024-11-14 21:30:42

在泥潭甚至能够学到编译原理的知识

2674820557 发表于 2024-11-14 21:38:20

天惹,还能学python和js,泥潭神通广大

tuxonstar 发表于 2024-11-14 21:41:24

感觉好厉害,不是很能看明白

Disguiser 发表于 2024-11-14 21:42:14

我靠,泥潭真的能学到东西啊,超绝编程( ̄﹃ ̄)

娱乐法师火布偶 发表于 2024-11-14 21:45:02

在编译原理课上面听过,但是早就忘了,后来确实也用不到这些知识

2297988 发表于 2024-11-14 21:58:58

泥潭的code大佬也是越来越多了捏~
感谢分享

毛茸茸兽兽 发表于 2024-11-14 22:03:03

阿巴阿巴(´×ω×`)咱……咱只是来催更滴~不过在工作中些小说也不容易哇

396149358 发表于 2024-11-14 22:09:30

好详细的教程,感觉泥潭迟早能凑出一篇完整的基础编程教学

phillipé 发表于 2024-11-14 22:10:57

泥潭真素人才济济,我也要继续学习了!

Burry 发表于 2024-11-14 22:22:14

语法分析什么的,感觉看起来好专业的帖子。

糖醋鲤鱼 发表于 2024-11-14 22:26:06

这个看起来还挺专业的

圣卫幻梦 发表于 2024-11-14 22:32:25

感觉在大学的python a课程里面学到过,不过都不记得的,现在只会chat4直接写需求了,对于审计来说完全够用了

2337891498 发表于 2024-11-14 22:33:42

计科生表示怎么来泥潭都没逃过:Q

亚洛斯 发表于 2024-11-14 22:33:59

看着很不错的技术含量的说~可惜这些都随着大学毕业抛脑后了

枫糖 发表于 2024-11-14 22:35:28

还是要喂饱自己先的,小说等有灵感和空闲再续也好

白鸟探 发表于 2024-11-14 22:49:25

技术贴,科普帖?真是五八八门的知识都能get

饥渴难耐的G 发表于 2024-11-14 23:16:15

额,说不定以后可能会用到呢

boshen 发表于 2024-11-14 23:28:02

教教接单写代码惹,怎么才能接到单子咩,好想赚钱喵
页: [1] 2 3
查看完整版本: 【自制】【Python】【编译原理】词法分析器和语法分析器