从头开始构建 Parser

Building a Parser from scratch

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

 学习内容

  • 递归下降解析器
  • 为完整的编程语言构建解析器
  •  自上而下的解析
  • 抽象语法树 (AST)
  •  不同的 AST 格式
  •  左递归
  •  Tokenizer 和 Token
  • 正则表达式规范

 要求

  • 基本数据结构和算法

 描述

解析句法分析是设计和实现编译器的最初阶段之一。精心设计的编程语言语法是用户更喜欢并选择您的语言的重要动力。

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

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

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

在 Building a Parser from scratch 课程中,我们深入探讨了纯粹的实际实现,构建和学习了解析器的不同方面。

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

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

这门课适合谁?

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

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

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

什么用于实施?

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

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

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

这个类的具体内容是什么?

这些讲座的主要特点是:

  • 简洁明了。每场讲座都是自给自足的、简洁的,并描述与主题直接相关的信息,不会分散对不相关材料或演讲的注意力。

  • 动画演示实时编辑笔记相结合。这使得理解主题更容易,并展示了对象结构是如何(以及何时)连接的。静态幻灯片根本不适用于复杂的内容。

  • 带有作业的端到端实时编码会话。完整的源代码,从零开始,一直到最后,都在课堂的视频讲座中展示

课程内容

课程分为四个部分,共 18 个讲座,每个讲座中有许多子主题。以下是目录和课程

第 1 部分:基本表达式和 Tokenizer

在这部分,我们将介绍基本表达式,例如 Numbers 和 Strings,并构建 Tokenizer 模块,使用正则表达式进行操作。

第 2 部分:程序结构

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

第 3 部分:控制流和功能

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

第 4 部分:面向对象的编程

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

本课程适合谁:

  •  任何好奇的工程师
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。