ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaScript解析器如何工作?

2019-11-01 13:35:26  阅读:168  来源: 互联网

标签:javascript parsing


我正在尝试了解JS是如何实际解析的.但是我的搜索要么返回一些模糊不清的“解析器/生成器”项目(我什至不知道那是什么意思),要么返回如何使用神奇的“解析”方法使用JS引擎解析JS.我不想浏览一堆代码,并尝试一生来理解(尽管我可以,但这会花费很长时间).

我想知道如何将任意JS代码字符串实际上转换为对象,函数,变量等.我还想知道将字符串转换为东西的过程和技术,并进行存储,引用,执行.

是否有任何文档/参考资料?

解决方法:

解析器可能以各种方式工作,但从根本上讲,它们首先经过标记化的阶段,然后将结果提供给编译器,如果可以的话,将其转换为程序.例如,给定:

function foo(a) {
  alert(a);
}

解析器将删除第一个字符(字母“ f”)的前导空格.它将收集字符,直到得到不属于该字符的东西,即表示令牌结尾的空白.它再次以“ foo”的“ f”开始,直到到达“(”,因此它现在有了标记“ function”和“ foo”.它知道“(”本身就是一个标记,所以为3然后获得“ a”,后跟“)”,这是另外两个要5的令牌,依此类推.

空格的唯一需要是在其他地方含糊不清的标记之间(例如,在“函数”和“ foo”之间必须有空格或另一个标记).

标记化完成后,将转到编译器,编译器将“功能”视为标识符,并将其解释为关键字“功能”.然后,它获取“ foo”,这是语言语法告诉它的标识符,即函数名称.然后,“(”表示开头的分组运算符,因此表示形式参数列表的开始,依此类推.

编译器可能一次处理一个令牌,也可能将它们分成大块抓取,或者做各种奇怪的事情来使它们运行得更快.

您还可以阅读How do C/C++ parsers work?,这提供了更多线索.或只是使用Google.

标签:javascript,parsing
来源: https://codeday.me/bug/20191101/1983989.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有