【问题标题】:How do I access the node.js parser code?如何访问 node.js 解析器代码?
【发布时间】:2015-09-18 14:05:46
【问题描述】:

目标:创建一个更小的 node.js 版本,最终目标是创建一种具有 node (JS) 的一些特性的脚本语言,并添加一些我自己的。

当然,我知道我需要查看 node.js 源代码,但我在 nodejs.org 上的 node.js 源代码中找不到任何解析器代码。 node.js 是否有自己的解析器(可能使用 yacc 或类似工具),因为 node.js 主要是用 C、C++ 编写的?如果是这样,我在哪里可以访问它?还是回复V8引擎源码解析JS?我相信 node.js 语言本身并不严格兼容 V8 Javascript。或者是吗?由于 V8 将 JS 编译为本地机器码,因此它肯定在某个地方有一个完整的解析器/翻译器。

简而言之,有人可以指出解析器代码,让我从 node.js 解析器中剔除一些不需要的语法规则吗?还是已经有一些开源项目已经解决了这个问题?

【问题讨论】:

  • 您可能不会创建更小的 node.js。它使用 V8 来处理 JS。 Node 提供了处理套接字连接等所需的 http 解析器和其他恶作剧。有类似的项目,例如nw.jsphantomJS
  • 您的评论很有帮助,但我相信其他“恶作剧”模块不需要额外的解析支持,因为它们只是返回 JS 对象。但是有些语句,例如“require”,我认为 V8 解析器不会涵盖这些语句,因为它们不是 JS 语句。为什么你说我不会创建一个更小的node.js?至少在理论上,只需从解析器中剥离一些语法规则(或相关代码)即可完成。不是吗?
  • 并非如此。如果您想更改语法规则,您将更改 V8,而不是节点。 require 是一个使用 JS 语法的节点模块,它将一些 c++ 代码与 V8 粘合在一起。我不知道你为什么想要一个“更小”的节点(我假设你想要更小的可执行文件,nw 的大小约为 70mb,这对于它的功能来说非常小),但杀死真正有用的模块或改变语法并不意味着你最终会得到一个更小的文件/项目。不管怎样,祝你项目顺利。
  • 我想创建一种从 node 派生的更小、更具体的语言(DSL,如果你愿意的话),而不是更小的可执行文件。
  • 为什么不创建类似 CoffeeScript 或 TypeScript 的东西来创建转译器呢?这似乎是一条更容易的路线?

标签: javascript node.js parsing compiler-construction


【解决方案1】:

如果您希望创建一种新的语法/语言,仍然利用节点的机制来执行 I/O 等,那么您最好的选择可能是考虑创建一个转译器(例如,像 CoffeeScript 或 TypeScript 所做的那样) .

这样做比尝试破解 v8 的源代码来更改 JavaScript 语言实现本身要容易得多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-19
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多