MoonBit月兔编程语言 现代编程思想 第十一课 案例:语法解析器与Tagless Final
现代编程思想 案例:语法解析器 Hongbo Zhang 1 语法解析器 案例⽬标 解析基于⾃然数的数学表达式: "(1+ 5) * 7 / 2" 转化为单词列表 LParen Value(1) Plus Value(5) Multiply Value(7) Divide Value(2) 转化为抽象语法树 Division(Multiply(Add(Value(1), Value(5)) Value(5)), Value(7)), Value(2)) 计算最终结果:21 语法分析 对输⼊⽂本进⾏分析并确定其语法结构 通常包含词法分析和语法分析 本节课均利⽤语法解析器组合⼦(parser combinator)为例 2 词法分析 将输⼊分割为单词 输⼊:字符串/字节块 输出:单词流 例如: "12 +678" -> [ Value(12), Plus, Value(678) Token { 2. Value(Int); LParen; RParen; Plus; Minus; Multiply; Divide 3. } derive(Debug) 5 解析器组合⼦ 构造可组合的解析器 1. // V 代表解析成功后获得的值 2. // Lexer[V] == (String) -> Option[(V, String)] 3. type Lexer[V] (String)0 码力 | 25 页 | 400.29 KB | 1 年前3Python 标准库参考指南 3.6.15
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457 14.2 configparser —配置文件解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 14.3 netrc —netrc 文件处理 . . . . . . . . . . . . . . 557 16.4 argparse —命令行选项、参数和子命令解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . 565 16.5 getopt —C 风格的命令行选项解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1003 20.2 html.parser —简单的 HTML 和 XHTML 解析器 . . . . . . . . . . . . . . . . . . . . . . . . 1004 20.3 html.entities —HTML 一般实体的定义 . . . . . .0 码力 | 1886 页 | 8.95 MB | 9 月前3Python 标准库参考指南 3.6.15
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457 14.2 configparser —配置文件解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 14.3 netrc —netrc 文件处理 . . . . . . . . . . . . . . 557 16.4 argparse —命令行选项、参数和子命令解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . 565 16.5 getopt —C 风格的命令行选项解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1003 20.2 html.parser —简单的 HTML 和 XHTML 解析器 . . . . . . . . . . . . . . . . . . . . . . . . 1004 20.3 html.entities —HTML 一般实体的定义 . . . . . .0 码力 | 1886 页 | 8.95 MB | 9 月前3Python 标准库参考指南 3.8.20
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505 14.2 configparser --- 配置文件解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 14.3 netrc --- netrc 文件处理 . . . . . . . . . . . 612 16.4 argparse --- 命令行选项、参数和子命令解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . 621 16.5 getopt --- C 风格的命令行选项解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1113 20.2 html.parser --- 简单的 HTML 和 XHTML 解析器 . . . . . . . . . . . . . . . . . . . . . . . . 1114 20.3 html.entities --- HTML 一般实体的定义 . . . .0 码力 | 2052 页 | 9.74 MB | 9 月前3Python 标准库参考指南 3.8.20
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 14.2 configparser --- 配置文件解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477 14.3 netrc --- netrc 文件处理 . . . . . . . . . . . . . . 570 16.4 argparse --- 命令行选项、参数和子命令解析器 . . . . . . . . . . . . . . . . . . . . . . . . 579 16.5 getopt --- C 风格的命令行选项解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1039 20.2 html.parser --- 简单的 HTML 和 XHTML 解析器 . . . . . . . . . . . . . . . . . . . . . . 1040 20.3 html.entities --- HTML 一般实体的定义 . . . . . .0 码力 | 1927 页 | 9.69 MB | 9 月前3Python 标准库参考指南 3.8.20
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 14.2 configparser --- 配置文件解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477 14.3 netrc --- netrc 文件处理 . . . . . . . . . . . . . . 570 16.4 argparse --- 命令行选项、参数和子命令解析器 . . . . . . . . . . . . . . . . . . . . . . . . 579 16.5 getopt --- C 风格的命令行选项解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1039 20.2 html.parser --- 简单的 HTML 和 XHTML 解析器 . . . . . . . . . . . . . . . . . . . . . . 1040 20.3 html.entities --- HTML 一般实体的定义 . . . . . .0 码力 | 1927 页 | 9.69 MB | 9 月前3Python 标准库参考指南 3.7.13
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 14.2 configparser --- 配置文件解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 14.3 netrc --- netrc 文件处理 . . . . . . . . . . . 570 16.4 argparse --- 命令行选项、参数和子命令解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . 579 16.5 getopt --- C 风格的命令行选项解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1051 21.2 html.parser --- 简单的 HTML 和 XHTML 解析器 . . . . . . . . . . . . . . . . . . . . . . . . 1052 21.3 html.entities --- HTML 一般实体的定义 . . . .0 码力 | 1961 页 | 9.14 MB | 9 月前3Python 标准库参考指南 3.9.20
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531 14.2 configparser --- 配置文件解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532 14.2.1 快速起步 . . . . . . . . 映射协议访问 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537 14.2.7 定制解析器行为 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538 14.2.8 旧式 API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639 16.4 argparse --- 命令行选项、参数和子命令解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . 640 16.4.1 示例 . . . . . . . . . . . . . . . .0 码力 | 2146 页 | 10.17 MB | 9 月前3Python 标准库参考指南 3.10.15
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547 14.2 configparser --- 配置文件解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548 14.2.1 快速起步 . . . . . . . . 映射协议访问 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553 14.2.7 定制解析器行为 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554 14.2.8 旧式 API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660 16.4 argparse --- 命令行选项、参数和子命令解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . 661 16.4.1 示例 . . . . . . . . . . . . . . . .0 码力 | 2207 页 | 10.45 MB | 9 月前3Python 标准库参考指南 3.7.13
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 14.2 configparser --- 配置文件解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 14.3 netrc --- netrc 文件处理 . . . . . . . . . . . . . . 537 16.4 argparse --- 命令行选项、参数和子命令解析器 . . . . . . . . . . . . . . . . . . . . . . . . 545 16.5 getopt --- C 风格的命令行选项解析器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993 21.2 html.parser --- 简单的 HTML 和 XHTML 解析器 . . . . . . . . . . . . . . . . . . . . . . 994 21.3 html.entities --- HTML 一般实体的定义 . . . . . . .0 码力 | 1846 页 | 9.09 MB | 9 月前3
共 195 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20