找回密码
 会员注册
查看: 21|回复: 0

解释「解释解析器」

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
64454
发表于 2024-10-10 20:44:59 | 显示全部楼层 |阅读模式
解释「解释解析器」 简可 Goodme前端团队 Goodme前端团队 定期分享一些团队对前端领域的沉淀 48篇内容 2024年09月09日 08:01 浙江 解释解释解析器 希望能用这篇文章解释解析器能把解析器解释清楚,先来段绕口令醒醒神 前言 不知道大家有没有想过一个问题:"我们编写的JS代码只是一些字符串,它是怎么被机器执行的?",下面我们带着这个问题进入文章。概念 首先,我们编写的JS代码对于机器来说只是一个个字符,机器并不是一开始就认识他们。运行环境我们知道,JS可以运行在浏览器环境和node环境,这些环境都内置了JS引擎,我们接触较多的是谷歌开源的V8引擎,除此之外其他常见的引擎比如有:由 Mozilla 为 Firefox 开发的 SpiderMonkey为 Safari 浏览器提供支持的 JavaScriptCoreJavaScript定义JavaScript(JS)是一种具有函数优先特性的轻量级、解释型或者说即时编译型的编程语言语言类型从JS定义中看到,提到了解释型、即时编译型语言,其实还有一种类型叫编译型语言那什么是解析型,什么是编译型,什么是即时编译型?编译型语言在程序执行之前,需要经过编译器的编译过程,并且编译之后会直接保留机器能读懂的二进制文件,这样每次运行程序时,都可以直接运行该二进制文件,而不需要再次重新编译了。比如 C/C++、GO 等都是编译型语言。解释型语言而由解释型语言编写的程序,在每次运行时都需要通过解释器对程序进行动态解释和执行。比如 Python、JavaScript 等都属于解释型语言。即时编译型语言即时编译(JIT),也称为动态翻译或运行时编译,是一种执行计算机代码的方法,这种方法设计在程序执行过程中(在执行期)而不是在执行之前进行编译;实现 JIT 编译器的系统通常会不断地分析正在执行的代码,并确定代码中可被即时编译加速的部分,在这些部分中,由编译或重新编译带来的性能提高将超过编译该代码的开销。JIT编译是两种传统的机器代码翻译方法——提前编译和解释器的结合,它结合了两者的优点和缺点。V8执行JS代码流程我们可以看到V8 在执行过程中既有解释器Ignition,又有编译器TurboFan小结我们可以发现,不管是什么类型语言的执行第一步都是源代码到AST,进入本篇文章的重点:怎么得到AST,看图上可以得知,首先是对源代码也就是代码字符进行词法分析和语法分析。解析器词法分析词法分析是计算机科学中将字符序列转换为标记(token)序列的过程。进行词法分析的程序或者函数叫作词法分析器(lexical analyzer,简称lexer),也叫扫描器**(scanner)。语法分析在计算机科学和语言学中,语法分析(英语:syntactic analysis,也叫 parsing)是根据某种给定的形式文法对由单词序列(如英语单词序列)构成的输入文本进行分析并确定其语法结构的一种过程。一个简单的词法解析器例子伪代码字符串(add2(subtract42))第一步:词法分析生成token生成tokens过程是一个字符一个字符的往后遍历分析,处理各种场景;比如处理上面伪代码字符串中「add」 关键字的场景(代码59-71行):遍历到'a'的时候,会继续往后遍历'd',再遍历'd',直到后一个字符不满足 /[a-z]/i 条件,最后得到'add'为一个tokenfunctiontokenizer(input){letcurrent=0;lettokens=[];while(current
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 01:24 , Processed in 0.392433 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表