# Fortran no Maguyva: grafos de código para bases científicas

Canonical source: https://maguyva.ai/pt-br/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).

O Maguyva oferece suporte a Fortran com AST, símbolos e grafo, para que agentes de IA rastreiem sub-rotinas, módulos e tipos derivados antes de mudar código numérico.

## Panorama de suporte

- Nível: Suporte a AST e símbolos
- Programação
- Extensões: .f, .f03, .f08, .f90, .f95, .for, +1 mais
- Parsing real de AST para busca com consciência de sintaxe e contexto estrutural.
- Símbolos nomeados alimentam a busca semântica e as referências cruzadas. A navegação por grafo fica disponível quando a extração de relações está habilitada.
- Esta linguagem fornece símbolos e relações para a busca orientada por grafo; os tipos de aresta compatíveis variam de acordo com seus construtos nativos.
- A análise de AST e a extração de símbolos estão disponíveis.

## Uso ideal

- Equipes de pesquisa, engenharia e HPC que mantêm solvers, simulações ou bibliotecas numéricas em Fortran mais antigos que a equipe atual.
- Repositórios que misturam arquivos `.f` de formato fixo com módulos `.f90` e posteriores de formato livre, muitas vezes ao lado de wrappers em C ou Python.
- Revisões assistidas por agentes em que o primeiro passo é mapear quais sub-rotinas tocam um módulo compartilhado antes de uma mudança numérica.

## Fluxos de trabalho de agente

- Rastrear quais sub-rotinas e funções chamam uma rotina do solver antes de mudar seus argumentos ou unidades.
- Listar os módulos que uma unidade de programa importa com `use` e seguir até as definições.
- Encontrar onde um tipo derivado é declarado e quais procedimentos trabalham com ele.

## Por que Fortran precisa de estrutura, não de busca por strings

Bases de código em Fortran costumam ser antigas, grandes e escritas por especialistas do domínio, não por equipes de software. Rotinas chamadas `SOLVE`, `Solve` e `solve` são a mesma rotina. Os módulos são compartilhados por centenas de arquivos, e a biblioteca de procedimentos intrínsecos é tão grande que uma lista ingênua de chamadas acaba cheia de `SQRT`, `SUM` e `WRITE`.

Um agente que só usa grep se afoga nesse ruído. O Maguyva entrega primeiro a estrutura: quais unidades de programa existem, quais módulos elas usam e quais rotinas do próprio código chamam umas às outras.

## O que o Maguyva extrai em Fortran

O Maguyva cobre código-fonte de formato fixo e livre (`.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03`, `.f08`). Funções e sub-rotinas são extraídas como símbolos chamáveis, e tipos derivados podem ser selecionados como definições de tipo na busca estrutural.

A correspondência de símbolos não diferencia maiúsculas de minúsculas, assim como o próprio Fortran. As relações de importação vêm de `use` e `include`, e a palavra-chave é removida para que o grafo guarde o nome do módulo. Chamadas, leituras, atribuições, referências de tipo e a herança de tipos derivados estendidos também entram no grafo.

O filtro de relações descarta cerca de 165 procedimentos intrínsecos (instruções de E/S e rotinas matemáticas, de arrays, de strings, de conversão de tipos e de manipulação de bits), então as arestas que sobram apontam para o seu próprio código.

## Exemplos de prompts para agentes

- "Quais sub-rotinas chamam `compute_flux` e quais módulos elas usam?" (`find_symbol`, depois `dependency_search` incoming)
- "Rastreie como as condições de contorno são aplicadas no loop do solver." (`get_task_context`)
- "Encontre todas as unidades de programa que usam o módulo `constants`." (`text_pattern_search` por `use constants`, depois `find_symbol`)

## Limitações conhecidas

- Fortran não tem decorators nem tratamento de exceções, por isso esses tipos de relação estão marcados como não aplicáveis.
- Procedimentos vinculados a tipos compartilham os mesmos nós que funções e sub-rotinas comuns. Use o preset `functions` em `structural_search`; o preset `methods` não seleciona nenhum nó de Fortran.
- Chamadas a procedimentos intrínsecos filtrados não aparecem como arestas do grafo. Use `text_pattern_search` quando precisar de cada `WRITE` ou `OPEN`.

## Próximos passos

Conecte um repositório pelo [início rápido](/pt-br/docs/quickstart) e depois confira a matriz de suporte completa na [página de compatibilidade](/pt-br/docs/compatibility). Se o seu Fortran convive com código de ligação em C, leia também o [guia de C](/pt-br/languages/c).

## Detalhes do motor

- O suporte a Fortran cobre código-fonte de formato fixo e livre: `.f`, `.for`, `.ftn`, `.f90`, `.f95`, `.f03` e `.f08`.
- Funções e sub-rotinas são símbolos chamáveis, a correspondência de símbolos não diferencia maiúsculas de minúsculas, e `use` e `include` viram relações de importação.
- Cerca de 165 procedimentos intrínsecos (rotinas de E/S, matemáticas, arrays, strings, conversão de tipos e bits) são filtrados das relações. Relações de decorator e de exceção estão marcadas como não aplicáveis.

## Pontos de entrada MCP úteis

- `find_symbol`: Comece pelo nome da sub-rotina, função ou módulo; a correspondência ignora maiúsculas e minúsculas, como o Fortran.
- `dependency_search`: Use a travessia incoming em uma rotina do solver ou de um módulo compartilhado para ver cada chamador antes de uma mudança numérica.
- `get_task_context`: Use para prompts como "rastreie como as condições de contorno são aplicadas no loop do solver".
