昨日のエントリーの続き
今回はthrows句で定義される例外も抽出できるようにした
ちょっとは再帰を使ったプログラミングに慣れてきたかな?
今回はthrows句で定義される例外も抽出できるようにした
function pareseJavaSource(str){ //parese用の文字列 var parseStr = str; //連結用文字列 var concatStr=""; //文字列の切り出し位置 var i = 0; //解析用のデータ構造 var struct = new Array(); //中括弧を格納する配列 var parentheses = new Array(); alert("開始"); //メソッドシグニチャを解析する analysFunction(str.charAt(i)); //引数を解析する analysArg(str.charAt(i)); //例外を解析する analysThrow(str.charAt(i)); //解析内容を出力 debug(); alert("終了"); //引数を解析する function analysArg(strIn){ if(strIn == "("){ concatStr = ""; struct["args"]=new Array(); }else if(strIn == ")" || strIn == " "){ var obj = struct["args"].pop(); obj.value=concatStr.replace(/ |,/ig,""); struct["args"].push(obj); concatStr = ""; if(strIn == ")"){ i++; return; } }else if(strIn == ","){ var obj = new Object(); obj.type = concatStr; struct["args"].push(obj); concatStr=","; }else{ concatStr +=strIn; } return analysArg(str.charAt(++i)); } //メソッドシグニチャを解析する function analysFunction(strIn){ if(i==0){ struct["methodSign"] = new Array(); } if(strIn == "("){ concatStr = ""; return; }else if (strIn == " "){ if(concatStr != ""){ struct["methodSign"].push(concatStr); concatStr = ""; } }else{ concatStr +=strIn; } analysFunction(str.charAt(++i)); return } //THORWS句を解析する function analysThrow(strIn){ if(concatStr == "throws"){ struct["throws"] = new Array(); concatStr = ""; }else if(strIn == "," || strIn == "{"){ if(strIn == "{"){ parentheses.push("start") return; }else{ struct["throws"].push(concatStr); } concatStr = ""; }else if(strIn == " "){ }else{ concatStr +=strIn; } analysThrow(str.charAt(++i)); return; } //if文を解析する function analysIF(strIn){ if(concatStr == "if"){ var tem = parentheses.pop(); if(tem == "IF"){ var obj = searchObj(struct["IF"]); obj.next = new Object(); }else{ struct["IF"].push(new Object()); } parentheses.push(tem); parentheses.push("IF") concatStr = ""; }else if(strIn == ")"){ obj = searchObj(struct["IF"]); obj.evaluate = (concatStr+")"); concatStr = ""; }else if("{"){ }else if("}"){ parentheses.pop(); return; }else if(" "){ }else{ concatStr +=strIn; } } //解析した内容を出力する function debug(){ var array = struct["args"]; var str1=""; for(var i in array){ str1 += "型:" + array[i].type + " 変数名:" + array[i].value + "\n"; } array = struct["methodSign"]; for(var i in array){ str1 += "メソッドジグニチャ" + i +":" + array[i] + "\n"; } array = struct["throws"]; for(var i in array){ str1 += "例外" + i +":" + array[i] + "\n"; } alert(str1); alert(parentheses.length); } }
ちょっとは再帰を使ったプログラミングに慣れてきたかな?