# JASM 格式
JASM (Java ASseMbler) 是一种人类可读的 JVM 字节码汇编语言格式,用于表示 Java 类文件的结构和字节码指令。
## 概述
JASM 格式提供了一种直观的方式来编写和阅读 JVM 字节码,它是 Java 类文件的文本表示形式。该格式支持:
- **类定义**: 类名、访问修饰符、超类、接口
- **字段定义**: 字段名、类型、访问修饰符
- **方法定义**: 方法名、签名、字节码指令
- **常量池**: 自动管理字符串、数字、类引用等常量
- **属性**: 源文件、行号表、局部变量表等标准属性
## 语法结构
### 基本类结构
### 字段定义
### 方法定义
## 指令系统
### 常量加载指令
- `aconst_null` - 加载 null 引用
- `iconst_0` 到 `iconst_5` - 加载整数常量 0-5
- `ldc "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 类文件:
1. **词法分析**: 将文本分解为标记(tokens)
2. **语法分析**: 构建抽象语法树(AST)
3. **语义分析**: 验证语法和类型正确性
4. **代码生成**: 生成 JVM 字节码和常量池
5. **类文件写入**: 写入标准 Java 类文件格式
## 相关模块
- [`lexer`](lexer/index.html) - JASM 词法分析器
- [`parser`](parser/index.html) - JASM 语法分析器
- [`ast`](ast/index.html) - JASM 抽象语法树定义
- [`converter`](converter/index.html) - AST 到 JVM 程序的转换器
- [`writer`](writer/index.html) - JVM 程序到类文件的写入器
## 错误处理
JASM 解析和转换过程中可能遇到的错误:
- **语法错误**: 无效的语法结构
- **类型错误**: 类型不匹配或无效类型
- **引用错误**: 未定义的类、方法或字段
- **验证错误**: 字节码验证失败
所有错误都通过 [`GaiaError`](../../gaia_types/struct.GaiaError.html) 类型返回,提供详细的错误信息和位置。