编译原理
6 篇文章
-
使用JavaScript语言实现迷你版本的编译器(五)-项目总结
经过前面几个章节的一步步解析、转换、生成等步骤,已经实现了一个简单的编译器。 当然并不是所有的编译器都是这样,这还只是一个 demo 项目,重点是为了让我们能快速理解编译器的基本思想。
如果接触过 babel 这个库的话,可以发现 babel 的编译流程大体上跟我们写的编译器代码很相似。
-
使用JavaScript语言实现迷你版本的编译器(四)-目标代码生成
在前三篇文章中,我们已经完成了词法分析、语法分析、构建了抽象语法树 ( AST ) 。 在这一篇中将介绍如何将 AST 转换成可以执行的 JavaScript 代码。理解这一过程对学习编译原理以及掌握编译器的工作流程至关重要。目标代码生成是编译过程的最后一步,它的任务是将前面步骤生成的抽象语法树 (AST) 转换成目标语言代码。
-
使用JavaScript语言实现迷你版本的编译器(三)-抽象语法树转换
构建编译器的一个重要环节是将一种编程语言的抽象语法树 ( AST) 转换为另一种语言的 AST。
AST 转换的主旨在于将一种编程语言的表达逻辑映射到另一种编程语言的语法规则上。 在这个章节中,我们将 Lisp 语言的抽象语法树转成 JavaScript 语言的抽象语法树。 这种转换主要是为了满足 JavaScript 语言的语法要求,这是一个转换代码的中间步骤,以确保代码在目标编程语言中具有正确的语法形式。
-
使用JavaScript语言实现迷你版本的编译器(二)-语法分析
上一篇文章主要介绍了如何将源代码转换为一系列的 tokens 。 本篇将开始讲解如何将这些 **tokens ** 转换为抽象语法树。
语法分析 ( Parsing) 是编译过程中的一个阶段, 它接受词法分析阶段生成的 tokens,并将他们组织成语法结构。 这种结构通常表示为一个树,即抽象语法树 AST (Abstract Syntax Tree)。 抽象语法树是源代码的层级表示,展示了代码的各个部分如何组合在一起。
-
使用JavaScript语言实现迷你版本的编译器(一)-词法分析
词法分析,也称作分词 ( 英文术语为 tokenizer 或者是 lexer ) , 是编译过程的第一个阶段。 它的作用是将输入的源代码字符串拆分为一系列标记 ( 英文术语是 tokens ) 。 这些 tokens 是构成编程语言的基本元素,比如数字、字符串、括号、操作符等。
在本教程中,我们将用 JavaScript 编写一个简易的编译器,处理 Lisp 风格的源代码并转换成 JavaScript 风格的源代码。 Lisp 语言使用其独特的 前缀表示法( 也称作 Polish Notation) 而著名 ,它将操作置于操作符前面 ,这样使得嵌套函数的调用表示更为自然。对于习惯了其他语言的写法的话,看到这种写法可能会有点不太适应。
-
使用JavaScript语言实现迷你版本的编译器-项目简介
最近我在 Github 上发现了一个有意思的项目 the-super-tiny-compiler。项目是使用。该项目用了不到 200 行代码,实现了一个将 Lisp 语言语句转换为 JavaScript 语言语句的编译器。尽管代码很少,但是麻雀虽小五脏俱全,包含了编译原理中的许多核心知识点。
如果你的英文过关,建议你直接阅读原项目(需要科学访问这个网站)。