【技术实现步骤摘要】
一种类java语言基于JVM的函数式编程语法实现方法
[0001]本专利技术涉及程序语言编译
,特别涉及一种类java语言基于JVM的函数式编程语法实现方法。
技术介绍
[0002]java语言通过JVM虚拟机技术实现了跨平台特性,通过一套字节码作为中间表示层,在运行时翻译成目标平台的机器码执行。在此基础上业界诞生了许多基于JVM的前端语言,例如kotlin、scala、groovy。JVM在执行字节码时主要是通过栈进行解释执行的,通过局部变量表、操作数栈来存取修改数据。
[0003]class文件是一种文件格式作为JVM的标准执行输入,定义了一套承载字节码的二进制规范。
[0004]Antlr是一个语言工具,可以将符合BNF范式的语法自动生成对应的词法语法解析器。
[0005]ASM是一个通用java字节码操作框架,常用在动态系统中使用,同样也可以用于编译器中,例如OpenJDK中lambda表达式的实现、Groovy编译器 、Kotlin编译器。
[0006]IR Node 中间表示 ...
【技术保护点】
【技术特征摘要】
1.一种类java语言基于JVM的函数式编程语法实现方法,其特征在于,包括以下具体步骤:S1:语法解析,转化为语法中间表示层对象;S2:在解析的过程中,将代码分解为左侧表达式、符号和右侧表达式三部分;S3:解析符号,处理步骤如下:S31:对左侧表达式进行处理,计算出左侧表达式在locals中的位置x,并根据左侧表达式推断出类型添加load指令;S32:解析符号,对符号左侧执行判断是否为null的跳转指令;S33:此时会生成一个跳转标记label1和一个跳出标记label2,写入非null跳转指令ifnonull label1;S34:左侧表达式为null时顺序执行,此时需要根据左侧表达式推断出类型所占字节长度写入pop、pop2,将load_x在栈内的值弹出;S35:根据右侧表达式推断出的类型赋予默认值;S36:此时左侧表达式为null的情况已执行完,需要写入无条件跳转指令goto label2,并标记label1为当前所在位置;S37:对右侧表达式进行处理,根据方法调用和对象引用写入正常调用指令;S38:整体表达式已执行完,标记label2为当前所在位置,此位置表示表达式整体执行结束。2.根据权利要求1所述的一种类java语言基于JVM的函数式编程语法实现方法,其特征在于,在所述步骤S31中,每当解析到一组{}时,qLang编译器会生成一个对应的作用域对象,同时在当前作用域里的IR Node都会持有此作用域的引用,当解析到定义节点时会将定义的类型和变量名称记录到当前作用域中。3.根据权利要求1所述的一种类java语言基于JVM的函数式编程语法实现方法,其特征在于,在所...
【专利技术属性】
技术研发人员:王三明,王聪明,王圆博,
申请(专利权)人:启业云大数据南京有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。