RDoc を用いた Fortran90/95 プログラムのドキュメント生成

Slides:



Advertisements
Similar presentations
1 プリミティブ Web サービスの 入出力データに関する一考察 2005 年 3 月 21 日 松江工業高等専門学校 情報工学科 奈良先端科学技術大学院大学 情報科学研究科 越田高志 電子情報通信学会 2005年総合 大会.
Advertisements

1 情報基礎 A 第 9 週 プログラミング入門 VBA の基本文法 1 準備・変数・データの入出力 徳山 豪・全 眞嬉 東北大学情報科学研究科 システム情報科学専攻 情報システム評価学分野.
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
Doxygen ~ IGModel を一例にした, 数値モデルのドキュメンテーションにおける Doxygen の利用
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
JPAを利用した RESTful Webサービスの開発
プログラミング言語としてのR 情報知能学科 白井 英俊.
IO - 入出力 小西 亨.
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
数値モデルの出力データをどのように取り扱っているか?
背景 我々の研究室で開発しているJavaプログラム解析フレ ームワークでは,解析情報はメモリ上に保持される 問題点
Javaのための暗黙的に型定義される構造体
侵入検知システムの構築と ログの可読性向上
第13回構造体.
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
数値計算及び実習 第3回 プログラミングの基礎(1).
Step-by-Step Guide on How to Start ALICE Analysis
早稲田大学大学院理工学研究科 情報科学専攻修士2年 後藤滋樹研究室 坂本義裕
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
スペクトル法による数値計算の原理 -一次元線形・非線形移流問題の場合-
最適化ソルバーのための Python言語入門
情報伝播によるオブジェクト指向プログラム理解支援の提案
ASP.NET開発標準化を考えてみよう! わんくま同盟 東京勉強会# /03/15 mxb & 片桐継.
ASP.NET開発標準化を考えてみよう! わんくま同盟 東京勉強会# /03/15 mxb & 片桐継.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
シミュレーション物理5 運動方程式の方法: サブルーチンの使い方.
構造体.
davis / gtool4 プロジェクト その背景と野望
変数のスコープの設計判断能力 を育成するプログラミング教育
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
ML 演習 第 7 回 新井淳也、中村宇佑、前田俊行 2011/05/31.
PHPの基礎と開発手法 Based on PHP5
アスペクト指向プログラミングを用いたIDSオフロード
入出力データ型に透過な Webサービス動的実行システム 松江工業高等専門学校 情報工学科 越田高志 情報処理学会第68回全国大会
SPMODEL - ISPACK と gt4f90io による数値モデル開発 -
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
その他の図 Chapter 7.
FlexとBison+アルファ -実習編-
暗黙的に型付けされる構造体の Java言語への導入
ローカル変数とグローバル変数 ローカル変数  定義された関数内だけで使用できる変数 グローバル変数 プログラム全体で使用できる変数.
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
UML関係のTIPS 2008年5月26日 2010年5月16日改訂 海谷 治彦.
Java8について 2014/03/07.
情報処理Ⅱ 第2回:2003年10月14日(火).
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
C言語 はじめに 2016年 吉田研究室.
統合開発環境によって表現された 言語機構によるコードのモジュール化
C#プログラミング実習 第3回.
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
JAVA入門⑥ クラスとインスタンス.
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
コンパイラ 2012年10月11日
プログラミング 4 文字列.
PROGRAMMING IN HASKELL
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
情報処理Ⅱ 第2回 2004年10月12日(火).
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
プログラム理解のための 付加注釈 DocumentTag の提案
情報処理Ⅱ 小テスト 2005年2月1日(火).
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

RDoc を用いた Fortran90/95 プログラムのドキュメント生成 北海道大学 理学研究科 地球惑星科学専攻 地球流体力学研究室 D1 森川 靖大 /25

(大) 目標 可読性・可変性に優れた大気大循環モデル (GCM) を作る こんな GCM にできると良いな・・・ /25 可読性・可変性に優れた大気大循環モデル (GCM) を作る 可読性:ソースコードの読み書きが簡単 可変性:物理過程の交換や分離, 力学過程の変更が簡単 こんな GCM にできると良いな・・・ お手軽に動かせる GCM カスタマイズが簡単にできるGCM

可読性・可変性に必要なのは・・・? ソースコードの書き方の工夫 プログラムの構造の工夫 ドキュメントの整備の工夫 /25 ソースコードの書き方の工夫 例: 気象庁コーディングルール, AGCM5, FMS マニュアル, GFD Dennou Club dcmodel コーディングルール プログラムの構造の工夫 例: FMS, DCPAM (spml, gt4f90io, ISPACK) ドキュメントの整備の工夫

はじめに ドキュメントの重要性 Fortran による数値モデルのドキュメント 第三者への提供 (プログラムの利用) /25 ドキュメントの重要性 第三者への提供 (プログラムの利用) 開発や保守の効率化 (プログラムの改変) Fortran による数値モデルのドキュメント 数理、離散化ドキュメント :: TeX 数式の記述に最適 リファレンスマニュアル :: HTML Web からの参照に最適、ハイパーリンクが便利

リファレンスマニュアルの作成 何が厄介かというと... 過去に行われた工夫 そこで プログラムとマニュアルを別々に用意するのは面倒 /25 何が厄介かというと... プログラムとマニュアルを別々に用意するのは面倒 プログラムで書いたものをもう一度書くのは面倒 Java や Ruby では、JavaDoc や RDoc があるが、Fortran の規格にはドキュメント生成機能は無い... 過去に行われた工夫 XML を用いた FMS (GFDL)の試み RD を用いた我々のこれまでの試み そこで RDoc を用いた Fortran ソースコードの自動解析

XML を用いた FMS (GFDL)の試み Fortran95 に XML のドキュメントを埋め込む /25 Fortran95 に XML のドキュメントを埋め込む FMS (Flexible Modeling System: GFDL) で試行 FMS 謹製のツールで HTML へ変換 Fortran95 ソースコード ! <SUBROUTINE NAME=“module_name_init"> ! <OVERVIEW> ! モジュールの初期化 ! </OVERVIEW> ! <TEMPLATE> ! module_name_init (inchar, outint) ! </TEMPLATE> : ! </SUBROUTINE> module module_name_mod ! <OVERVIEW> ! module_name_mod の概要 ! </OVERVIEW> implicit none private public :: module_name_init, module_name_end ! <SUBROUTINE NAME=“module_name_init"> ! モジュールの初期化 ! <TEMPLATE> ! module_name_init (inchar, outint) ! </TEMPLATE> ! <IN NAME=“inchar” TYPE=“character” > ! 文字型の入力変数 ! </IN> ! <OUT NAME=“outint” TYPE=“integer” > ! 整数型の出力変数 subroutine module_name_init(inchar, outint) character(*) , intent(in) :: inchar integer(INTKIND), intent(out) :: outint end subroutine module_name_init ! </SUBROUTINE> end module module_name_mod XML でコメントを記述する このコメント部分を抜き出し、XMLから HTML マニュアルを作成

XML を用いた FMS (GFDL)の試み Fortran95 に XML のドキュメントを埋め込む /25 Fortran95 に XML のドキュメントを埋め込む FMS (Flexible Modeling System: GFDL) で試行 FMS 謹製のツールで HTML へ変換 利点 XML の利用により、構造的なマニュアルを作成することが出来る 欠点 XML のタグで Fortran コードが汚くなる 手続き名や引数をコードとマニュアルで 2 度書く必要あり

RD を用いた我々のこれまでの試み Fortran95 に RD 形式のコメントを埋め込む RD を用いることでタグが簡潔に /25 Fortran95 に RD 形式のコメントを埋め込む RD を用いることでタグが簡潔に rdtool によって RD を HTML に変換 Fortran95 ソースコード !=begin ~ !=end の部分をマニュアルに反映 コメントには RD の文法を利用。見出しやリストは “=” や “*” で簡潔に表現 引用仕様 (引数の名前と型など) に関するソースコードをそのままマニュアルへ !=begin != Module module_name_mod : Sample module ! * Developers: Yasuhiro Morikawa !== Overview !module_name_mod の概要 !=end module module_name_mod implicit none !== Public Interface private public :: module_name_init, module_name_end !== Procedure Interface !=== Subroutine module_name_init : モジュールの初期化 !NAMELIST を入力し、グローバル変数を allocate する。 subroutine module_name_init(inchar, outint, inoutdata) !==== Input character(*) , intent(in) :: inchar !==== Output integer(INTKIND), intent(out) :: outint end subroutine module_name_init end module module_name_mod !=begin : !=end ① != Module .. ! * Develop.. !== Overview ② !=begin : subroutine .. char.., int.. !=end ③

RD を用いた我々のこれまでの試み Fortran95 に RD 形式のコメントを埋め込む ソースコード自動解析の必要性 利点 欠点 /25 Fortran95 に RD 形式のコメントを埋め込む 利点 ソースとマニュアルとで 2 度書く手間を軽減 XMLタグと比較してソースが汚れない 欠点 モジュール間の依存関係を解釈不能 複数のファイルを同時に解析しないと不可能 ソース内のタグ (“=begin” 等) はやっぱりそれなりに汚い ソースコード自動解析の必要性

RDoc とは 何ぞや? Fortran90/95 との関係は? 利点は? /25 何ぞや? Ruby で書かれたソースコードからドキュメントを自動生成する Ruby の標準ライブラリ Fortran90/95 との関係は? ソースコード解析機構とマニュアル生成機構が分離しているため、 他の言語で書かれたソースコードも解析可能 標準で C および Fortran95 用の解析機構が付属 利点は? RD の利点 (マニュアルのソースへの埋め込み) を引継ぎ、欠点 (タグの簡素化、依存関係の解釈) を克服

ソースコード、マニュアルの形式に拠らないオブジェクト RDoc によるドキュメント生成の流れ /25 RDoc CodeObject Generators Parsers HTML Generator Ruby Parser C Parser XML Generator ソースコード、マニュアルの形式に拠らないオブジェクト Fortran95 Parser Reference manual XML HTML Source code Ruby C F95

Fortran95 Parser (オリジナル版) /25 Fortran90/95 の文法を解釈 RDoc のタグは RD よりもさらに簡潔 別ファイル内のモジュール等へ自動的にリンク作成 Fortran95 ソースコード != Module module_name_mod : Sample module ! Authors:: Yasuhiro MORIKAWA ! ! This module depends base_mod module module sample_mod use base_mod implicit none private public :: sample_init, sample_end, Const real(8) :: Const = 3.14 subroutine sample_init(inchar, outint) character(*) , intent(in) :: inchar integer(INTKIND), intent(out):: outint end subroutine sample_init subroutine sample_end(err) logical, intent(inout) :: err end subroutine sample_end end module sample_mod != Module .. ! Authors:: .. ① RDoc のタグは “=“ や “::” で表記 (RD に近い文法) module 文, use 文, subroutine 文を解釈。別ファイルのモジュールへのリンクを自動で作成 use base_mod : module module_.. subroutine mo.. end subrou.. end module modu.. ②

Fortran95 Parser (オリジナル版) /25 Fortran90/95 の文法を解釈 RDoc のタグは RD よりもさらに簡潔 別ファイル内のモジュール等へ自動的にリンク作成 HTML のリファレンスマニュアル Fortran95 ソースコード Files Classes Methods sample.f90 base.f90 sample_mod base_mod sample_init sample_end Class sample_mod In: sample.f90 Module sample_mod : Sample module Authors: Yasuhiro MORIKAWA This module depends base_mod module Methods a sample_init sample_end Included Modules a Public instance methods a sample_init (inchar, outint) [source] sample_end (err) != Module module_name_mod : Sample module ! Authors:: Yasuhiro MORIKAWA ! ! This module depends base_mod module module sample_mod use base_mod implicit none private public :: sample_init, sample_end, Const real(8) :: Const = 3.14 subroutine sample_init(inchar, outint) character(*) , intent(in) :: inchar integer(INTKIND), intent(out):: outint end subroutine sample_init subroutine sample_end(err) logical, intent(inout) :: err end subroutine sample_end end module sample_mod ハイパーリンク Rdoc

Fortran95 Parser の問題点 /25 解析機能の不足 サブルーチンの 引数の型を表示できない

Fortran95 Parser の問題点 /25 解析機能の不足 サブルーチンの 解説コメントを表示 できない

Fortran95 Parser の問題点 解析機能の不足 public, private を 区別できない /25 解析機能の不足 public, private を 区別できない (全て public 扱いになる)

Fortran95 Parser の問題点 解析機能の不足 そもそも表現できない要素いろいろ 関数 (function 文) /25 解析機能の不足 そもそも表現できない要素いろいろ 関数 (function 文) モジュールが公開する変数, 定数 構造体 (type 文) 利用者定義演算子 (operator) 利用者定義代入 (assignment) 総称手続き (interface 文) etc …

問題点の解決に向けて 開発者・メンテナに連絡 しょうがないので (?) 自力で改造 森川 「こうなると嬉しいのだけど」と連絡 /25 開発者・メンテナに連絡 森川 「こうなると嬉しいのだけど」と連絡 開発者 「メンテナさんに連絡しておいたよ」 メンテナ 「… (返事来ず)」 ※ 後に連絡がつき, 以降で紹介する改良版のパッチを送付. 2005/02/16 現在, まだコミットはされていない模様 しょうがないので (?) 自力で改造 見た感じで足りないと思うところから五月雨的に解析機能追加

Fortran95 Parser (強化版) /25 構造体の解析 要素、要素の型、解説の表示

Fortran95 Parser (強化版) /25 定数の解析 型、初期値、解説の表示

Fortran95 Parser (強化版) /25 関数の解析 解説の表示

Fortran95 Parser (強化版) /25 引数の解析 型、解説の表示

Fortran95 Parser (強化版) /25 public, private を区別

Fortran95 Parser (強化版) /25 変数の解析 型、初期値、解説の表示

まとめ RDoc はかなり便利 RDoc の Fortran95 Parser を改良 強化版パッチの公開アドレス 使用例 /25 RDoc はかなり便利 RDoc の Fortran95 Parser を改良 Fortran90/95 ソースコードからリファレンスマニュアルを自動生成 強化版パッチの公開アドレス http://www.gfd-dennou.org/library/dcmodel パッチを当てたパッケージも配布してます コメントの書法等の解説あります 使用例 http://www.gfd-dennou.org/library/gtool4 http://www.gfd-dennou.org/library/dcpam

参考資料 数値モデリングプロジェクト dcmodel オブジェクト指向スクリプト言語 Ruby /25 数値モデリングプロジェクト dcmodel http://www.gfd-dennou.org/library/dcmodel/ オブジェクト指向スクリプト言語 Ruby http://www.ruby-lang.org Fortran からドキュメントを自動生成するツール f90tohtml http://mensch.org/f90tohtml/ f90doc http://theory.lcs.mit.edu/~edemaine/f90doc/ 惑星大気モデル DCPAM http://www.gfd-dennou.org/library/dcpam/ FMS (Flexible Modeling System) http://www.gfdl.noaa.gov/~fms/ The FMS Manual http://www.gfdl.noaa.gov/~vb/FMSManual/ 気象庁 Fortran コーディングルール http://www.mri-jma.go.jp/Project/mrinpd/coderule.html

付録 /25

AGCM5, FMS /25 AGCM5 (沼口, 1992; SWAMP Project, 1998; http://www.gfd-dennou.org/arch/agcm5) FORTRAN77 で可読性向上の工夫 変数命名規則 プログラム書法を工夫 リファレンスマニュアルを整備 FORTRAN77 の制約大 FMS (Flexible Modeling System; Geophysical Fluid Dynamics Laboratory , 2005) モデルの可変性向上の工夫 Infrastructure:データI/O, 並列化, 機種依存性の吸収をサポート Superstructure: 大気・海洋・氷床 モデルの結合をサポート User Code の可読性・可変性は? ・これまでにも可変性や可読性にこだわったモデルはありました。 ・AGCM5はCCSR-NIESモデルのプロトタイプのモデルです。いろいろ工夫して可読性を向上させましたがF77なので限りがありました。(3点を目立たせるように) ・FMS は便利です。 User Code はこんなものでここにいれるとあら便利。でも User Code にあたる部分をやらないとさっきみたいな実験が簡単になりません。 『これまでに可読性・可変性を重視してきたモデルの1つとして、AGCM5 があります。このモデルは変数の命名法を決めてみたり、プログラム書法を工夫したり、ドキュメントをしっかり整備するなどしたお陰で結構良かったのですが、FORTRAN77 だったので、物理過程・力学コアといったものを簡単に変更するには難しいモデルでした』 『一方、現在、GFDLという研究機関では、FMS という統合気候モデルの基盤フレームワークが構築されつつあります。このシステムは、このようなサンドイッチ構造になっており、このUser Code の部分に各自研究者が自分のモデルを挟むようにして利用することでデータI/Oや並列化、モデルの結合を容易に行えるようになっています。このフレームワークもまた素晴らしいわけですが、先のような比較惑星の実験に際しては、この User Code にあたる部分の可読性や可変性が必要となるため、ちょっとこのモデルでも難しいという現状です。』 ----------------------------------------- 『これまでに可読性・可変性を重視してきたモデルの1つとして、AGCM5 があります。このモデルは現在のCCSR/NIES AGCM のプロトタイプでもあるモデルで、変数の命名やコーディング規則を設けたり、ドキュメントをしっかり整備するなど、非常に素晴らしいのですが、残念ながらFORTRAN77 であったため、物理過程・力学コアといったものを簡単に変更するには難しいモデルでした』 Superstructrue と infrastructure を簡単に データ入出力や並列化といったものを受け持つ Infrastructure という部分と、大気・海洋・氷床など、別々の領域のモデルの結合を受け持つ Superstructure 部分でなりたち、FMS を用いる人はその間に自身のモデルを挟む形で利用することとなります。このフレームワークもまた素晴らしいと思うのですが、僕が必要とするのは User Code にあたる部分の可読性や可変性にこだわらなくてはいけません。』 FMS Superstructure User Code FMS Infrastructure

DCPAM サブルーチンや関数は必ずモジュールにまとめることで, 個々のプログラムの着脱を容易に 初期化の手順の統一により交換・分離を容易に /25 サブルーチンや関数は必ずモジュールにまとめることで, 個々のプログラムの着脱を容易に 初期化の手順の統一により交換・分離を容易に 必ず module_init というサブルーチンにより初期化 (module は各モジュール名) ファイル名、モジュール名、サブルーチン名の命名規則 [The FMS Manual (Baraji, 2002)] ファイル名 : module.f90, 例: dynamics.f90 モジュール名 : module_mod, 例: dynamics_mod サブルーチン名: module_init, 例: dynamics_init

[ISPACK Fortran90 インターフェース] DCPAM /25 プリミティブモデル主プログラム DCPAM モジュール群 力学演算モジュール [dynamics_mod] 時刻管理モジュール [time_mod] 座標軸設定モジュール [axis_type_mod, …] など … SPMODEL (竹広 他, 2005) [ISPACK Fortran90 インターフェース] ISPACK (石岡, 2005) [スペクトル演算] gt4f90io (森川 他, 2005) [データ入出力] 本研究のモデル (DCPAM) の構造

XML を用いた FMS (GFDL)の試み Fortran95 に XML のドキュメントを埋め込む /25 Fortran95 に XML のドキュメントを埋め込む FMS (Flexible Modeling System: GFDL) で試行 FMS 特製のツールで HTML へ変換 HTML のリファレンスマニュアル Fortran95 ソースコード Module module_name_mod OVERVIEW module_name_end の概要 PUBLIC INTERFACE module_name_init: モジュールの初期化 PUBLIC ROUTINES a. module_name_init call module_name_init ( inchar, outint ) INPUT inchar 文字型の入力変数 [character] OUTPUT outint 整数型の出力変数 [integer] module module_name_mod ! <OVERVIEW> ! module_name_mod の概要 ! </OVERVIEW> implicit none private public :: module_name_init, module_name_end ! <SUBROUTINE NAME=“module_name_init"> ! モジュールの初期化 ! <TEMPLATE> ! module_name_init (inchar, outint) ! </TEMPLATE> ! <IN NAME=“inchar” TYPE=“character” > ! 文字型の入力変数 ! </IN> ! <OUT NAME=“outint” TYPE=“integer” > ! 整数型の出力変数 subroutine module_name_init(inchar, outint) character(*) , intent(in) :: inchar integer(INTKIND), intent(out) :: outint end subroutine module_name_init ! </SUBROUTINE> end module module_name_mod

RD を用いた我々のこれまでの試み Fortran95 に RD 形式のコメントを埋め込む /25 Fortran95 に RD 形式のコメントを埋め込む rdtool によって RD を HTML に変換 HTML のリファレンスマニュアル Fortran95 ソースコード !=begin != Module module_name_mod : Sample module ! * Developers: Yasuhiro Morikawa !== Overview !module_name_mod の概要 !=end module module_name_mod implicit none !== Public Interface private public :: module_name_init, module_name_end !== Procedure Interface !=== Subroutine module_name_init : モジュールの初期化 !NAMELIST を入力し、グローバル変数を allocate する。 subroutine module_name_init(inchar, outint, inoutdata) !==== Input character(*) , intent(in) :: inchar !==== Output integer(INTKIND), intent(out) :: outint end subroutine module_name_init end module module_name_mod ① rdtool ②

CodeObject ソースコード内の情報を階層的に保持するためのオブジェクト 継承の関係 CodeObject : 共通する情報 /25 ソースコード内の情報を階層的に保持するためのオブジェクト CodeObject : 共通する情報 TopLevel : ファイルの情報 ClassModule : クラス、モジュールの情報 AnyMethod: メソッドの情報 継承の関係 CodeObject TopLevel ClassModule AnyMethod

ソースコード ⇒ CodeObject ソースコード内の情報を TopLevel, ClassModule, AnyMethod へ /25 ソースコード内の情報を TopLevel, ClassModule, AnyMethod へ Source code 個々のファイル毎に、クラス・モジュール・メソッドの定義、クラスの継承関係、クラス・モジュールの依存関係を抽出 Parsers TopLevel TopLevel TopLevel ClassModule ClassModule ClassModule AnyMethod AnyMethod AnyMethod AnyMethod AnyMethod AnyMethod AnyMethod

CodeObject ⇒ マニュアル HTML 等のドキュメントを生成 TopLevel TopLevel TopLevel /25 HTML 等のドキュメントを生成 TopLevel TopLevel TopLevel ClassModule ClassModule ClassModule AnyMethod AnyMethod AnyMethod AnyMethod AnyMethod AnyMethod AnyMethod Generators 全てのオブジェクトを集約した後、リファレンスマニュアルを生成 Reference manual XML HTML

Fortran95 Parser (強化版) 解析機能の強化の具体例 公開要素と非公開要素の区別 構造体 公開定数、 公開変数 /25 解析機能の強化の具体例 Fortran95 ソースコード != Module sample_mod : Sample module ! Authors:: Yasuhiro MORIKAWA ! module sample_mod use base_mod ! sample_mod の概要 implicit none private public :: sample_init, sample_func, const, TYPE_A private:: internal type TYPE_A ! 構造体の解説 integer :: counter ! 構造体内部の変数の解説 end type TYPE_A real(8), parameter :: const = 3.14 ! 公開定数 integer, save :: internal ! 非公開変数 subroutine sample_init(inchar, outint) ! 初期化サブルーチン character(*) , intent(in) :: inchar ! 入力変数 integer(INTKIND), intent(out):: outint ! 出力変数 end subroutine sample_init function sample_func(log) result(res) ! 関数 logical, intent(in) :: log ! 論理型入力変数 logical :: res ! 論理型の返り値 end function sample_func end module sample_mod public:: samp... private:: inte... ① 公開要素と非公開要素の区別 構造体 公開定数、 公開変数 サブルーチン、関数のコメント 引数の型、 コメント 関数 type TYPE_A ... ② real(8), parame.. Integer, save.. ③ ! 初期化... ④ char.. ! 入力.. integer.. ! 出力.. ⑤ function samp... : end function .. ⑥

Fortran95 Parser (強化版) 解析機能の強化 解析可能になった要素のリスト 大文字小文字の違いを無視 /25 解析機能の強化 解析可能になった要素のリスト 関数 (function 文) サブルーチンや関数の引数の型 モジュールが公開する変数, 定数 構造体 (type 文) NAMELIST 文 利用者定義演算子 (operator), 利用者定義代入 (assignment) 上記要素のコメント文 総称手続き (interface 文) 公開要素と非公開要素との区別 孫引きされている公開要素 大文字小文字の違いを無視