# Maguyva의 Fortran 지원: 과학 계산 코드베이스를 위한 코드 그래프

Canonical source: https://maguyva.ai/ko/languages/fortran

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva는 AST, 심볼, 그래프로 Fortran을 지원하여, AI 에이전트가 수치 코드를 바꾸기 전에 서브루틴, 모듈, 파생 타입을 추적할 수 있게 합니다.

## 지원 현황 요약

- 등급: AST 및 심볼 지원
- 프로그래밍
- 확장자: .f, .f03, .f08, .f90, .f95, .for, +1개 더보기
- 구문 인식 검색과 구조적 컨텍스트를 위한 실제 AST 파싱을 제공합니다.
- 이름이 지정된 심볼은 시맨틱 조회와 상호 참조에 활용됩니다. 관계 추출이 활성화된 경우 그래프 내비게이션을 사용할 수 있습니다.
- 이 언어는 그래프 인식 검색에 심볼과 관계를 제공합니다. 지원되는 에지 유형은 언어 고유의 구문 구조에 따라 다릅니다.
- AST 파싱과 심볼 추출을 모두 지원합니다.

## 가장 적합한 경우

- 지금 팀보다 오래된 Fortran 솔버, 시뮬레이션, 수치 라이브러리를 유지보수하는 연구, 엔지니어링, HPC 팀.
- 고정 형식 `.f` 파일과 자유 형식 `.f90` 이후 모듈이 섞여 있고, 옆에 C나 Python 래퍼가 함께 있는 경우가 많은 저장소.
- 수치 변경 전에 공유 모듈을 건드리는 서브루틴을 파악하는 것이 첫 번째 일인 에이전트 지원 리뷰.

## 에이전트 워크플로

- 솔버 루틴의 인자나 단위를 바꾸기 전에 그 루틴을 호출하는 서브루틴과 함수를 추적합니다.
- 프로그램 단위가 `use`로 가져오는 모듈을 나열하고 그 정의까지 따라갑니다.
- 파생 타입이 어디에 선언되어 있고 어떤 프로시저가 그것을 다루는지 찾습니다.

## Fortran에는 문자열 매칭이 아니라 구조가 필요합니다

Fortran 코드베이스는 오래되고, 크고, 소프트웨어 팀이 아니라 도메인 전문가가 작성한 경우가 많습니다. `SOLVE`, `Solve`, `solve`라는 이름의 루틴은 모두 같은 루틴입니다. 모듈은 수백 개의 파일에서 공유되고, 내장 프로시저 라이브러리도 커서 단순한 호출 목록은 대부분 `SQRT`, `SUM`, `WRITE`로 채워집니다.

grep만 쓰는 에이전트는 이 잡음에 묻혀 버립니다. Maguyva는 먼저 구조를 건넵니다. 어떤 프로그램 단위가 있고, 어떤 모듈을 쓰며, 어떤 사용자 루틴이 서로를 호출하는지입니다.

## Maguyva가 Fortran에서 추출하는 것

Maguyva는 고정 형식과 자유 형식 소스(`.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03`, `.f08`)를 지원합니다. 함수와 서브루틴은 호출 가능한 심볼로 추출되고, 파생 타입은 구조적 검색에서 타입 정의로 선택할 수 있습니다.

심볼 매칭은 Fortran 자체의 규칙에 맞춰 대소문자를 구분하지 않습니다. 임포트 관계는 `use`와 `include`에서 만들어지며, 키워드를 떼어 내고 모듈 이름을 그래프에 저장합니다. 호출, 읽기, 대입, 타입 참조, 그리고 확장된 파생 타입의 상속도 모두 그래프에 들어갑니다.

관계 필터는 약 165개의 내장 프로시저(I/O 문, 수학, 배열, 문자열, 타입 변환, 비트 조작 루틴)를 제외하므로, 남는 엣지는 여러분의 코드를 가리킵니다.

## 에이전트 프롬프트 예시

- "`compute_flux`를 호출하는 서브루틴은 무엇이고, 각각 어떤 모듈을 쓰나요?" (`find_symbol`, 그다음 `dependency_search` incoming)
- "솔버 루프에서 경계 조건이 어떻게 적용되는지 추적해 줘." (`get_task_context`)
- "`constants` 모듈을 사용하는 프로그램 단위를 모두 찾아 줘." (`use constants`에 대해 `text_pattern_search`, 그다음 `find_symbol`)

## 알려진 한계

- Fortran에는 데코레이터도 예외 처리도 없으므로, 해당 관계 유형은 적용 불가로 표시됩니다.
- 타입 바운드 프로시저는 일반 함수 및 서브루틴과 같은 노드를 공유합니다. `structural_search`에서는 `functions` 프리셋을 사용하세요. `methods` 프리셋은 Fortran 노드를 선택하지 않습니다.
- 필터링된 내장 프로시저 호출은 그래프 엣지로 나타나지 않습니다. 모든 `WRITE`나 `OPEN`이 필요하다면 `text_pattern_search`를 사용하세요.

## 다음 단계

[빠른 시작](/ko/docs/quickstart)으로 저장소를 연결한 다음, [호환성 페이지](/ko/docs/compatibility)에서 전체 지원 매트릭스를 확인하세요. Fortran이 C 글루 코드와 함께 있다면 [C 가이드](/ko/languages/c)도 읽어 보세요.

## 엔진 세부 정보

- Fortran 지원은 고정 형식과 자유 형식 소스를 포함합니다: `.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03`, `.f08`.
- 함수와 서브루틴은 호출 가능한 심볼이고, 심볼 매칭은 대소문자를 구분하지 않으며, `use`와 `include`는 임포트 관계가 됩니다.
- 약 165개의 내장 프로시저(I/O, 수학, 배열, 문자열, 타입 변환, 비트 루틴)는 관계에서 걸러집니다. 데코레이터와 예외 관계는 적용 불가로 표시됩니다.

## 유용한 MCP 진입점

- `find_symbol`: 서브루틴, 함수, 모듈 이름으로 시작하세요. Fortran처럼 매칭은 대소문자를 구분하지 않습니다.
- `dependency_search`: 수치 변경 전에 솔버나 공유 모듈 루틴에 incoming 탐색을 써서 모든 호출자를 확인하세요.
- `get_task_context`: “솔버 루프에서 경계 조건이 어떻게 적용되는지 추적해 줘” 같은 프롬프트에 쓰세요.
