ddgen...その8

isFunctionはこんなもんなんだろうか。

import std.stdio;
import std.string, std.regexp;

const char[] func_pattern = "[a-zA-Z]( .*|\t.*|\r.*|\n.*)[a-zA-Z].*";

bool isFunction(char[] token)
{
  auto r = new RegExp(func_pattern);
  return cast(bool)r.test(token);
}

void main()
{
  char[] s = "bool isFunction(char[] token)";
  writefln(isFunction(s));
  return;
}

追記:func_patternは、

const char[] func_pattern = "[a-zA-Z]( .*|\t.*|\r.*|\n.*)[a-zA-Z]([(].*|.*[)])";

こうかも。

さらに追記:orじゃないw

const char[] func_pattern = "[a-zA-Z]( .*|\t.*|\r.*|\n.*)[a-zA-Z]([(].*[)])";

さらに追記:というか、D言語研究のレシピに関数にマッチする正規表現が既にあるんだった・・・

const char[] func_pattern = " ((private|package|protected|public|export|static|final|override|abstract|deprecated|(extern|version|debug)\s*
 \(\s*[\w+]+\s*\))\s*)*(([\w\[\]*]|\s*delegate\s*\(\s*[\w\s\[\]*]*\s*\))+\s+
 ([_A-Za-z][_A-Za-z0-9]*)\s*|this)\(
 \s*(([\w\[\]*]|\s*delegate\s*\(\s*[\w\s\[\]*]*\s*\))+\s+[\w\[\]*]+\s*(=\s*(\w+)\s*)?)?
 (,\s*([\w\[\]*]|\s*delegate\s*\(\s*[\w\s\[\]*]*\s*\))+\s+[\w\[\]*]+\s*(=\s*(\w+)\s*)?)*\)"

後で解析しとこう。