cflowの出力を解析しようとしています。これは、制御フローの3Dグラフを作成するために使用されます。cflowの出力は次のようになります。
main() <int main (int argc, char *argv[]) at sort.c:3>:
strcmp()
printf()
malloc()
getline() <char *getline (int max) at sort.c:62>:
isspace()
getchar()
ungetc()
malloc()
qsort()
free()
main()
正規表現を使用して関数名と括弧を抽出しています- 、、などを取得したいですstrcmp()
。私のコードは次のとおりです。
String line = input.nextLine(); // input is a Scanner reading from a file
Pattern p = Pattern.compile("[a-zA-Z0-9_]+\\(\\)"); // the important part
Matcher m = p.matcher(line);
現在、私が使用しているパターンは、Emacsの正規表現ビルダーモードを使用して機能します。しかし、このプログラムを実行すると、一致するものがありません。私はおそらくJavaの正規表現関数を理解していないだけです。
また、明らかな解決策はJavaを使用しないことだと思います...私はそれを好みますが、Processingを使用してグラフを描画するので、実際には選択肢がありません。