fortranコードのレクシング/解析と初期の静的分析を提供します。次のFortran標準について説明します。
解析は構成可能であり、非標準のFortran 77用の特別な拡張モードを含む、ターゲットにターゲットをターゲットにするFortran標準を選択できます。
データフローと基本的なブロック分析、ルネマー、およびタイプ分析が含まれます。
このパッケージは主にHaskellライブラリをエクスポートしますが、テストとデバッグに使用できる実行可能ファイルも構築します。たとえば、Fortran-SRCをフロントエンドとして使用するCamfortプロジェクトを参照してください。
Windows、Mac、Linux用の事前に構築されたバイナリを提供しています。
Haskellプロジェクトの依存関係としてfortran-srcを追加します。私たちはハッキングをしており、積み上げを行っています。
コマンドラインでfortran-srcを呼び出すこともできます。
出力グラフの機能については、意図した使用法はコマンドdot -Tpdfにパイプし、それをPDFファイルにリダイレクトすることです。 dotコマンドはGraphVizプロジェクトの一部です。視覚化のために調査できる他の多くのオプションについては、マニュアルをご覧ください。
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
--fortranVersionフラグを渡さない場合、バージョンはファイル名から推測されます。
*.fで終了するファイルは、拡張されたFortran 77構文で解析されます。*.f90で終了するファイルは、fortran 90構文(および*.f2003 / *.f03 、 *.f2008 / *.f08 )で解析されます。*.fファイルのように解析されます。 GMPライブラリとヘッダーファイルが必要です。多くのプラットフォームでは、これはパッケージlibgmp-devを介して行われます。
Haskell Libraryの依存関係は、 package.yamlにリストされています。 Fortran-SRCは、スタックまたはカバルを備えた建物をサポートしています。
Fortran-SRCは、GHC 9.0からGHC 9.4をサポートしています。少なくとも最小および最大サポートされているGHCを定期的にテストします。リリース前/新しいリリースには問題がある可能性があります。より広い範囲のコンパイラをサポートできる修正を歓迎します。
Fortran-SRCを構築するには、少なくとも3ギブのメモリが必要になる可能性があります。
GHCとビルドツールをインストールするには、GHCUPを強くお勧めします。
最新の推奨が使用される場合、GHCUPがrecommendedツールの最新バージョンを意味します。これは、 latestタグ付きバージョンの背後に遅れることがあります。 GHCUPがインストールされていると、 ghcup listを実行して、よりよく理解します。
関連するツールを提供するOSの一般ガイドは次のとおりです。問題がある場合は、 .github/workflowsでCIワークフローファイルをチェックすることを検討してください。
Stackの最新バージョン(2021-09-17、Stack 2.7の時点)をサポートしています。通常、スタック2.xは動作するはずです。 (Stack 1.xはマイナーな代替で動作する場合があります - リゾルバーを手動でダウンロードする必要がある場合があります。)
stack build
インタラクティブなシェルの場合:
stack build
stack ghci
stack buildを実行する前にstack ghciを実行することは、 stack ghci AlexやHappyなどのビルドツールを実行していないため、適切に機能しないことに注意してください。そのため、パーサーモジュールは構築されず、他のモジュールを構築した後にエラーが発生します。 Building library for [...]が表示されるまで、少しチートしてstack buildを実行してから、 <Ctrl-C>を押して、通常どおりビルドを停止してstack ghciを実行します。
Cabalの最新の推奨バージョンをサポートしています(2021-09-17、Cabal 3.4)
cabal build
ユニットテストはtestに保存されます。 stack testまたはcabal testで実行します。
FORTRAN-SRCはハッキングと積み上げで利用できます。そのため、CabalまたはStackプロジェクトでは、プロジェクトの依存関係にfortran-src追加するだけです。
StackセットアップにFortran-SRCの特定のバージョンが必要な場合は、以下のようなextra-depsを使用してHackage Referenceをstack.yamlに詰めることができます。
resolver : ...
...
extra-deps :
- ...
- fortran-src-$VERSIONCabalを適切に構成している場合は、HackageからFortran-SRCをインストールできるはずです。
cabal install fortran-src
一部のプラットフォームに事前に構築されたバイナリを提供します。[リリース]タブを参照してください。
それ以外の場合は、ソースから構築し、 cabal run 、 stack runなどの便利なコマンドを使用できます。詳細については、#Buildingを参照してください。
バグのレポート、修正、機能の提案を歓迎します。問題を追加するか、GitHubリポジトリにプルリクエストを作成します。
Libera.chat IRCネットワークでメンテナーを見つけることができる場合があります。 #fortran-srcと#camfortをチェックインします。それ以外の場合は、Camfortチームページでチームの1つと連絡を取るか、問題を説明する問題を作成すると、見てみましょう。
Camfort/Camfortのdoc/maintainers.mdを参照してください。