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*)?)*\)"
後で解析しとこう。