字句解析・構文解析に使える正規表現処理
var exp=['(@:)','(@[0-9])','(l[0-9]+)','(o[0-9]+)','(p[0-9]+)','(t[0-9]+)','(v[0-9]+)','[a-g][+-]?[0-9]*.?'];
function lexer(str){
return str.match(new RegExp(exp.join('|'),'g'));
}
function parser(tokens){
for(var i=0;i<tokens.length;i++){
var t=tokens[i];
if(t.match(new RegExp(exp[0]))){
}else if(t.match(new RegExp(exp[0]))){
}else if(t.match(new RegExp(exp[1]))){
}else if(t.match(new RegExp(exp.slice(1,6).join('|')))){
}else if(t.match(new RegExp(exp[6]))){
}
}
}
parser(lexer('@:t120 @0cdefgab'));
字句解析と構文解析で同じ正規表現を複数回使う場合に配列に格納した文字列から生成した方が柔軟性があり使い勝手が良い。
全てのパターンを配列に格納しておき字句解析器で一度に抜き出しトークン化する。
抜き出したトークンを構文解析器でトークンの種類ごとに処理をする。
パターンを格納した配列から参照することでトークンを個別に判別して処理することができる。
この記事が気に入ったらサポートをしてみませんか?