ドキュメントジェネレータ doclink 設計メモ

Slides:



Advertisements
Similar presentations
コンピュータ演習 Excel 入門 岡田孝・山下雅啓 Excel の機能は膨大 その中のごく一部を紹介 表計算機能 – データの入力、表の作成、計算など グラフ機能 – 棒グラフ、円グラフなどグラフ作成 データベース機能 – 並べ替え(ソート)、検索、抽出など マクロ機能 – VBA で自動化したマクロを作成可能.
Advertisements

情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
バリデータ J2EE II 第11回 / 2006年1月19日.
ISD実習E 2009年6月29日 LISPシステム入門 (第5回) 関数ポインタ eval システム関数.
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
情報基礎演習I(プログラミング) 5月25日 水曜5限 江草由佳
データ構造とアルゴリズム 第10回 mallocとfree
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
画像ファイル(ppm)の読み書き 画像データ用のメモリ確保・解放
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
クラス図(1) 後半 FM13010 村上 太一.
構造体.
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
9 Microsoft Word(1).
問題 1 キーボードから入力した数の合計を計算するプログラムを 作成せよ。最初に、何個の数を入力するかその数を入力 するようにする。
情報処理Ⅱ 2007年12月10日(月).
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
画像ファイル(ppm)の読み書き 画像データ用のメモリ確保・解放
XSL-FO + MathML MathML表示、PDF生成、SVG生成
プログラミング 3 構造体(1).
Microsoft Office 2010 クイックガイド ~Word編~
Microsoft Office 2010 クイックガイド ~Word編~
FlexとBison+アルファ -実習編-
独習XML 第2章 XML文書の構成要素 2.1 XMLの文字と文字列 2.2 コメント
精密工学科プログラミング基礎 第10回資料 (12/18実施)
前回の練習問題.
第7回 プログラミングⅡ 第7回
第11回 プログラミングⅡ 第11回
エンタープライズアプリケーション II 第9回 / 2006年7月23日
一時的な型 長谷川啓
フロントエンドとバックエンドのインターフェース
型の compatibility とポインタ演算
記号表の検索と登録 長谷川啓
精密工学科プログラミング基礎Ⅱ 第5回資料 今回の授業で習得してほしいこと: 構造体 (教科書 91 ページ)
情報とコンピュータ 静岡大学工学部 安藤和敏
データ構造とアルゴリズム 第11回 リスト構造(1)
C++ 構文解析 構文解析器の状態保存と復元
参照されないリテラル 長谷川啓
プログラミング 3 2 次元配列.
ポインタとポインタを用いた関数定義.
情報処理Ⅱ 第2回 2005年10月14日(金).
情報処理Ⅱ 第2回 2006年10月13日(金).
第5回 プログラミングⅡ 第5回
精密工学科プログラミング基礎 第7回資料 (11/27実施)
ドキュメントジェネレータ 詳細仕様 長谷川啓
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
X64 函数呼び出し規約 長谷川啓
コンパイラ 2012年10月11日
Inline 展開のアルゴリズム 長谷川啓
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
全体の流れ 画像ファイルを開き,画像データをメモリ上にロード メモリ上にロードした画像データに処理を加える
:: の扱い 長谷川啓.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
第3回簡単なデータの入出力.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
第4回 配列.
情報処理Ⅱ 小テスト 2005年2月1日(火).
C言語講座第5回 2017 構造体.
第5回 配列.
情報処理Ⅱ 第8回:2003年12月9日(火).
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
デフォルト引数 長谷川啓.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
プログラミング 2 静的変数.
Presentation transcript:

ドキュメントジェネレータ doclink 設計メモ 2019.01.26 長谷川啓

プリプロセッサから受け取る情報 struct macro_t { }; vector<macro_t> macros; string m_name; // マクロ名 file_t m_def; // 定義位置 vector<file_t> m_refed; // 参照位置 }; vector<macro_t> macros; マクロ定義は同一ヘッダーに書けば複数の入力ファイルで重複する その場合は参照位置のみが増大する 稀に同一のマクロ名が異なるファイルで定義されることもある

docgen.dll から受け取る情報(1) 構造体等 struct tag_t { }; string m_name; // タグ名 file_t m_decl; // 宣言位置 vector<pair<string, file_t> > m_refed; // 参照位置 (函数名) }; vector<tag_t> tags; マクロと異なる点 多重定義はエラー コンパイラフロントエンドによりエラーになる doclink でのこのエラーの扱いは実装におまかせ

docgen.dll から受け取る情報(2) Typedef 名 struct type_t { }; string m_name; // typedef 名 file_t m_def; // 定義位置 vector<file_t> m_refed; // 参照位置 }; vector<type_t> types; 構造体等と異なる点 参照位置 ファイル名と行番号のみ

docgen.dll から受け取る情報(3) 変数 struct var_t { }; vector<var_t> vars; string m_name; // 変数名 file_t m_def; // 定義位置 vector<file_t> m_decls; // 宣言位置 vector<pair<string, file_t> > m_refed; // 参照位置(函数名, 変数名) }; vector<var_t> vars; マクロや構造体等と異なる点 宣言位置がある 宣言が先行し、定義が後にくることが一般的だが、定義が先のこともある。 多重定義はエラー リンカーによりエラーになるが、doclink で検出することも可能

docgen.dll から受け取る情報(4) 函数 struct func_t { }; string m_name; // 変数名 file_t m_def; // 定義位置 vector<file_t> m_decls; // 宣言位置 vector<pair<string, file_t> > m_refed; // 参照位置(函数名, 変数名) vector<pair<string, file_t> > m_call; // 呼び出し vector<pair<int, file_t> > m_vertices; // グラフの頂点 vector<pair<int,int> > m_edges; // グラフの辺 }; vector<func_t> funcs; 変数と異なる点 グラフ

定義やコメント doclink に渡されるのは名前、ファイル名、行番号のみ プログラムテキストをどのように拾うかは doclink 依存

ドキュメントのテキスト テキストのフォントは固定の等幅フォントを仮定する(簡単のため) テキストの占める領域 文字列 フォント 出力する文書の種類 から決定される

マクロ、構造体等、Typedef 名、変数、函数の流れグラフ以外 表は TeX の tabular 環境を使うと比較的簡単

函数の流れグラフ TeX の picture 環境でまずは実現 300 × 550 pt の領域 基本ブロックは 1 ページ当たり 6 個 基本ブロックの配置 基本ブロックの番号によってのみ決まる

相関図 struct tree { }; vector<tree*> result; string m_text; // テキスト(函数名) pair<int, int> m_point; // テキストの座標 enum box_t { NONE, UNDER, DASH, FRAME } m_box; // 枠 vector<tree*> m_children; }; vector<tree*> result; calc(result); // ページに収まるように(独自の)座標を計算 for (auto& t : result) conv(t); // 例えば TeX の座標に変換 for (const auto& t : figs) draw(t); // ここでは計算結果を出力するだけにする

相関図(2) 座標変換の意味 いきなり出力することができない これは TeX の座標系の左上が (0,0) でも同じこと \begin{picture}(300,550)(0,0) ^^^^^^^^ そもそもここが不明 \put(0, 550){\framebox{main}} ^^^ ここも不明 ... \end{picture} これは TeX の座標系の左上が (0,0) でも同じこと