2.6 KiB
2.6 KiB
| name | description |
|---|---|
| fortran-extractor | [已完成] 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 标志:
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 依赖的单元被识别为"纯函数",可以独立测试和重构。
使用示例
# 提取 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
后续步骤
提取完成后,可以:
- 编译验证:
cd extracted && make - 依赖分析: 使用
fortran-analyzerskill 分析函数调用依赖 - 重构: 使用
fortran-to-rustskill 开始 Rust 重构
脚本位置
核心脚本位于 .claude/skills/fortran-extractor/scripts/extract_fortran.py,主要功能:
extract_units(): 提取程序单元analyze_commons(): 分析 COMMON 依赖generate_makefile(): 生成编译配置