解析JavaScript并跟踪所有变量及其值

时间:2015-11-23 03:00:05

标签: javascript angularjs node.js parsing electron

那天晚上我正在看Bret Victor's talk "Inventing on Principle"并决定尝试构建他演示的实时JavaScript编辑器。当他实现二进制搜索时,你可以在18:05看到它。

看起来他没有发布这样的编辑器,但不管怎么说,我认为我可以学到很多像这样的编辑器。

这是我到目前为止所拥有的

nasherai

目前可以做什么:

  • 跟踪变量及其值(如果指定为文字)
  • 将它们打印在右侧的同一行
  • 显示解析错误

我正在使用ElectronAngular构建应用,因此它是OSX的桌面应用,但是用JavaScript和HTML编写。

对于解析,我正在使用Acorn。到目前为止,它是一个非常棒的解析器,但在解析后实际运行代码真的很难。仅允许var x = 1这样的文字作业是可行的,但是一旦你尝试做一些像var x = 1 + 2这样简单的事情,事情变得非常复杂,这是由于Acorn如何构造解析结果。

我不想仅仅eval整个事情,因为它可能是危险的,并且可能有更好的方法来做到这一点。

理想情况下,我可以找到一种安全的方法来评估左边的代码并以某种方式跟踪所有变量。不幸的是,我的研究表明在JavaScript中无法访问私有变量,所以我希望我能依靠开发人员的聪明才智帮助我解决这个问题。任何关于如何更好/更容易做到这一点的提示将非常感谢。

如果您需要,我的代码库位于:https://github.com/dchacke/nasherai

1 个答案:

答案 0 :(得分:1)

尝试使用sandbox来安全评估字符串。

var s = new Sandbox()
s.run( '1 + 1 + " apples"', function( output ) {
  // output.result == "2 apples"
})