esprima 的解析器怎么理解?

发布于 2022-09-01 06:04:04 字数 233 浏览 27 评论 0

代码 https://github.com/jquery/esprima/blob/master/esprima.js#L4620
这种解析的手法叫做什么?
解析过程中有什么难点或者说缺点?
JavaScript 是否都是用这种手法解析的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

〃温暖了心ぐ 2022-09-08 06:04:04

大致扫了一下好像没啥特殊的东西,基本就是普通的手写编译,大概有几个过程

lex

输入是代码文本a = 3 + b;

输出是一串token,比如

<ID: a>
<OP: =>
<NumberLiteral: 3>
<OP: +>
<ID: b>
<SYM: ;>

parse

拿着lex输出的那串token规约为所谓的AST(抽象语法树)

比如

赋值BEGIN
  左值:变量a
  右值:
    算数表达式BEGIN
        操作符:+
        左值:常数3
        右值:变量b
    算数表达式END
赋值END

esprima的话应该是到此为止,如果是所谓编译器的话,接着就会把这串AST转换为目标代码了

注意点

如果你觉得上面我说的不是废话,那很可能是因为你没学过或者忘光了编译原理,那么esprima这种lex和parse同时进行而且都是纯手写的可能看起来会相当吃力。lex和parse两个独立的过程都涉及各种状态机,文法,什么什么的一堆堆的东西,混在一起如果没有相关经验的话我觉得有困难很正常,建议从编译原理看起

任何编译器解释器都逃不开这些基础的编译原理,只不过后来会有越来越(kan)牛(bu)逼(dong)的优化和演变而已。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文