编译器原理与实现: 从头开始构建解析器 | Building a Parser from scratch

Building a Parser from scratch

一种编程语言的递归下降解析器。

你将会学到的

  • 递归下降解析器
  • 为完整的编程语言构建解析器
  • 自顶向下解析
  • 抽象语法树 (AST)
  • 不同的 AST 格式
  • 左递归
  • 分词器和令牌
  • 正则表达式规范

要求

  • 基本数据结构和算法

说明

解析句法分析是设计和实现编译器的首要阶段之一。精心设计的编程语言语法是用户偏爱并准确选择您的语言的一大动力。

注意:这是一个关于构建手动递归下降解析器的实用课程。如果您对解析理论和自动化算法感兴趣,您还可以考虑[解析算法]课程。

递归下降解析器是一组在许多生产编程语言的实践中广泛使用的解析器。与自动解析算法相比,手动实现允许对解析过程进行完全控制,并处理复杂的构造,这在自动解析器中可能是不可能的。

此外,从头开始实现一个完整的手动解析器可以从内部理解和查看这个过程,揭开内部结构的神秘面纱,并将构建解析器变成一项有趣的工程任务。

从头开始构建解析器课程中,我们深入探讨了纯粹的实际实现,构建和学习解析器的不同方面。

在本课程中,您将学习递归下降解析的概念,了解什么是Tokenizer以及它如何与Parser模块配合,了解什么是抽象语法树 (AST),以及如何拥有这些 AST 的不同格式,什么是“前瞻”预测解析,并最终为类似于 Java 或 JavaScript 的完整编程语言构建解析器。

实现解析器还可以使您对其他编程语言的实际使用更加专业。

这门课是为谁准备的?​

本课程适用于任何好奇的工程师,他们希望获得构建复杂系统的技能(为编程语言构建解析器是一项非常高级的工程任务!),并获得构建此类系统的可转移知识。

如果您对编译器、解释器和源代码转换工具特别感兴趣,那么这门课也适合您。

这门课的先决条件是基本的数据结构和算法:树、列表、遍历和正则表达式。

执行用什么?​

由于我们构建了一种语法与 JavaScript 或 Java 非常相似的语言,因此我们专门使用 JavaScript——其优雅的多范式结构结合了函数式编程、基于类和基于原型的 OOP 非常适合这种情况。

许多工程师都熟悉 JavaScript,因此立即开始编码应该更容易。但是,我们不使用非常特定于 JS 的结构,因此解析器的实现可以很容易地转换为您选择的任何其他语言。

注意:我们希望我们的学生自己真正遵循、理解和实现解析器的每个细节,而不是仅仅从最终解决方案中复制粘贴。该语言的完整源代码可在视频讲座中获得,展示和指导如何构建特定模块。

这门课有什么特别之处?​

这些讲座的主要特点是:

  • 简明扼要。每个讲座都是自给自足的,简洁的,并描述与主题直接相关的信息,而不是分散在不相关的材料或谈话上。
  • 动画演示实时编辑笔记相结合。这使得对主题的理解更容易,并显示对象结构是如何(以及何时)连接的。静态幻灯片根本不适用于复杂的内容。
  • 带作业的端到端实时编码会话。完整的源代码,从头开始,一直到最后都在课程的视频讲座中呈现

​课程内容是什么

课程分为四个部分,共18节课,每节课设多个子课题。以下是目录和课程表

第 1 部分:基本表达式和分词器

在这一部分中,我们描述了基本的表达式,例如数字和字符串,并构建了 Tokenizer 模块,使用正则表达式进行操作。​

第 2 部分:程序结构​

在这一部分中,我们将讨论程序结构,例如语句和语句列表、块和递归产生式规则。此外,我们讨论了不同的 AST 格式并开始构建更复杂的表达式。​

第 3 部分:控制流程和功能​

在这一部分中,我们实现了变量、赋值、使用运算符优先级,并介绍了函数抽象。此外,我们还定义了控制结构,例如 If 语句和迭代循环。

第 4 部分:面向对象编程

课程的最后一部分我们实现类和对象,讨论属性和数组访问。此外,我们实现了通用函数和方法调用,并构建了最终的解析器可执行文件。

此课程面向哪些人:

  • 任何好奇的工程师
声明:本站所有资源、素材等全部来源于互联网,赞助VIP仅用于对IT资源服务器带宽等费用支出做支持,从本站下载资源,说明你已同意本条款。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
TheItzy » 编译器原理与实现: 从头开始构建解析器 | Building a Parser from scratch