90 lines
2.6 KiB
Markdown
90 lines
2.6 KiB
Markdown
---
|
||
name: fortran-extractor
|
||
description: "[已完成] TLUSTY/SYNSPEC 拆分已完成。仅当用户明确请求'重新提取 Fortran'或'再次拆分 Fortran 文件'时触发。"
|
||
---
|
||
|
||
# Fortran 代码提取器
|
||
|
||
从大型 Fortran 源文件中提取各个程序单元(SUBROUTINE、FUNCTION、PROGRAM、BLOCK DATA)到独立文件,并生成依赖分析报告。
|
||
|
||
## 快速参考
|
||
|
||
| 场景 | 命令 |
|
||
|------|------|
|
||
| 提取 Fortran 文件 | `python3 .claude/skills/fortran-extractor/scripts/extract_fortran.py <source.f> <output_dir>` |
|
||
| 默认路径 | `tlusty/tlusty208.f` → `tlusty/extracted/` |
|
||
|
||
## 输出文件
|
||
|
||
提取完成后,输出目录包含:
|
||
|
||
| 文件 | 说明 |
|
||
|------|------|
|
||
| `*.f` | 各个提取的程序单元 |
|
||
| `_SUMMARY.txt` | 提取摘要(单元数、类型统计) |
|
||
| `_COMMON_ANALYSIS.txt` | COMMON 块依赖分析 |
|
||
| `_PURE_UNITS.txt` | 无 COMMON 依赖的纯函数列表 |
|
||
| `Makefile` | 编译配置(含正确标志) |
|
||
|
||
## 提取的单元类型
|
||
|
||
- `SUBROUTINE` - 子程序
|
||
- `FUNCTION` - 函数
|
||
- `PROGRAM` - 主程序(支持无名 PROGRAM)
|
||
- `BLOCK DATA` - 数据块(支持无名 BLOCK DATA)
|
||
|
||
## Makefile 编译标志
|
||
|
||
生成的 Makefile 使用以下 gfortran 标志:
|
||
|
||
```makefile
|
||
FFLAGS = -O3 -fno-automatic -mcmodel=large
|
||
```
|
||
|
||
- `-mcmodel=large`: 支持大型 COMMON 数组(>2GB 地址空间)
|
||
- `-fno-automatic`: 静态存储(旧 Fortran 兼容性)
|
||
|
||
**注意**: 不要使用 `-ffixed-line-length-none`,会破坏 73-80 列处理。
|
||
|
||
## COMMON 块分析
|
||
|
||
脚本自动分析每个单元的 COMMON 块依赖:
|
||
|
||
- **命名 COMMON**: `COMMON /NAME/ ...`
|
||
- **空白 COMMON**: `COMMON varname`(不带斜杠)
|
||
- **INCLUDE 依赖**: `INCLUDE 'XXX.FOR'`
|
||
|
||
### 纯函数识别
|
||
|
||
无 COMMON 依赖的单元被识别为"纯函数",可以独立测试和重构。
|
||
|
||
## 使用示例
|
||
|
||
```bash
|
||
# 提取 TLUSTY
|
||
python3 .claude/skills/fortran-extractor/scripts/extract_fortran.py tlusty/tlusty208.f tlusty/extracted/
|
||
|
||
# 提取 SYNSPEC
|
||
python3 .claude/skills/fortran-extractor/scripts/extract_fortran.py synspec/synspec54.f synspec/extracted/
|
||
|
||
# 查看提取结果
|
||
cat tlusty/extracted/_SUMMARY.txt
|
||
cat tlusty/extracted/_PURE_UNITS.txt
|
||
```
|
||
|
||
## 后续步骤
|
||
|
||
提取完成后,可以:
|
||
|
||
1. **编译验证**: `cd extracted && make`
|
||
2. **依赖分析**: 使用 `fortran-analyzer` skill 分析函数调用依赖
|
||
3. **重构**: 使用 `fortran-to-rust` skill 开始 Rust 重构
|
||
|
||
## 脚本位置
|
||
|
||
核心脚本位于 `.claude/skills/fortran-extractor/scripts/extract_fortran.py`,主要功能:
|
||
|
||
- `extract_units()`: 提取程序单元
|
||
- `analyze_commons()`: 分析 COMMON 依赖
|
||
- `generate_makefile()`: 生成编译配置
|