Hichart研究会資料91−04 Hコード言語解説書 ver. 5.0 1991年3月 早稲田大学教育学部理学科数学専修 E7J045 小野木一樹 目次 1, 概要 2, HコードフローチャートとHコードフローグラフ 3, Hコード仮想リスト 4. Hコード ver5.0 のファイル説明 5, 内部表現 6, 参考文献 ☆ このファイルは完全なテキストファイルである。このファイルを正しく読み  込み、プリンターなどに印字したいときは、半角73文字/41行に設定とよ  い。また、ワープロなどに読み込んで編集するときは、罫線文字を文字接続・  行接続すればきれいに印刷されるでしょう.                   1 1, 概要  Hコードは,HICHART処理系におけるHICHARTフローチャートの 内部表現のための言語(中間言語)である.  Hコードフローチャートは,対応するHICHARTフローチャートの各セル に関する情報を表す,複数のリスト構造と配列によって表される.  次に,セルに関する情報を示す.  1) セルの種類(if,switchなどの別)  2) セルの相対位置(親セル,子セル,前者セルなど)  3) テキスト保存領域とそこへのポインタ(セル内の文字列ラベルなど)  4) セルの2次元座標における位置とセルの大きさ                   2 ☆ 準備: Hコードの対象となるHICHARTフローチャートとHコード      フローチャートグラフの関係は以下のもの. ver.4 の場合 (ダミーセルは補助的な役割として使われていた)   HICHARTフローチャート Hコードフローグラフ ・・・・・ ・・・・・ ・・・ 2 ・ ・・ 2 ・ ・・・・・・ ・・・・・ ・・・・・・・・・・・ ・ 1 ・・ ・・・・・ → ・ 1 ・・ ・ ・・・・・ ・・・・・・・・ 3 ・ ・・・・・・ ・ ・・ 3 ・ ・・・・・・・ ・・・・・・・・・・・・ ・・・・・・・ ・・ダミー・・・・・・・ ・・ 4 ・ ・・・・・・・ 4 ・ ・・・・・ ・・・・・ ver.5 の場合 (ダミーセルは親子の間に必ず1つ入れる) ・・・・・ ・・・・・ ・・・・・ ・・・ 2 ・ ・・ダミー・・・ 2 ・ ・・・・・・ ・・・・・ ・・・・・・・・・・・ ・・・・・ ・ 1 ・・ ・・・・・ → ・ 1 ・・ ・ ・・・・・ ・・・・・・・・ 3 ・ ・・・・・・ ・ ・・ 3 ・ ・・・・・・・ ・・・・・・・・・・・・ ・・・・・・・ ・・ダミー・・・・・・・ ・・ 4 ・ ・・・・・・・ 4 ・ ・・・・・ ・・・・・ ・・・・・ ・・・・・ ・・・・・ ・・・ 2 ・ ・・ダミー・・・ 2 ・ ・ ・・・・・ ・・・・・・ ・・・・・ ・ ・・・・・ ・ ・ ・・・・・ ・・・ 3 ・ ・・・・・・・・ 3 ・ ・・・・・・・ ・・ダミー・・・・・・・ ・・・・・・・・・・・・ ・・・・・・・・・・・・・・・・・ ・ 1 ・・・・ 4 ・ → ・ 1 ・・ ・ ・・ 4 ・ ・・・・・・ ・・・・・ ・・・・・・ ・ ・・・・・ ・ ・・・・・ ・ ・ ・・・・・ ・・・ 5 ・ ・・・・・・・・ 5 ・ ・・・・・・・ ・・ダミー・・・・・・・ ・・・・・・ ・・・・・・・・・・・ ・・ 6 ・ ・・ 6 ・ ・・・・・ ・・・・・                   3 2,HコードフローチャートとHコードフローグラフ  ver.5から,ダミーセルの扱いがかわる.  ver.4まででは,ダミーセルを挿入するのはあくまで表現できないような フローチャートを表現するための2次的なものであった.しかし,if文やsw itch文のような条件分岐の命令は,日常的なもので頻繁に出てくるものであ る.結果的にダミーセルは,よく使われる.  しかし,ver.4では,ダミーセルを挿入する場合が特別な場合で,デフォ ルトを挿入しない方にとったため,Hコードを操作するプログラムにおいて,ダ ミーセルの有無で,異なったプログラム(アルゴリズム)が要求されていた.  今回のver.5では,ダミーセルを親セルと子セルの間に必ず1個入れるこ とにしたため,ダミーセルの有無で異なった処理をする必要もなくなる.より, 再帰的なプログラムによって,Hコードを操作できるようになると思う.  ○ Hコードフローチャート ・・・・・ ・・・ 3 ・ ・ ・・・・・ ・・・・・・ ・・・・・ ・・・ 2 ・・ ・ 4 ・ ・ ・・・・・・ ・・・・・ ・・・・・・ ・・・・・・ ・・・・・ ・ 1 ・・ ・ 6 ・・・・ 5 ・ ・・・・・・ ・・・・・ ・・・・・ ・ ・ ・・・・・ ・ ・ T・・・ 8 ・ ・ ・ ・ ・・・・・ ・ ・・・・・・ ・・・・・ ・・・ 7 ・・・・ 9 ・ ・・・・・・・・・・・・ ・・・・・・・ F・・・ 10 ・ T ・・・・・ ・・・・・・・・・ 12 ・ ・・・・・・・ ・・・・・ ・・ 11 ・・ ・・・・・・F ・・・・・ (図3・1) ・・・ 13 ・ ・・・・・                   4  ○ 図3・1に対応するHコードフローグラフ ・・・・ ・・ 3 ・ ・・・・・ ・・・・ ・・・・・・・・・ ・・ 2 ・・・ダミー・・・ 4 ・ ・・・・・ ・・・・・・・・・ ・・・・・ ・・・・・ ・・・・ ・・・・・・ 6 ・ ・・ 5 ・ ・ 1 ・・・ダミー・・・・・・ ・・・・ ・・・・ ・・・・・ ・ ・・・・ ・・・・ ・ ・ ・・ダミー・・・ 8 ・ ・ ・ ・・・・・ ・・・・ ・・・・・・ ・ ・・・・ ・・ 7 ・・ ・ ・・ 9 ・ ・・・・・ ・ ・・・・・ ・・・・・・・・・・ ・・ダミー・・・ 10 ・ ・・・・ ・・・・・・・・・ ・・ 12 ・ ・・・・・ ・・・・・・・・・ ・・ 11 ・・・ダミー・・ ・ ・・・・ ・・・・・・・・・ ・・ 13 ・ (図3・2) ・・・・                   5 3.Hコード仮想リスト  HコードフローチャートとHコードリストとの関係を説明するために,以下の 仮想リストを導入する. 1) 各セルの形式 ・・・・・・・・・・・・・・・・・・・・・・・ ・\ /・ ・ \ 前者セルへのポインタ / ・ ・ \ / ・ ・ ・・・・・・・・・・・・・・・ ・ ・親セル・セルの種類 ・子セル・ ・ ・セル内の文字列 ・ ・ ・ への ・ラベル(条件ラベル) ・ への ・ ・ ・セルの位置 ・ ・ ・ポインタ ・セルの大きさ ・ポインタ ・ ・ ・・・・・・・・・・・・・・・ ・ ・ / \ ・ ・ / 後者セルへのポインタ \ ・ ・/ \・ ・・・・・・・・・・・・・・・・・・・・・・・           (図3・1)                   6 2) 例 ・・・・・ ・・・・・ ・ 1 ・・・・ 2 ・ ・・・・・・ ・・・・・ ・ ・・・・・ ・・・・・ ・・・ 3 ・・・・ 4 ・ ・・・・・・ ・・・・・ ・ ・・・・・ ・・・ 5 ・ (図3・2) ・・・・・・ ・・・・・・ ・・ 6 ・ ・・・・・  このHコードフローチャートを(略式)仮想リストで示すと次のようになる。 ただし、本来ダミーセルにも番号があるので、7〜9を割当てて表示してある。 ・・・・・ ・・・・・ ・・・・・ ・\φ/・ ・\φ/・ ・\φ/・ @〜Hは自分自身の番号である。 ・φ@7・・・1F2・・・7Aφ・ ・/φ\・ ・/φ\・・・/3\・ ・・・・・ ・・・・・・・・・・・ ・・・・・・ ・・・・・ ・・・・・ ・・\2/・ ・\φ/・ ・\φ/・ ・・7B8・・・3G4・・・8Cφ・ ・/φ\・・・/9\・ ・/φ\・ ・・・・・・・・・・・ ・・・・・ ・・・・・・ ・・・・・ ・・\8/・ ・\φ/・ ※ φマークはヌルを示して ・・3H5・・・9Dφ・ いる。ヌルは数字の0であ ・/φ\・・・/6\・ り、それ以外の数字や文字 ・・・・・・・・・・・ を使ってはならない。 ・・・・・・ ・・\5/・ ・・9Eφ・ (図3・3) ・/φ\・ ・・・・・                   7 4.Hコード ver5.0 のファイル説明  Hコード Ver5.0 は以下の6つのデータより表される。 1)HLIST  各セルの種類・大きさ・相対位置などに関する情報を表し、拡張子HLIとい うファイルに格納されてる。 ・ヘッダ情報(一行目) ・リスト情報 ・・・・・・・・・・ ・・・・・・・・・・・・・ ・ LIST_TOP ・ ・   PREDIX    ・ ・・・・・・・・・・ ・・・・・・・・・・・・・ ・ LIST_BTM ・ ・    CLASS  ・ ・・・・・・・・・・ ・・・・・・・・・・・・・ ・ LIST_FREE ・ ・ STMPTR ・ STMLEN ・ ・・・・・・・・・・ ・・・・・・・・・・・・・ ・ LABPTR ・ LABLEN ・ (表4・1) ・・・・・・・・・・・・・ ・ CNDPTR ・ CNDLEN ・ ・・・・・・・・・・・・・ ・ ROOTIX ・ LOOPIX ・ ・・・・・・・・・・・・・ ・  ROW  ・ COLUMN ・ ・・・・・・・・・・・・・ ・ DEPTH  ・ WIDTH  ・ ・・・・・・・・・・・・・ ・    SUCIX     ・ ・・・・・・・・・・・・・ ・ヘッダ情報(一行目) LIST_TOP … リスト情報の最初の番号を表す。 LIST_BTM … リスト情報の最後の番号を表す。 LIST_FREE… 使われていないリスト番号の最初。                   8 ・リスト情報(二行目から/一行で一つのセル情報) PREDIX … CELLの上から出る線のつながり先のCELL番号を保持している。 PREDIXの値は、つながり先の番号またはNIL(0)である。 CLASS … 配列要素が表現しているCELLの種類を示す定数値( 1〜47)が 保持されている。(別資料参照) STMPTR … CELLの中に書き込まれるテキストの保存されている領域LCHRLI STの中での先頭位置を示す値。 LCHRLIST[ STMPTR ]から、長さ STMLEN の文字列が cell に 書き込まれるテキストである。 STMLEN … CELLの中に書き込まれるテキストの長さを表す値。 (例)STMPTR ・・・ ・・・・・・・ ・・・ ・ ・ ・・・ ・・・ ・ ・・・ ・・・ ・・・ ・ ・ ・ ・ ・→・ ・ ・ ・ ・ ・ ・・・ ・・・ ・・・ ・・・ ・・・ ←・・・←FORE・・・・←FORE・・・・←FORE・・・・←FORE・・・・←FORE ・・・ ・・・ ・・・ ・・・ ・・・ →・・・・BACK→・・・・BACK→・・・・BACK→・・・・BACK→・・・・BACK ・・・ ・・・ ・・・ ・・・ ・・・ ・ ・ ・・・・・STMLEN・・・・・・ (図4・1) ・ ・ LABPTR … CELLに名札が存在する場合、その名札を表す文字列が保持され ている領域のLCHRLISTにおける先頭位置を示す値が入る。名札 が存在しない場合、値はNIL(0)となる。 LABLEN … CELLに名札が存在する場合、その長さを示す。名札が存在しな い場合は0となる。                   9 (例)LABPTR ・・・ ・・・・・・・ ・・・ ・ ・ ・・・ ・・・ ・ ・・・ ・・・ ・・・ ・ ・ ・ ・ ・→・ ・ ・ ・ ・ ・ ・・・ ・・・ ・・・ ・・・ ・・・ ←・・・←FORE・・・・←FORE・・・・←FORE・・・・←FORE・・・・←FORE ・・・ ・・・ ・・・ ・・・ ・・・ →・・・・BACK→・・・・BACK→・・・・BACK→・・・・BACK→・・・・BACK ・・・ ・・・ ・・・ ・・・ ・・・ ・ ・ ・・・・・LABLEN・・・・・・ (図4・2) ・ ・ CNDPTR … CELLに条件を表すラベルが存在する場合、その条件ラベルを表 す文字列が保存されている領域のLCHRLISTにおける先頭位置を 示す値を持っている。条件ラベルが存在しない場合、値はNIL (0)となる。 CNDLEN … CELLに条件ラベルが存在する場合、その長さを示す。条件ラベ ルが存在しない場合は0となる。 (例)CNDPTR ・・・ ・・・・・・・ ・・・ ・ ・ ・・・ ・・・ ・ ・・・ ・・・ ・・・ ・ ・ ・ ・ ・→・ ・ ・ ・ ・ ・ ・・・ ・・・ ・・・ ・・・ ・・・ ←・・・←FORE・・・・←FORE・・・・←FORE・・・・←FORE・・・・←FORE ・・・ ・・・ ・・・ ・・・ ・・・ →・・・・BACK→・・・・BACK→・・・・BACK→・・・・BACK→・・・・BACK ・・・ ・・・ ・・・ ・・・ ・・・ ・ ・ ・・・・・CNDLEN・・・・・・ (図4・3) ・ ・                  10 ROOTIX … CELLのROOT CELLの番号を表す。ROOT CELLが存在しない場合、 値はNIL(0)となる。(図3・3参照) LOOPIX … CELLからFLOW(子供)が派生している場合、そのFLOWの中での そのCELLの次のCELLの番号を表す。子供のない場合、NIL(0)と なる。 ROW … 各CELLを二次元座標に配置したときの行位置を示す。 COLUMN … 各CELLを二次元座標には位置したときの桁位置を表す。 DEPTH … 各CELLの深さを表す。 WIDTH … 各CELLの幅を表す。 ――→  COLUMN          ・・・・・・・・・・・・・・・・・・・ ・・       ・ ↓・       ・ ・     ・・・・・・ ROW ・・・・・・・   ・・DEPTH ・     ・・・・・・ ・     ・・・・・ ・       WIDTH ・ (図4・4) SUCIX … CELLの後者CELLの番号を表す。後者CELLがない場合、値はNIL (0)となる。 (例)HHLISTデータ(HANOI5.HLI) ・・[Top of file]・・・・・・・・・・・ ・1 27 28 ・0 6 1 14 0 0 0 0 0 2 3 1 1 1 0 ・0 1 0 0 0 0 0 0 1 3 0 0 0 0 6 ・0 13 17 10 0 0 0 0 2 4 1 2 1 1 0 ・0 1 0 0 0 0 0 0 3 5 0 0 0 0 0 ・0 2 27 15 0 0 0 0 4 0 1 3 1 1 0 ・2 1 0 0 0 0 0 0 1 7 0 0 0 0 20                  11 ・0 6 46 13 0 0 0 0 6 8 4 2 1 1 0 ・0 1 0 0 0 0 0 0 7 9 0 0 0 0 14 ・0 13 61 10 0 0 0 0 8 10 2 3 1 1 0 ・0 1 0 0 0 0 0 0 9 11 0 0 0 0 0 ・0 2 71 14 0 0 0 0 10 12 2 4 1 1 0 ・0 1 0 0 0 0 0 0 11 13 0 0 0 0 0 ・0 5 87 8 0 0 0 0 12 0 2 5 1 1 0 ・8 1 0 0 0 0 0 0 7 15 0 0 0 0 0 ・0 7 105 10 0 0 0 0 14 16 5 3 1 1 0 ・0 1 0 0 0 0 0 0 15 17 0 0 0 0 0 ・0 6 129 25 0 0 120 2 16 0 3 4 2 1 18 ・17 11 156 24 0 0 0 0 16 0 5 4 2 1 19 ・18 6 182 25 0 0 0 0 16 0 7 4 2 1 0 ・6 1 0 0 0 0 0 0 1 21 0 0 0 0 0 ・0 6 225 21 0 0 0 0 20 0 5 2 1 1 0 ・・[End of file]・・・・・・・・・・・ 2)LCHRLIST ・ヘッダ情報(一行目) ・リスト情報 ・・・・・・・・・・ ・・・・・・・ ・ LIST_TOP ・ ・ LCHAR  ・ ・・・・・・・・・・ ・・・・・・・ ・ LIST_BTM ・ ・ FOREIX ・ ・・・・・・・・・・ ・・・・・・・ ・ LIST_FREE ・ ・ BACKIX ・ ・・・・・・・・・・ ・・・・・・・ (表4・2)  セル内の文字列を収納する。拡張子HCHというファイルに格納される。 LCHRLISTは以下のレコードからなる両方行線形リストである。 ・ヘッダ情報(一行目) LIST_TOP … リスト情報の最初の番号を表す。 LIST_BTM … リスト情報の最後の番号を表す。 LIST_FREE… 使われていないリスト番号の最初。                  12 ・リスト情報(二行目) LCHAR … セル内に書き込まれる文字が入っている。 FOREIX … 一つ前のLCHARの番号を表す。 BACKIX … 一つ後ろのLCHARの番号を表す。 (例)  (ch: 文字)         ・・・ LCHRFREE・・・・・・・・・・・・・・         ・・・          ・         ・・・          ・ LCHRBTM ・・・・・・・      ・         ・・・   ・      ・         ・・・   ・      ・ LCHRTOP ・・・・・ ・      ・         ・・・ ・ ・      ・  ・・・・・・・・・・・・ ・      ・  ・   1      3   ・  10   ・ 14 16  ・ ・・・   ・・・  ・ ・・・  ・ ・・・    ・・・  ・→・ch・   ・ch・  ・→・ch・  ・→・ch・    ・ch・    ・・・   ・・・    ・・・    ・・・    ・・・    ・ 0・←FORE・ 1・←FORE・・ 3・    ・・・←FORE・・14・←・    ・・・   ・・・    ・・・    ・・・    ・・・     ・ 3・BACK→・10・・BACK→・・・    ・16・・BACK→・・・・→    ・・・   ・・・    ・・・    ・・・    ・・・ (図4・5) (例)LCHRLISTデータ(HANOI5.HCHの一部) ・・[Top of file]・・・・・・・・・・・・・・・・・・・・・・・・・ ・1 250 251 ・p 0 2 r 1 3 o 2 4 g 3 5 r 4 6 a 5 7 m 6 8 7 9 h 8 10 a 9 11 〜 ・・[End of file]・・・・・・・・・・・・・・・・・・・・・・・・・                  13 3)HDIR ・ヘッダ情報(一行目) ・リスト情報 ・・・・・・・・・・ ・・・・・・・・・・・・・ ・ LIST_TOP ・ ・   PREDPR    ・ ・・・・・・・・・・ ・・・・・・・・・・・・・ ・ LIST_BTM ・ ・    CLASSD  ・ ・・・・・・・・・・ ・・・・・・・・・・・・・ ・ LIST_FREE ・ ・ STMPTR ・ STMLEN ・ ・・・・・・・・・・ ・・・・・・・・・・・・・ ・ LABPTR ・ LABLEN ・ (表4・3) ・・・・・・・・・・・・・ ・ CNDPTR ・ CNDLEN ・ ・・・・・・・・・・・・・ ・ ROOTPR ・ LOOPPR ・ ・・・・・・・・・・・・・ ・ PAGEX  ・ PAGEY ・ ・・・・・・・・・・・・・ ・ CELPTR ・ SHEET  ・ ・・・・・・・・・・・・・ ・    SUCPR     ・ ・・・・・・・・・・・・・  複数の HICHARTフローチャートを管理するためのリスト構造である。拡張子H DRというファイルに格納される。 HDIRは以下のレコードからなるリストである。 ・ヘッダ情報(一行目) LIST_TOP … リスト情報の最初の番号を表す。 LIST_BTM … リスト情報の最後の番号を表す。 LIST_FREE… 使われていないリスト番号の最初。 ・リスト情報(二行目から/一行で一つのリスト情報) PREDPR … 同じレベルの前のLIST番号(HLISTの添字)を保持している。PRE DPRの値は、つながり先のLISTの番号またはNIL(0)である。                  14 CLASSD … これは常に50である。 STMPTR,STMLEN,LABPTR,LABLEN,CNDPTR,CNDLEN … ダミー ROOTPR … LISTのROOT LISTの番号を表す。ROOT LISTが存在しない場合、値 はNIL(0)である。 LOOPPR … LISTからFLOW(子供)が派生している場合、そのFLOW内での、そ のLISTの次のLISTの番号を表す。子供がない場合の値はNIL(0)と なる。 PAGEX,PAGEY … 管理しているLISTの紙上での位置を示す。ページ上でのX座標、 Y座標を保持している。 CELPTR … 各LISTの先頭のセル番号( HLISTの添字)が保持されている。こ れは参照するHichartフローチャートのポインタとなっている。 SHEET … 管理しているLISTの紙上での位置を示す。 SUCPR … LISTの後者LISTの番号を表す。後者LISTがない場合、値はNIL(0) となる。 4)HGRAPHTOP ・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・ LIST_TOP ・ ・ HGRPTOP@.PRP ・ ・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・ LIST_BTM ・ ・ HGRPTOP@.CCD ・ ・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・ LIST_FREE ・ ・ HGRPTOP@.RTP ・ HGRPTOP@.LPP ・ ・・・・・・・・・・ ・・・・・・・・・・・・・・・・・・・・・ ・ HGRPTOP@.SCP ・ (表4・4) ・・・・・・・・・・・・・・・・・・・・・  内部ツリーのルートを表す。拡張子HGRというファイルに格納される。 HGRAPHTOPは以下のレコードからなるリストである。                  15 ・ヘッダ情報(一行目) LIST_TOP … リスト情報の最初の番号を表す。 LIST_BTM … リスト情報の最後の番号を表す。 LIST_FREE… 使われていないリスト番号の最初。 ・リスト情報(二行目から/一行で一つのリスト情報) HGRPTOP@.PRP … 前者CELLを表すポインタである。前者セルがない場合、NI L(0)である。 HGRPTOP@.CCD … HLISTの添字である。 HGRPTOP@.RTP … ROOT CELLを表すポインタである。ROOT CELLがない場合、 NIL(0)である。 HGRPTOP@.LPP … LOOP CELLを表すポインタである。ROOT CELLがない場合、 NIL(0)である。 HGRPTOP@.SCP … 後者CELLを表すポインタである。後者CELLがない場合、NI L(0)である。 6)HPSIZE  シートのサイズを表す。拡張子HPSというファイルに格納されている。 HPSIZEは以下のレコードからなるリストである。 DEPTH … シートの縦方向に位置するセルの最大数である。 WIDTH … シートの横方向に位置するセルの最大数である。                  16 7)HGEO  各セルの幾何学的なデータを管理する。拡張子HGEというファイルに格納さ れている。 HGEOは以下のレコードからなるリストである。 SEET … そのセルのシート番号である。 ROW … 各CELLを二次元座標に配置したときの行の位置を表す。 COLUMN … 各CELLを二次元配列に配置したときの列の位置を表す。 DEPTH … 各CELLの深さを表す。 WIDTH … 各CELLの幅を表す。                  17 5.内部表現 1)HLISTの内部表現  ・配列 /* HLI */ typedef struct { unsigned int class ; /* セルのクラス */ unsigned int predix ; /* セルへのポインタ */ unsigned int rootix , loopix ; unsigned int stmptr , stmlen ; /* 本文 */ unsigned int labptr , lablen ; /* ラベル */ unsigned int cndptr , cndlen ; /* 名札 */ unsigned int row , column ; /* 位置(レベル) */ unsigned int width , depth ; /* 幅 (文字数) */ unsigned int sucix ; } HLI ; ・読み込み例 /* 読み込み代入 */(hli=ファイルポインタ) for ( i = top ; i <= btm ; i++ ) { /* ファイルから1行読む */ ret=fscanf(hli,"%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", &hlist[i].predix, &hlist[i].class , &hlist[i].stmptr, &hlist[i].stmlen, &hlist[i].labptr, &hlist[i].lablen, &hlist[i].cndptr, &hlist[i].cndlen, &hlist[i].rootix, &hlist[i].loopix, &hlist[i].row , &hlist[i].column, &hlist[i].depth , &hlist[i].width , &hlist[i].sucix ); if ( ret == EOF || ret == 0 ) break ; /* 物理的ファイル終了 */ }                  18 2)LCHRLISTの内部表現  ・配列 /* HCH */ typedef struct { char lchar ; int foreix ; int backix ; } HCH ;  ・読み込み例 /* 読み込み代入 */(hch=ファイルポインタ) for ( i = top ; i <= btm ; i++ ) { /* ファイルから読む */ ret = fscanf( hch , "%c %d %d", &hchar[i].lchar , &hchar[i].foreix , &hchar[i].backix ) ; if ( ret == EOF || ret == 0 ) break ; /* 物理的ファイル終了 */ fscanf( hch , "%c" , dummy ) ; } 3)その他の内部表現 (省略)                  19 6.参考文献 <参考文献一覧> [1]: 郷信義・岸本美樹・岡田直之・長田芳一・中西美智子・夜久竹夫     「木フローチャート記述言語HICHARTの処理系実現」    情報処理学会第27回全国大会講演の文集(T) P549〜550 (1983) [2]: 岡田直之 「Hコード言語解説書 ver3.0」(1984) [3]: John E.Hopcroft and Jeffrey D.Ullman    (訳:野崎昭弘、高橋正子、町田元、山崎秀記)   「オートマトン言語理論 計算論T・U」(サイエンス社)(1984,1986) [4]: 海野浩 「ETA-HfromP ver3.15(VM/CMS)ソフトウェア報告書」(1987) [5]: 倉谷遣一 「Hコード言語解説書 ver4.0」(1987) [6]: 山口茂 「Hichart 中間言語の研究」(1987) [7]: 夜久竹夫 他 「Hichart とプログラム開発環境 ETA-AIDE」 (原田賢一「構造エディター」)(共立出版)(1988) [9]: 安部芳久 「階層型プログラム図式Hichart生成系の研究報告書」(1990) [10]: 田辺文雄 「階層型流れ図言語Hichart/cに対するグラフ文法の研究」(1990)                  20