是什么使某些事物比其他事物更容易解析?


8

我只是在阅读WebAssembly的Wikipedia页面,上面写着:“ WebAssembly是……设计成比JavaScript解析速度更快 ”,这让我开始思考,是什么使某种语言或数据格式比其他语言解析得更快,以及解析算法是什么?用过的?

Answers:


18

这个话题很复杂。您可以在Google上搜索解析器算法,并且可以获得大量详细资料。

一般来说:

  • 必须解决的歧义越少,解析过程就越快。
  • 做出决定之前必须考虑的令牌越多,它就越复杂。

例如:
当JS解析器function在以下代码中看到关键字:时function xyz(a, b) {},function关键字就模棱两可。它首先必须处理下一个标记,xyz并确定它是一个标识符,然后才能决定它是一个函数声明。

但是,如果下一个标记是a,则(我们正在处理函数文字:function(a, b) {}。这就要求解析器表现得截然不同,从而使解析器中的代码更多,从而降低执行速度。

如果针对这两个目的使用不同的关键字,就不会有歧义:

function_decl xyz(a, b, c) {}function_lit(a, b, c) {}

但是,没有人愿意用这种语言写东西。但是WebAssembly不应手工编写。这样一来,该语言就可以针对机器而不是人类进行定制。


1
这是否意味着Lisp很容易解析?
摩西

9
@Moses:是的,编写一个朴素的Lisp解析器是微不足道的,因为该语法与抽象语法树的结构是谐音的,几乎没有歧义。
Phoshi

4
另一个很好的例子是字节码,通常可以使用循环switch语句来解析,仅此而已。
whatsisname 2017年

@whatsisname实际上,这同样适用于常规大会和网络大会
marstato
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.