Fornece análises estáticas de lexing/análise e precoce do código fortran. Os seguintes padrões fortran são cobertos:
A análise é configurável e você pode selecionar o padrão fortran para segmentar, incluindo modos estendidos especiais para fortran 77.
Inclui fluxo de dados e análise básica de blocos, renamer e análise de tipo.
Este pacote exporta principalmente uma biblioteca Haskell, mas também cria um executável que pode ser usado para testar e depuração. Por exemplo, uso, consulte o projeto Camfort, que usa o Fortran-SRC como seu front end.
Fornecemos binários pré -construídos para Windows, Mac e Linux.
Adicione fortran-src como uma dependência no seu projeto Haskell. Estamos em hackage e também em pilha.
Você também pode invocar fortran-src na linha de comando.
Para recursos que os gráficos de saída, o uso pretendido é tubá -lo no comando dot -Tpdf e redirecioná -lo para um arquivo PDF. O comando dot faz parte do projeto GraphViz, consulte o manual deles para muitas outras opções que podem ser exploradas para fins de visualização.
Usage: fortran-src [OPTION...] <file>
--version show fortran-src version
-v VERSION, -F VERSION --fortranVersion=VERSION Fortran version to use, format: Fortran[66/77/77Legacy/77Extended/90]
-a ACTION --action=ACTION choose the action, possible values: lex|parse
-t --typecheck parse and run typechecker
-R --rename parse and rename variables
-B --bblocks analyse basic blocks
-S --supergraph analyse super graph of basic blocks
-r --reprint Parse and output using pretty printer
--split-long when using pretty printer, split long lines via continuations
--dot output graphs in GraphViz DOT format
--dump-mod-file dump the information contained within mod files
-C[CPP-OPTS] --cpp[=CPP-OPTS] run the C Pre Processor on the Fortran files first
-I DIR --include-dir=DIR directory to search for precompiled 'mod files'
-c --summarise, --compile-mod build an .fsmod file from the input
-o FILE --output-file=FILE name of output file (e.g. name of generated fsmod file)
--make-mods, --make determine dependency order of modules and automatically build .fsmod files
--show-make-graph dump a graph showing the build structure of modules
--show-make-list dump a list of files in build dependency order (topological sort from the dependency graph)
--show-block-numbers[=LINE-NUM] Show the corresponding AST-block identifier number next to every line of code.
--show-flows-to=AST-BLOCK-ID dump a graph showing flows-to information from the given AST-block ID; prefix with 's' for supergraph
--show-flows-from=AST-BLOCK-ID dump a graph showing flows-from information from the given AST-block ID; prefix with 's' for supergraph
Se você não passar um sinalizador --fortranVersion , a versão será adivinhada do nome do arquivo:
*.f são analisados com a sintaxe fortran 77 estendida.*.f90 são analisados com a sintaxe fortran 90 (e respectivamente para *.f2003 / *.f03 , *.f2008 / *.f08 ).*.f . Você precisará da biblioteca GMP mais arquivos de cabeçalho: em muitas plataformas, isso será através do pacote libgmp-dev .
As dependências da biblioteca Haskell estão listadas no package.yaml . O Fortran-SRC suporta a construção com pilha ou cabala.
O Fortran-SRC suporta GHC 9.0 a GHC 9.4 . Testamos regularmente pelo menos os GHCs mínimos e máximos suportados. Lançamentos anteriores a/mais recentes do que esses podem ter problemas. Congratulamo -nos com correções que nos permitiriam apoiar uma gama mais ampla de compiladores.
Você provavelmente precisará de pelo menos três gibas de memória para construir o Fortran-SRC.
Para instalar as ferramentas de GHC e construir, recomendamos fortemente o GHCUP.
Quando o mais recente recomendado é usado, significa a versão mais recente da ferramenta que as tags de ghcup recommended . Às vezes, isso fica por trás da versão latest . Com o GHCUP instalado, execute ghcup list para obter uma melhor compreensão.
A seguir, os guias gerais para qualquer sistema operacional que forneça as ferramentas relevantes. Se você tiver problemas, considere verificar os arquivos de fluxo de trabalho do CI em .github/workflows .
Apoiamos a versão mais recente recomendada da Stack (a partir de 2021-09-17, Stack 2.7). Geralmente, qualquer pilha 2.x deve funcionar. (Stack 1.x pode funcionar com pequenas alternâncias - você pode precisar baixar o resolvedor manualmente.)
stack build
Para uma concha interativa:
stack build
stack ghci
Observe que a execução stack ghci antes de executar stack build não funcionará corretamente, devido ao stack ghci não executar ferramentas de construção como Alex e Happy. Portanto, os módulos de analisador não serão construídos e você receberá um erro depois de criar os outros módulos. Você pode trapacear um pouco e executar stack build até ver Building library for [...] (= o pré-processamento terminou) e, em seguida, pressione <Ctrl-C> para interromper a compilação e executar stack ghci como de costume.
Apoiamos a versão mais recente recomendada do CABAL (a partir de 2021-09-17, Cabal 3.4)
cabal build
Os testes de unidade são armazenados no test . Execute com stack test ou cabal test .
O FORTRAN-SRC está disponível em hackage e empilhamento; portanto, para projetos de cabala ou pilha, você deve adicionar apenas fortran-src às dependências do seu projeto.
Se você precisar de uma versão específica do fortran-src em uma configuração de pilha, poderá encher uma referência de hackage no stack.yaml usando extra-deps , como:
resolver : ...
...
extra-deps :
- ...
- fortran-src-$VERSIONSe você tiver Cabal configurado corretamente, poderá instalar o Fortran-SRC a partir do hackage:
cabal install fortran-src
Fornecemos binários pré -construídos para algumas plataformas: consulte a guia Releases.
Caso contrário, você pode construir a partir da fonte e usar comandos de conveniência como cabal run , stack run . Consulte #Building para obter detalhes.
Congratulamo -nos com relatórios de bugs, correções e propostas de recursos. Adicione um problema ou crie uma solicitação de tração no repositório do GitHub.
Você pode encontrar mantenedores na rede de libera.Chat IRC. Verifique #fortran-src e #camfort. Caso contrário, você poderá entrar em contato com uma das equipes na página da equipe Camfort - ou criar um problema descrevendo seu problema e teremos uma olhada.
Veja doc/maintainers.md em Camfort/Camfort.