怎么写一个js解释器

1.如何使用浏览器自带的JS解释器编写多行代码

第一步,打开浏览器,随便打开一个网页,如百度首页

按F12快捷键后,在网页的右面或者下面会出现如图所示的调试窗口,

浏览器自带的console控制台有提示的功能哦,初学前端的同学一定都不熟悉js函数,可以用这个提示哦

第一个我们要做的是在控制台打印“helloworld”程序

但是当我们想连续输出两行打印语句发现在控制台里按住回车键以后是直接解释执行,根本无法连续编写两行代码

其实,只是一个技巧,但是好多人却不知道,初学前端的朋友也不知怎么搜索解决,当我们想换行的时候,按住shift键以后,再按回车,即可出现上图的效果。最后安利一个功能:当想重复输入某个语句的时候,只需要按向上的箭头就可以快速生成已经编译的语句

2.javascript解释器是什么

就是执行你的javascript代码的东东,就像你的java代码由JVM执行,javascript是由javascript解释器执行,浏览器中一般都会包含这个

每个浏览器的并不一样,一般都包含在各浏览器的内核中

浏览器内核一般包含两个引擎:页面排版引擎 和 JS引擎

IE的 使用的自己的Trident 内核

FireFox 是Gecko内核

Opera 是Presto内核

Safari 使用的Webkit 内核

Chrome 是Google自己的 javascript V8引擎 而其页面排版采用的Webkit 内核

3.如何愉快地写个小parser

如何愉快地写个小parser 在前几日的文章『软件随想录』里,我随性写了一句:「现在似乎已经不是lex/yacc 或 bison/flex的时代了。

我亲眼看见一个同事在费力地用perl一行行解析某个系统的数据文件,却压根没想到写个BNF。BNF对他来说,不是一种选择。

」 很多同学不解,问我:lex/yacc不是写编译器 [1] 的么?我又不发明新的语言,它们对我有什么用?从这个问题里,我们可以见到国内本科教育荼毒之深。象牙塔里的讲编译原理的老师们,估计用lex/yacc也就是写过个毫无用处的toy language,然后把自己的一知半解传递给了他们的学生,学生们学得半通不通,兴趣索然,考完试之后便把死记硬背的内容如数奉还给了老师。

别笑,我还真就是这么过来的。我用lex/yacc干的唯一一件事,就是TMD设计一个语言。

这世间的语言如此之多,实在容不下我等庸人再设计一门蹩脚的,捉急的,没有颜值,没有性能的语言。况且2000年左右的时候还没有LLVM这种神器,也没有github这样的冥想盆去「偷」别人的思想,设计出来的蹩脚语言只能到语法分析这一步就停下来,没有任何实际用处。

后来lex/yacc进化成flex/bison,在工作中我也无意中翻看了一本orelley叫『Flex & Bison』的书,这书的副标题赫然写着:text processing tools。书的内容还是挺教条的,和实际的工作内容略微脱节,可text processing tools这个说法戳中了我:是啊,词法分析 - lexical parsing(lex/flex),语法分析 - grammar parsing(yacc/bison)只是更好的文本处理工具(parser),是个高效处理带有语法的文本的DSL(Domain Specific Language)!它们和编译器没有半毛钱关系,只不过,它们的某一个应用场景是和编译器有关罢了。

我们不必将其想得过于高深!我们想想文本处理有什么工具?Regular expression!如今的编程语言,有哪个不支持regular expression呢?同样的,如今的程序员,哪个不用使用(没在代码里使用)regular expression呢?Regular expression也是一种文本处理工具,也是个DSL,只不过,它处理不了复杂的语法。我们知道,自动化理论(automata theory)里,有FSA(Finite State Automata)和PDA(PushDown Automata),前者可以用regular expression表述,而后者可以处理CFG(Context Free Grammar)。

而CFG便是flex/bison要处理的对象!遗憾的是,大部分语言都没有内置对CFG的处理,一旦文本处理的复杂度超过了regular expression可以表述的复杂度,我们便无能为力。举个例子,如果要你解析这样一段文本,你该怎么做?用regular expression自然是无能为力的,一个字符一个字符读入,按单词切分token,然后处理大括号,分号这样的语法,你相当于自己写了个解析器,很难保证高效和可扩展。

所以这种时候我们需要求助于第三方的flex/bison,或者类似的工具。flex是lex演进过来的,做词法分析。

所谓的词法分析,说白了就是把文本切成一个个你认识的语法单元,比如上图里,server 就是这样一个语法单元,我们管这个单元叫token。在flex里,我们可以这样描述上面文本里出现的token:接下来就是语法分析的环节了。

语法分析做的是pattern matching的事情,和regular expression的pattern matching不同,它允许你定义一系列可递归的规则。标准的unix下,语法分析的工具是bison,我们看看上述文本如何使用bison解析:其主体代码还是很清晰的,一个 server {…} 就用 SERVER OP({) exp_list CP(}) 这样一条规则匹配,当解析器碰到 exp_list 这样一个它无法认识的内容时,它会寻找名为 exp_list 的规则继续匹配。

如果你经常使用函数式编程语言,你会发现,这种规则的撰写似曾相识。bison使用的描述规则的语法是BNF的变体。

以下是编译和执行的结果,作为展示,我仅仅把语法树中我感兴趣的内容打印出来了:从上面的编译过程里,你可以看到,flex/bison是一个C语言的DSL。因此,你可以在处理词法和语法的过程中嵌入C代码,处理(transform)你需要的结果。

DSL和宿主语言之间必然要有一些约定俗成的接口,这也是 yytext,yyparser,yyterminate,yylex 等等变量和方法存在的原因。它们看起来很奇怪,但如果你以一颗看待DSL的心去看待它们,变不那么别扭了。

(二) 可惜,如今大部分文艺青年都已经不用C了 —— 虽说很多语言都提供了对C的FFI(Foreign Function Interface),比如Python,你可以用flex/bison生成一个parser,然后用FFI包装。然而,这毕竟很麻烦,如果我能用我喜爱的语言做parser,该多方便?嗯,有需求的地方便有产品,看这个wiki page吧:中的js代码中怎么写一个计算器的加减乘除

<meta ; charset=utf-8" /> <body>

怎么写一个js解释器

转载请注明出处育才学习网 » 怎么写一个js解释器

知识

上上下下英语怎么写

阅读(182)

本文主要为您介绍上上下下英语怎么写,内容包括上上下下的英文怎么写UP然后是什么,前后左右上下,用英语怎么写,前后左右上下,用英语怎么写。就是每个字母都有规定的占几行。口诀:字母书写有规则,倾斜15度正适合, →写的斜一点 比如/大写总在上

知识

dhl快件内容描述怎么写

阅读(284)

本文主要为您介绍dhl快件内容描述怎么写,内容包括DHL快递单如何填写,DHL形式发票上货物详细描述一栏该如何填写,如何填写dhl快递单。最低0.27元开通文库会员,查看完整内容> 原发布者:别清淑 DHL快递单填写指南您如将一票快件直接交货给DHL公

知识

dht21程序怎么写

阅读(199)

本文主要为您介绍dht21程序怎么写,内容包括DHT11能使用DHT21写的程序吗,DHT11能使用DHT21写的程序吗,急求DHT21/AM2301用51单片机驱动的程序。//****************************************************************//

知识

红掌花的作文怎么写

阅读(222)

本文主要为您介绍红掌花的作文怎么写,内容包括写话红掌花怎么写短文,写红掌的作文怎么写,教室里的红掌花作文。火鹤花(Anthurium scherzerianumSchott)天南星科花烛属多年生草本。有佛焰花序,叶形苞片,常见的苞片颜色有红、

知识

过用英文怎么写

阅读(197)

本文主要为您介绍过用英文怎么写,内容包括过英文怎么写,过的英文怎么写,过英文怎么写。总结用英语为summary读法:英 [ˈsʌməri] 美 [ˈsʌməri] 释义n. 总结,概要2、adj. 总结性的;简略的,扼要

知识

战争小说开头怎么写

阅读(307)

本文主要为您介绍战争小说开头怎么写,内容包括战争小说开头怎么写例子,战争小说开头怎么写例子,战争小说应该怎么开头。最好是可以快速进入扣人心弦的战斗情景,这样能一上来就吊起读者的胃口。我可以给你推荐几个例子,你百度一下就可以找到这

知识

旅游的因为怎么写

阅读(205)

本文主要为您介绍旅游的因为怎么写,内容包括旅游的英文如何写,旅游的英文怎样写,关于旅游的作文怎么写。早已听说三亚的阳光、沙滩、海水是世界上独一无二的,进入11月份严寒的冬天已经来临,作为北方人我始终向往着能有朝一日带着父母一起去暖

知识

怎么用php写秒杀

阅读(197)

本文主要为您介绍怎么用php写秒杀,内容包括求一段php写的限时秒杀倒计时特效制定开始时间和结束时间自己,php每5秒执行一次php代码怎么写,php如何实现商城的秒杀程序。倒计时:<script>var time_fuc=function(){this.hours=1;//时this.minute=

知识

c的大写字母怎么写

阅读(384)

本文主要为您介绍c的大写字母怎么写,内容包括C语言大小写字母转换,c语言怎么把一个小写字母转化为大写字母,ABCD的大小写英文字母怎么写。这是一个很简单的功能#include<stdio.h>#include<stdlib.h>void main(){char c;scan

知识

村居的拼音怎么写

阅读(232)

本文主要为您介绍村居的拼音怎么写,内容包括村居的拼音怎么写,古诗《村居》注音版,村居整首诗的拼音。cun ju 《村居》 gao ding 高鼎 cao chang ying fei er yue tian 草长莺飞二月天,fu di

知识

部队微信群群规怎么写

阅读(287)

本文主要为您介绍部队微信群群规怎么写,内容包括微信群群规怎么写,微信群规则怎么写,微信家族群群规怎么写。原发布者:oy0801微信群规,微信群是大家线上沟通交流平台,大家可以在群内互相交流,互帮互助,共同发展,共同进步,为确保会群良性发展,

知识

jquery轮播怎么写

阅读(231)

本文主要为您介绍jquery轮播怎么写,内容包括jquery的图片轮播流程图怎么写,jquery的图片轮播流程图怎么写,jquery简单自动轮播图代码怎么写。用不用JQuery都行,直接引入Swiper插件就好了,体积小,又省时<link rel="stylesheet" href="path

知识

得田字格怎么写

阅读(193)

本文主要为您介绍得田字格怎么写,内容包括田字格怎么写,田字格怎么写,“上”在田字格怎么写。田字格的构成田字格包括四边框和横中线、竖中线。四个格分别叫做左上格、左下格、右上格、右下格。田字格别看只是四个小格子,其实每个格子都大有

知识

玫瑰花的句尾怎么写

阅读(239)

本文主要为您介绍玫瑰花的句尾怎么写,内容包括玫瑰花作文结尾怎么写,描写玫瑰花的作文最后一段怎么写,写玫瑰花的作文结尾怎么写。玫瑰花“哇,好美的玫瑰花啊!”看着卖花人自行车上那一捆捆娇艳欲滴的红玫瑰,我的身体就不由自主地靠了过去。拖

知识

阐述司法解释论文怎么写

阅读(246)

本文主要为您介绍阐述司法解释论文怎么写,内容包括论文阐述怎么写,法律毕业论文怎么写,论文怎么写简单阐述下。法律毕业论文选题原则 法律毕业论文题目过大,操作起来内容面太宽而把握不住中心,论述深入不下去;法律毕业论文题目过小,又展不开论

知识

网页上怎么用js写广告啊

阅读(231)

本文主要为您介绍网页上怎么用js写广告啊,内容包括如何在网页中插入js广告代码,在线等,怎么用js管理网站的广告啊,一个JS广告代码,如何插入网页中。如果直接在网页中用 包含js代码如果有现成的JS文件用LINK使用外部js文件!一般人都不会自己

知识

法国拒签第八条怎么写解释信

阅读(176)

本文主要为您介绍法国拒签第八条怎么写解释信,内容包括法国拒签原因第8条,再签怎么能过啊,法国签证拒签理由是8怎么办,法国签证被拒签了,理由是第8条.是为什么。可以申请,但也可以分析下为什么拒签,是自身资料缺陷明显,还是电话调查回答的不好

知识

《名人传》解释说明怎么写

阅读(224)

本文主要为您介绍《名人传》解释说明怎么写,内容包括名人传的内容简介怎么写格式or文(不少于1000字),《名人传》的读书笔记怎么写,《名人传》里面写了哪些名人分别写出他们的性格、精神、各概述一。《名人传》读后感 翻开《名人传》,在首篇的

知识

jsp绝对路径怎么写

阅读(300)

本文主要为您介绍jsp绝对路径怎么写,内容包括jsp里面的绝对路径怎么写;,如何在jsp中使用绝对路径,Jsp怎么取得绝对路径。在JavaWeb开发中,常使用绝对路径的方式来引入JavaScript和CSS文件,这样可以避免因为目录变动导致引入文件找不到的情况,常

知识

1加到1000的js怎么写

阅读(206)

本文主要为您介绍1加到1000的js怎么写,内容包括js怎么把1到1000的奇数用函数加起来,JS从1加到100,用js函数写出从1加到10,怎么写。var c=0for(var i=100;i>0;i--){c+=i/*把c从100+=..+=1,最后c=5050*/}writeln

知识

android天气json解析怎么写

阅读(247)

本文主要为您介绍android天气json解析怎么写,内容包括android中使用JAVA解析json数据,Android解析这样的json数据怎么解析,如何在Android中解析JSON数据。这个格式使用如下代码解析try {JSONObject jsonObject = new JSONObject(json);JSON

知识

js跳转网页代码怎么写

阅读(187)

本文主要为您介绍js跳转网页代码怎么写,内容包括js跳转代码怎么写,js网页跳转的代码,Javascript页面跳转的几种代码。javascript常用的页面跳转方法为:window.location.href = some_url;下面举例演示点击按钮后,延迟3

[/e:loop]