ドキュメントジェネレータ 詳細仕様 長谷川啓 2019.01.25.

Slides:



Advertisements
Similar presentations
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
Advertisements

アルゴリズムとデータ構造 第2回 線形リスト(復習).
配列の宣言 配列要素の初期値 配列の上限 メモリ領域 多次元配列 配列の応用
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
5.データ構造入門 5-1.連結リスト(Linked List) 5-2.スタック(Stack) 5-3.キュー(Queue)
ISD実習E 2009年6月29日 LISPシステム入門 (第5回) 関数ポインタ eval システム関数.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
データ構造とアルゴリズム 第10回 mallocとfree
プログラミング入門2 ポインタについて補足 構造体 第11回 芝浦工業大学情報工学科 青木 義満、篠埜 功
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング演習(2組) 第12回
構造体.
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
情報処理Ⅱ 2007年12月10日(月).
アルゴリズムとデータ構造 第2回 線形リスト(復習その2).
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
ファイル操作と文字列の利用.
プログラミング 3 構造体(1).
プログラミング論 関数ポインタ と 応用(qsort)
関数と配列とポインタ 1次元配列 2次元配列 配列を使って結果を返す 演習問題
第10章 これはかなり大変な事項!! ~ポインタ~
アルゴリズムとデータ構造 補足資料5-2 「サンプルプログラムsetop.c」
プログラミング入門2 第11回 情報工学科 篠埜 功.
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
第11回 プログラミングⅡ 第11回
デジタル画像とC言語.
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
データ構造と アルゴリズム 第六回 知能情報学部 新田直也.
一時的な型 長谷川啓
フロントエンドとバックエンドのインターフェース
型の compatibility とポインタ演算
再帰的手続き.
プログラミング 4 木構造とヒープ.
記号表の検索と登録 長谷川啓
配列変数とポインタ 静的確保と動的確保 ポインタ配列 2次元配列 時間計測 第1回レポートの課題
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
構造体と共用体.
6.データ構造入門 6-1.連結リスト(Linked List) 6-2.スタック(Stack) 6-3.キュー(Queue)
データ構造とアルゴリズム 第11回 リスト構造(1)
C++ 構文解析 構文解析器の状態保存と復元
参照されないリテラル 長谷川啓
プログラミング 3 2 次元配列.
文字列へのポインタの配列 static char *lines[MAXLINES]; lines[0] NULL
ポインタとポインタを用いた関数定義.
R8C I/Oポートの仕組み SFR定義ファイルの中身.
ネットワーク・プログラミング Cプログラミングの基礎.
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
X64 函数呼び出し規約 長谷川啓
Inline 展開のアルゴリズム 長谷川啓
コンパイラ 第12回 実行時環境 ― 変数と関数 ― 38号館4階N-411 内線5459
全体の流れ 画像ファイルを開き,画像データをメモリ上にロード メモリ上にロードした画像データに処理を加える
プログラミング演習I 2003年6月11日(第9回) 木村巌.
:: の扱い 長谷川啓.
情報処理Ⅱ 2005年11月25日(金).
ドキュメントジェネレータ doclink 設計メモ
プログラミング演習II 2003年11月19日(第6回) 木村巌.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
マスク合成(のような処理) 出力画像 Out 入力画像1 In1 In1 In2 Out 入力画像2 In
左右反転と180度回転 [0][xsize – 1] [0][0] → i ↓ j [ysize – 1][xsize – 1]
プログラミング入門2 第5回 配列 変数宣言、初期化について
情報処理Ⅱ 小テスト 2005年2月1日(火).
情報処理Ⅱ 第8回:2003年12月9日(火).
デフォルト引数 長谷川啓.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

ドキュメントジェネレータ 詳細仕様 長谷川啓 2019.01.25

生成方法例 プログラム hcpp.exe -o a.i a.c -L a.j ... ソースファイル a.c b.c c.c ヘッダーファイル d.h hcpp.exe -o a.i a.c -L a.j hcc1.exe -o a.x a.i --generator /home/hase/docgen.dll ... doclink.exe -o mydoc.tex a.j a.x b.j b.x c.j c.x --exclude-dir /usr/include

ドキュメントの順序 入力ファイルの順 同じファイル内なら定義 or 宣言順 マクロ < 構造体等 < Typedef 名 < 変数 < 函数 前ページの生成方法例なら以下の順 a.j のマクロ b.j のマクロ c.j のマクロ a.x の構造体等 b.x の構造体等 c.x の構造体等 a.x の Typedef 名 b.x の Typedef 名 c.x の Typedef 名 a.x の変数 b.x の変数 c.x の変数 a.x の函数 b.x の函数 c.x の函数 呼び出し相関図

変数の例 FUNC_PTR func_tbl[] = { &add, &sub, &function_with_very_...long_name ... 変数の定義位置のプログラムテキストをそのまま参照 定義位置が複数行にまたがる場合は最大 L-1 行までにして、L 行目は ... にする ドキュメントの固定の幅を超える場合は途中を ... にする 定義 a.c:30 宣言 d.h:100 参照箇所 enter_func leave_func b.c:50 register_callback_function_with_very_...very_long ... /******************************* * 函数テーブル * この配列は register_callback_function_with... * でコールバック函数の登録に使用されるが、... ... 函数で参照される場合は函数名 変数の初期値でアドレスが参照さ れる場合は変数名 それ以外はファイル位置 最大 M 行まで 複数ある場合は最初の 1 つのみ 定義位置のコメント部分のプログラムテキストをそのまま参照 コメントがない場合は空行 最大 N 行まで L+M+N+2 が 1 ページに収まるようにする

typedef 名の例 変数と違うのは宣言がないこと typedef int FUNC(int); // このコメントはそのまま 定義 a.h:15 参照 a.c:20 b.c:30 c.c:40 /******************************* * コールバック函数の配列の要素 *******************************/ 変数と違うのは宣言がないこと

構造体の例 不完全型構造体 は除く タグ名のない構造体 は除く struct address { enum kind m_kind; /* 種別 */ int m_member_with_very_very_long_l..._name; uint8_t bytes[NBYTE]; // バイトデータ ... 構造体の例 宣言 d.h:500 不完全型構造体 は除く 参照箇所 getaddr add mul call div mod rsh lsh sub _goto a.c:70 _alloca // 3 番地コードのオペランド // を表現する構造体。 // スタック、静的変数、定数などを // 表す。 タグ名のない構造体 は除く typedef struct hoge_t { int a; char b[10]; } hoge; のような宣言に対しては構造体 hoge_t と typedef 名 hoge のドキュメントを出すようにする

マクロの例 #define my_va_arg(ap, T) \ (char*)ap += sizeof(T), \ /* compound_statement expression...使えば */ \ ... マクロの例 定義 d.h:789 参照箇所 a.c:5 a.c:7 a.c:12 b.c:34 d.h:1234 d.h:5678 // ap ポインタの指すアドレスから // 型 T の変数を読みだした値を返す // マクロ。読みだした後に ap を sizeof(T) 進める。 // これだとアラインメントがマズい

函数の例 uint32_t register_callbak_function_with_very_long_name(... FUNC_PTR* a, // ここのコメントはそのまま表示 ... 函数の例 函数の定義位置のプログラムテキストをそのまま参照 ボディの始まりの { の前まで 最大 X 行 定義 very_very_long_long_file_....name.c:1234567 宣言 directory1/directory2/direc.../lon...name.h:100 参照箇所 func1 func2 hoge.c:70 function_with_very_very_long_long_long_..._name ... 最大 Y 行まで /******************************* * コールバック函数を登録する * この函数は第 1 引数で指定された配列のアド... ... 定義位置のコメントのプログラムテキストをそのまま参照 コメントがない場合は空行 最大 Z 行まで 函数の流れグラフを配置する領域 X+Y+Z+2 が 1 ページに収まるようにする

隣以外で同じページのブロックの辺はこの位置に描く 函数流れグラフの例 e52 と e42 が重なってよいのはここだけ B1 ループの辺はこの位置に辺を描く B2 d d d 流れグラフ (コンパイラII pp646) 他のペ ージから複数の辺がある場合は1本にする B3 1 ページに定数個 の基本ブロックを 縦に等間隔で配置 する d d B4 B5, B9 B6

前のページのブロックからの辺はこの位置に描く B2 B3 B5 前のページのブロックからの辺はこの位置に描く d d B6 d 隣合うブロックの辺この位置に辺を描く B7 d d B8 B10

B2 B7 B9 d B10 d

遷移元の基本ブロックをテキストで書くが、入らなければ途中でちぎる e121,123 と e121,124 が重なってよいのはここだけ 他のページからの辺は1つにまとめる 遷移元の基本ブロックをテキストで書くが、入らなければ途中でちぎる e121,123 と e121,124 が重なってよいのはここだけ B60 B61 ... d B70 B... B121 B80 ... d d B90 . B122 d d d e121,123 と e80,123 が重なってよいのはここだけ B123 B124 e121,124 と e90,124 が重なってよいのはここだけ

呼び出し相関図の例 func00 葉に向かう辺をもつ 木構造にする func10 深さ優先でグラフを 描く func20 定義がない函数の呼び出しはこのようにする lib_func func32 func31 すでに func31 はグラフに現れているのでこうする func31 func00 再帰はこうなる

函数名が一定の幅に収まるように途中を...にする 呼び出し相関図の例 func00 func10 func_with_...20 func30 函数名がページにおさまらない場合は改ページする func31_wi... func21, func22 func11, func12, func13

呼び出し相関図の例 subr00 subr10 subr20 subr21 subr22 subr23 縦に収まらない場合は改ページする subr11 subr12 subr13 ...