Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

如何用JavaScript实现一门编程语言 - 前言 #7

Open
llwanghong opened this issue Apr 28, 2023 · 0 comments
Open

如何用JavaScript实现一门编程语言 - 前言 #7

llwanghong opened this issue Apr 28, 2023 · 0 comments

Comments

@llwanghong
Copy link
Owner

llwanghong commented Apr 28, 2023

之前看到一篇较完整的关于如何使用JavaScript实现一门编程语言的博文,虽然作者本人(UglifyJS作者)声称是简单的教程,但里面很多概念思考还是很值得学习,比如对continuation的讨论,yield以及reset/shift等的实现讨论等。所以尝试将全部文章译成中文,供更多对语言原理感兴趣的同学学习,翻译过程尽量保证原文风格,但限于Markdown语法的支持,后续章节一些定制化的脚本功能不能在线实时交互,原文请查看

整篇译文的目录章节如下:

前言

这是一本关于如何实现一门编程语言的教程。如果你曾经写过解释器(interpreter)或者编译器(compiler),那么本教程对你来说可能不会涉及新的知识概念。但如果你是使用正则表达式(regexps)来分析一门编程语言,还是建议你至少可以阅读解析章节。 让我们写出错误更少的代码!

本教程是按照由浅入深的编写顺序。除非你对某个主题已经非常了解,否则不推荐跳跃式阅读。如果对某些概念不能理解,随时可以参考之前的章节。同时非常期望得到你的问题和反馈!

本教程的目标受众是普通的JavaScript和NodeJS程序员。

我们将会学到什么

  • 什么是解析器(parser),如何写出一个
  • 如何写一个解释器(interpreter)
  • 为什么Continuations很重要
  • 写一个编译器(Compiler)
  • 如何把代码转化成CPS类型(continuation-passing style)
  • 一些基本的优化技巧
  • 我们实现的λanguage语言能给普通的JavaScript带来哪些新特性的示例

这期间我会讨论到为什么Lisp是一门如此伟大的语言。不过,我们实现的语言不是Lisp。除了宏(macros)功能之外,它几乎和Scheme一样强大,拥有更丰富的语法(众所周知的经典中缀表达式)。但Lisp强大之处也正是宏(macros),是其它语言不能征服的终极堡垒(除非他们叫做Lisp方言)。【是的,我知道SweetJS...,但也差了一点】

首先,让我们来创造一门编程语言吧。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant