現在、Javaを学習中の大学生です。
Javaのソースコードを解析し、その中で宣言されている変数名を抽出して、
変数表のようなものを作成するJavaプログラムを書いているのですが、
参照型(クラス型)で宣言されている変数名を抽出する方法が思いつきません。
よろしければ、何かアイディアをいただけないでしょうか。
プリミティブ型の変数については、StreamTokenizerクラスを利用しています。
コードをトークンに分解して、型名の次に来るワードトークンを変数名として抽出
するという、単純な方法を使っています。こちらも、改良すべき点などあれば、
アドバイスいただけるとありがたいです。
デバッガを使えば出来ないことはないようですが、
出来ればデバッガは使わない方法でお願いします。
No.2ベストアンサー
- 回答日時:
ひとまず
>コードをトークンに分解して、型名の次に来るワードトークンを変数名として抽出
この方法だとローカル変数も抽出してしまうと思いますが
ローカル変数も抽出の対象にするんでしょうか?
ローカル変数を対象としないなら、alice_asahina様の回答にある様にリフレクションが楽でしょう。
ただし、その場合は抽出元がソースコードでは無くクラスファイルになる事に注意して下さい。
あくまでソースコードを対象として処理するのであれば、
>コードをトークンに分解して、型名の次に来るワードトークンを変数名として抽出
でしなければならない事の概要としては間違っていないと思いますが、
実装の上ではjavaがフリーフォーマットである事に注意して下さい。
型名の途中にホワイトスペースが挟まる事はありませんが、配列の場合こんな書き方も出来ますので。
↓
int a
[
];
また、その際にローカル変数を抽出の対象にしないのであれば、
更に宣言スコープ等を考慮する必要が出てきますし、
これに内部クラスや匿名クラスのフィールドも混ざってくると非常にややこしい事になると思いますが、不可能ではありません。
がんばってください。
アドバイスありがとうございます。
ローカル変数も対象としています。
(もう少し詳しく書くべきでした。すみません)
確かに、javaはフリーフォーマットなので
ややこしいところもありますが、
解析対象となるコードは、教科書に載っているような、
お手本コードなので、あまり心配はしていません。
しかし、そういった部分もカヴァーするに越したことは
ないので、時間に余裕があるかぎり検討したいと思います。
また、mamadorusuさんのアドバイスがきっかけで、
今まで見落としていた問題も見えてきました。
そういう点で参考になりましたので、
こちらをベストアンサーとさせていただきます。
No.1
- 回答日時:
ヒントありがとうございます。
出来れば、ソースコードから抽出したいのですが、
(もう少し詳しく書くべきでした。すみません)
これもひとつの方法として参考にしたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- オープンソース IT用語、ソースとオブジェクト、改変と翻訳と翻案の違いなど どのようにりかいすればよいのですか 1 2022/09/09 10:02
- Excel(エクセル) Excel マクロで For 文のインデックスを先に宣言する理由 7 2022/08/27 00:26
- Excel(エクセル) SUMIF関数について 4 2023/06/14 13:13
- IT・エンジニアリング c言語とjavaの需要について 3 2022/06/23 22:59
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Excel(エクセル) Excelの数式についての質問 1 2022/10/31 15:50
- Excel(エクセル) シート参照を含む数式を連続コピー 3 2022/12/10 11:42
- 統計学 ダミー変数の因子分析について質問です 1 2022/03/27 14:31
- Java Java 石取りゲーム 3 2023/02/02 15:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
3年間同じクラスになる確率
-
「天声人語」をインターネット...
-
string formatについて
-
「自作クラスの型」にキャスト...
-
java eclipse 型に解決できません
-
内部クラスを別ファイルに
-
javaで画像ファイルの入出力方法
-
エクセルVBAでのwitheventsにつ...
-
サーブレット実行時のエラー
-
体育祭クラス全員参加のムカデ...
-
河合塾のクラス分けについて
-
ASP.NETでのジェネリックの利用
-
クラスにアクセスできません。
-
自作のクラスファイルがインポ...
-
Javaの継承についてです。 この...
-
ATLとMFCの違いは何でしょうか?
-
ベクターワークスでの【クラス...
-
A・B・Cクラスとは?
-
クラスの継承でメンバ変数が・・
-
グローバルIPとプライベートIP...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
河合塾のクラス分けについて
-
同じクラスにならない確率を教...
-
3年間同じクラスになる確率
-
「天声人語」をインターネット...
-
グローバルIPとプライベートIP...
-
配列の重複する値とその個数を...
-
java eclipse 型に解決できません
-
同一パッケージにあるクラスが...
-
私はクラスLINEにまだ入れてな...
-
老い先短い ジジィ が ふと 思う...
-
自作のクラスファイルがインポ...
-
どこからも呼ばれていない無意...
-
main()を持つクラスが2つ以上...
-
数学の計算問題。 3年間同じク...
-
クラス見てから 女の子5人 ネタ...
-
javaのコンパイルができません...
-
1 つのヘッダファイルに複数の...
-
重複エラーを解決するには
-
IPアドレスの3バイト目の呼び方
-
packageとimport の違いって?
おすすめ情報