蓉杠学习网

j***ascript词法分析,js实现词法分析器

大家好,今天小编关注到一个比较意思的话题,就是关于javascript词法分析的问题,于是小编就整理了2个相关介绍JavaScript词法分析的解答,让我们一起看看吧。

  1. C#中ExpressionTree需要学习吗?如何学习?
  2. java解释执行后是否常驻内存?为何需要JIT技术?

C#中ExpressionTree需要学习吗?如何学习?

什么表达式

首先,所谓的表达式树本身也是一个表达式一个表达式也是一棵表达式树,只不过它是一棵小的表达式树,我们可以把表达式树和表达式认为是一个东西。表达式树以树形数据结构形式来代表代码,其中树上的每个节点都是一种表达式。

javascript词法分析,js实现词法分析器div>
图片来源网络,侵删)

表达式树的作用

我们可以对表达式树上的代码进行编辑运算,从而在不同数据库执行Linq查询,还能通过动态语言运行时(DLR)提供与. Net Framework之间的互操作性。

在我们实际的开发过程中,往往会遇到对内容进行多条件筛选的情况。而多条件对于初级的开发人员来说,可能直接通过if else 就进行操作了,但是如果要把所有的条件都考虑进去,这种条件判断方式就会非常繁琐,这个时候,表达式树就可以体现它的作用了。

javascript词法分析,js实现词法分析器
(图片来源网络,侵删)

特别是在C#中,使用ORM框架,如Entity Framework时,表达式树的作用就体现的非常明显。比如,其中的Linq查询就是能充分体现表达式树的价值。通过Lambda表达式直接转换为表达式树,而如果要构造更加复杂的结构,用Linq构造连式Lambda就能达到目的。只要再对其构成的这个复杂结构解析翻译就能够实现跨语言的算法平移,当然这些工作已经有现成的类库或框架去完成,我们只需要站在巨人的肩膀上就能达成目的。

个人觉得,如果要进一步提升自己编程深度或者说技巧,还是有必要学习表达式树,其实重要的是多写多练习多理解,慢慢这块就没问题了。

以上是自己一点理解,希望答案能领你满意!

javascript词法分析,js实现词法分析器
(图片来源网络,侵删)

表达式树的作用类似于抽象语法树(AST),可以让开发者自己构造语法树,结合 lambda,可以用在 LINQ动态查询之类的功能

简单介绍下抽象语法树(AST),AST 的应用非常广泛。 它可以将源代码的语法结构(理论上可以支持任何语言)抽象为树状的形式,树上的每个元素表示源码中的一种结构。

举个简单的例子,用 AST 来表示 2 * 7 + 3是这样:

是不是非常清晰明了? 有了这个树,求值只需要遍历树就。

通常在这些领域会用到抽象语法树:

网上找了张图,逻辑很清晰。

再说下 C# 里的表达式树,微软已经提供了常用的各种表达式部件,如一元、二元运算、Lambda、条件表达式等,我们可以根据需要来构造表达式树,[_a***_]可以用于动态编译执行。

字数凑得差不多了,说点我自己的看法。

  • 抽象语法树是个很有用的东西,做开发最好能深入理解;
  • 表达式树在一些动态业务逻辑场景用得上,不过并不优雅,因为构造表达式的过程比较繁琐,而且运行时编译可能会带来内存不能正常回收的问题;
  • 动态业务场景我更喜欢用 javascript,即在程序中嵌入一个JavaScript引擎,动态执行脚本,简单粗暴速度快,对系统的侵入更小。

j***a解释执行后是否常驻内存?为何需要JIT技术

什么是 JIT ?

为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler),简称 JIT 编译器

编译器:把源程序的每一条语句都编译成机器语言,并保存二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;

解释器:只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的;

通过命令将 J***a 程序的源代码编译成 J***a 字节码,即我们常说的 class 文件。这是我们通常意义上理解的编译。

字节码并不是机器语言,要想让机器能够执行,还需要把字节码翻译成机器指令。这个过程是J***a 虚拟机做的,这个过程也叫编译。是更深层次的编译。(实际上就是解释,引入 JIT 之后也存在编译)

此时又有疑惑了,J***a不是解释执行的吗?

没错,J***a 需要将字节码逐条翻译成对应的机器指令并且执行,这就是传统的 JVM 的解释器的功能,正是由于解释器逐条翻译并执行这个过程的效率低,引入了 JIT 即时编译技术。

必须指出的是,不管是解释执行,还是编译执行,最终执行的代码单元都是可直接在真实机器上运行的机器码,或称为本地代码

附一张图来理解

编译原理参考:深入分析J***a的编译原理

到此,以上就是小编对于j***ascript词法分析的问题就介绍到这了,希望介绍关于j***ascript词法分析的2点解答对大家有用。

[免责声明]本文来源于网络,不代表本站立场,如转载内容涉及版权等问题,请联系邮箱:83115484@qq.com,我们会予以删除相关文章,保证您的权利。 转载请注明出处:http://www.rongung.com/post/36097.html

分享:
扫描分享到社交APP