Skip to content

Commit f208b56

Browse files
committed
add lexer learning in compiler_principle notes
1 parent bcb85bb commit f208b56

14 files changed

+71
-0
lines changed

png/compiler_principle/image-1.png

484 KB
Loading

png/compiler_principle/image-10.png

840 KB
Loading

png/compiler_principle/image-11.png

732 KB
Loading

png/compiler_principle/image-2.png

597 KB
Loading

png/compiler_principle/image-3.png

647 KB
Loading

png/compiler_principle/image-4.png

557 KB
Loading

png/compiler_principle/image-5.png

1.09 MB
Loading

png/compiler_principle/image-6.png

517 KB
Loading

png/compiler_principle/image-7.png

721 KB
Loading

png/compiler_principle/image-8.png

734 KB
Loading

png/compiler_principle/image-9.png

1000 KB
Loading

png/compiler_principle/image.png

793 KB
Loading

png/image_llvm_value_3.png

186 KB
Loading

source/llvm/compiler_principle.md

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# 编译原理笔记
2+
- [编译原理_中科大(华保健)](https://www.bilibili.com/video/BV16h411X7JY?p=1&vd_source=fcb5a5bbba15e874747108473094add4)
3+
4+
## 词法分析
5+
6+
字符流-->词法分析器-->记号流
7+
手工构造:转移图算法(关键字哈希表算法,o(1))
8+
自动生成:正则表达式
9+
10+
参考文章:
11+
https://juejin.cn/post/7203285698073116727
12+
https://www.tr0y.wang/2021/04/01/%E7%BC%96%E8%AF%91%E5%8E%9F%E7%90%86%EF%BC%88%E4%B8%80%EF%BC%89%EF%BC%9A%E8%AF%8D%E6%B3%95%E5%88%86%E6%9E%90/
13+
14+
### 正则表达式
15+
16+
17+
![alt text](../../png/compiler_principle/image.png)
18+
19+
基本规则,归纳规则
20+
21+
正则表达式-->flex-->有限状态自动机
22+
23+
![alt text](../../png/compiler_principle/image-1.png)
24+
![alt text](../../png/compiler_principle/image-2.png)
25+
26+
给定一个字符串,从起始状态,经过转移函数,最终都可以走到终结状态-->“接受”
27+
28+
- 确定有限状态自动机(DFA):最多只有一个状态可以转移
29+
- 非确定有限状态自动机(NFA)
30+
31+
32+
RE-->NFA-->DFA-->词法分析器的代码表示
33+
34+
### Tompson算法:RE-->NFA
35+
![alt text](../../png/compiler_principle/image-3.png)
36+
![alt text](../../png/compiler_principle/image-4.png)
37+
38+
39+
### 子集构造算法:NFA-->DFA
40+
41+
![alt text](../../png/compiler_principle/image-5.png)
42+
43+
- 不动点算法,O(2^N)
44+
- 步骤:
45+
- delta(q):基于q(n-1)节点中所有n节点,求q(n)
46+
- 再求e-闭包:扩展求所有e连接的点。深度/广度算法都行,如下:
47+
![alt text](../../png/compiler_principle/image-6.png)
48+
49+
DFA最小化算法:Hopcroft算法、
50+
51+
![alt text](../../png/compiler_principle/image-7.png)
52+
53+
- 先根据非终结状态,终结状态节点划分成两个等价类
54+
- 对每个等价类中的每个节点,查看是否有转移外面的,可以继续切分
55+
56+
![alt text](../../png/compiler_principle/image-8.png)
57+
58+
### 词法分析器的代码表示:DFA的生成算法
59+
60+
- 转移表
61+
62+
![alt text](../../png/compiler_principle/image-9.png)
63+
64+
最长匹配,需要stack
65+
66+
可以匹配ifif和ifii->if
67+
![alt text](../../png/compiler_principle/image-10.png)
68+
69+
- 跳转表
70+
71+
![alt text](../../png/compiler_principle/image-11.png)

0 commit comments

Comments
 (0)