E. Balland
等人
/
理论计算机科学电子笔记
190
(
2007
)
19
或全球分析。然而,通过使用散列consing技术,我们获得了一个数据结构与最大的
共享,确保最小的内存占用。
例如,为了将J
AVA
类表示为代数项,我们定义了以下签名:
模块字节码
imports
int
long
float
double String
抽象语法
TClass = Class(info:TClassInfo,fields:
TFieldList,methods:
TMethodList)
...
TMethodList = MethodList(TMethod*)
TMethod = Method(info:TMethodInfo,code:TMethodCode)
TMethodCode = MethodCode(instructions:TInstructionList,
localVariables:TLocalVariableList,
tryCatchBlocks:TTryCatchBlockList)
...
TInstructionList = InstructionList(TInstruction*)
TInstruction = Nop()
|Iload(var:int)
|If eq(标签:TLabel)
| String,name:String,
methodDesc:TMethodDescriptor)
...
真正的签名包含250多个不同的构造函数。由于篇幅有限,我们无法详细列出给
定的签名表明类由构造函数
Class
表示
,
其中包含名称、包和导入等信息它还包
含一个字段列表和一个方法列表。后者使用一个关联运算符
MethodList
编码,
其arity不固定。如下所示,它用于对列表进行建模,并且对于描述列表中的一
个或多个元素的搜索将是有用的类似地,指令列表由关联运算符
InstructionList
表示。
一个方法包含一个
信息
部分,
代码
部分。
代码
部分主要由局部变
量和指令列表组成。每个字节码指令都由一个代数构造函数表示:Nop、
Iload
等。
给定这个签名,G
OM
生成一个有效的J
AVA
实现(一个类
对于每个构造函数),它允许我们表示和操作JAVA类的表示。 如图1所示,给定
J
AVA
类C,ASM用于 建立一个代数表示TC。利用Tom提供的基于表达规则的框架,
这个术语可以被重写为另一个术语(TC
'),该术语随后被从类C'中提取出来以用于新的J
。
2.2
通过模式匹配
TOM是一种语言扩展,它将模式匹配原语添加到现有的IM中,