| XREF (クロス・リファレンス) |
|
CenterとCentre NumberとNumbr ColorとColore ControlとConntrol ..... |
こんな変数名のスペルの違いが引き起こす問題を解決したい
指定する変数の変更に際し、何処でその変数が使用されているか知りたい |
クロス・リファレンスは、古く、大型コンピュータでの FOTRTRAN COBOL BASIC等のプログラム言語で、プログラムを作成する時、修正/変更をかける時有用に使われているデバッグ方法です。
HTBasic では、XREF (クロス・リファレンス)が備わっています。 XREF はプログラムの相互参照を生成します。 その大きな効果は、
− プログラムに使用されている変数名が、何処で定義されいるのか
− 知りたい変数名は、何処のプログラム行で使用されているか
− FINDコマンドで見つからないスペル・ミスした変数名はどこの行にあるのか
を知ることで、プログラムが、プログラマーが意図とするプログラム・コードとなっているかを確認する事が出来ます。 |
| HTBasicの XREF (クロス・リファレンス)
|
XREF は、行ラベルと行番号、io-パス名、数値および文字変数、サブプログラム( SUB )、関数( FN )とコモンブロック( COM )名の相互参照リストを生成します。 プログラムの中で使用していないシンボル・テーブルのエントリ数を表示します。 デバイス・セレクターが指定されない限り、リストは PRINTER IS で設定されているデバイスに送られます。
リファレンスが SUB のパラメータ、 COM , COMPLEX , DIM , REAL , INTEGER 文または行ラベルで宣言されるものには、【<-DEF】の文字でマークされます。
各々のプログラムの文脈を確認し、使用していないシンボル・テーブルのエントリ数を表示します。 サブプログラム名を MAIN を選択すると、 MAIN の文脈は相互参照されます。プログラムのプリラン時、配列変数は【Array】の隣に定義された行番号を表示します。
|
| サンプル・プログラムを使用して XREF (クロス・リファレンス)を操作 |
| 1.サンプルプログラム |
"
< Text 形式での表示 > |
| 2. XREF (クロス・リファレンス)の実行 |
|
|
|
@ メニュー・バーから、View|Xref... を選択し、 A XREF ダイアログで、 Option|Subprogram で、 MAIN を選択し、 B で < OK > をクリックすると、 C XREF リストが表示されます。
|
| |
| 3. XREF (クロス・リファレンス)リストの見かた |
| 説 明 | 行目 | 表 示 |
| クロス・リファレンスの表題 | 1 | >>>> Cross Reference <<<<
| | <区分> 数値変数 | 3 | * Numeric Variables |
数値配列変数 A は 行番号50 で定義 行番号70,90,100,110 で使用 | 4 |
A
Array
50 <-DEF 70 90 100 110 |
数値配列変数 B は 行番号50 で定義 何処にも使用されていない | 5 |
B Array 50 <-DEF |
数値変数 Counter は 行番号12 で定義 行番号44 で使用されている | 6 |
Counter
12 <-DEF 44 |
数値変数 I は行番号60/ 70/80/100/120 で使用されている | 7 |
I
60
70
80
100 120 |
数値変数 Number は 行番号11 で定義 何処にも使用されていない | 8 |
Number
11 <-DEF |
数値変数 Numbr は 変数名のスペルミスで行番号43 で使用されてるのみ | 9 |
Numbr
43 |
| <区分> 文字変数 | 11 | * String Variables |
| 文字変数 S1$ は、行番号11 で定義され、行番号41 で使用されている | 12 |
S1$
11 <-DEF 41 |
| 文字変数 S2$ は、行番号11 で定義され、行番号42 で使用されている | 13 |
S2$
12 <-DEF 42 |
| <区分> サブプログラム | 15 | * SUB Subprograms |
| サブプログラム Sub1 が行番号100 から始まっている | 16 |
Sub1
100 |
| <区分> コモン・ブロック名 | 18 | * Common Block Names |
| コモン・ブロック名をもたない COM* が行番号11 に存在 | 19 |
11 |
| コモン・ブロック名 Test のCOM* は行番号12 に存在 | 20 |
Test  
12 |
| 各文脈の最後に出る未使用エントリーの数(ここでは 4 ) | 22 |
Unused entries = 4 |
|
| XREF (クロス・リファレンス) の構文(シンタックス) |
| 構文(シンタックス) |
| |
XREF [ [SUB] sub-name] [: option]
XREF [#device-selector [; [SUB] sub-name]] [: option]
|
 |
| |
ここで
device selector は、デフォルトでは、PRINTER IS デバイスです。
sub-name とは、サブプログラム(SUB)名| 関数名(FN) [$] | 文字列 を使用します。
optionとは、 CM | IO | LL | LN | NF | NV | SB | SF | SV| UN があります。
|
|
| 文例 |
| | XREF |
| | XREF Trigger:NV |
| | XREF #701;Launch |
|
| 説明 |
|
|
| | XREF は、行ラベルと行番号、io-パス名、数値および文字変数、サブプログラム( SUB )、関数( FN )とコモンブロック( COM )名の相互参照リストを生成します。プログラムの中で使用していないシンボル・テーブルのエントリ数を表示します。 デバイス・セレクターが指定されない限り、リストはPRINTER ISで設定されているデバイスに送られます。 |
| | クロス・リファレンス・リストの見出しは、
>>>> Cross Reference <<<<
と表示されます。 |
| | サブプログラムが選択された場合、次の見出しが表示されます。
>>>> Subprogram <<<<
|
|
| XREF に続くオプション・パラメータ |
| オプション | 内容 |
| CM | コモンブロック名(Common Block Names) |
| IO | I/Oパス名(I/O Path Names) |
| LL | 行ラベル(Line Labels) |
| LN | 行番号(Line Numbers) |
| NF | 数値関数(Numeric Functions) |
| NV | 数値変数(Numeric Variables) |
| SB | サブプログラム(SUB Subprograms) |
| SF | 文字関数(String Functions) |
| SV | 文字変数(String Variables) |
| UN | 未使用のエントリ(Unused Entries |
|
| | リファレンスがSUBのパラメータ、COM,COMPLEX,DIM,REAL,INTEGER文または行ラベルで宣言されるものには、【<-DEF】の文字でマークされます。 各々のプログラムの文脈を確認し、使用していないシンボル・テーブルのエントリ数を表示します。サブプログラム名をMAINとすると、MAINの文脈は相互参照されます。プログラムのプリラン時、配列変数は Array の隣に、定義された行番号を表示されます。
|
| サブプログラムポインタ |
| | XREF 文で、文字表現でサブプログラム名を記すると、明確に名前付けするよりサブプログラムを指しているので、文字表現はサブプログラムポインタと呼ばれる。文字表現が変わると、ポインターは異なるサブプログラムを指しています。 サブプログラム名は大文字を一文字目に使用し、続けて小文字使用せねばなりません。 サブプログラムポインタはCALL、DELSUB、INMEMとLOADSUB文でも使用します。 |
| | HPBASIC へのポーティング |
| | XREF でのサブプログラム・ポインタの使用は、HPBASIC では利用できない新しい HTBasic の機能です。その理由でHPBASICへポーティングしなおさねばならないプログラムでは使用すべきではありません。
|
| 参照: |
| | PRINTALL IS , TRACE |
|
| |