JASM 格式
JASM (Java ASseMbler) 是一种人类可读的 JVM 字节码汇编语言格式,用于表示 Java 类文件的结构和字节码指令。
概述
JASM 格式提供了一种直观的方式来编写和阅读 JVM 字节码,它是 Java 类文件的文本表示形式。该格式支持:
- 类定义: 类名、访问修饰符、超类、接口
- 字段定义: 字段名、类型、访问修饰符
- 方法定义: 方法名、签名、字节码指令
- 常量池: 自动管理字符串、数字、类引用等常量
- 属性: 源文件、行号表、局部变量表等标准属性
语法结构
基本类结构
字段定义
方法定义
指令系统
常量加载指令
aconst_null- 加载 null 引用iconst_0到iconst_5- 加载整数常量 0-5ldc "string"- 加载字符串常量ldc 123- 加载数字常量
局部变量操作
iload_0到iload_3- 加载局部变量到操作数栈istore_0到istore_3- 从操作数栈存储到局部变量iinc 1 1- 递增局部变量
栈操作指令
pop- 弹出栈顶元素dup- 复制栈顶元素swap- 交换栈顶两个元素
算术运算
iadd- 整数加法isub- 整数减法imul- 整数乘法idiv- 整数除法
方法调用
控制流
示例程序
Hello World
简单计算器
高级特性
异常处理
泛型支持
JASM 支持 Java 泛型的类型描述符:
注解支持
转换过程
JASM 格式通过以下步骤转换为 JVM 类文件:
- 词法分析: 将文本分解为标记(tokens)
- 语法分析: 构建抽象语法树(AST)
- 语义分析: 验证语法和类型正确性
- 代码生成: 生成 JVM 字节码和常量池
- 类文件写入: 写入标准 Java 类文件格式
相关模块
lexer- JASM 词法分析器parser- JASM 语法分析器ast- JASM 抽象语法树定义converter- AST 到 JVM 程序的转换器writer- JVM 程序到类文件的写入器
错误处理
JASM 解析和转换过程中可能遇到的错误:
- 语法错误: 无效的语法结构
- 类型错误: 类型不匹配或无效类型
- 引用错误: 未定义的类、方法或字段
- 验证错误: 字节码验证失败
所有错误都通过 GaiaError 类型返回,提供详细的错误信息和位置。