1

学校のプロジェクト用に LolCode Interpreter を作成しています。インタプリタの字句解析器のコーディングに問題があります。

// I HAS A <variable>
if(/(I\sHAS\sA)\s[a-zA-Z_$][0-9a-zA-Z_$]*$/i.test(entry)){
	if(/(I\sHAS\sA)\s[a-zA-Z_$][0-9a-zA-Z_$]*/i.test(entry)){
		var desc = "Variable Declaration";
		var lex = /I\sHAS\sA/i.exec(entry);
		$('#lexemes tbody').append('<tr><td>' + lex + '</td><td>' + desc + '</td></tr>');
	}
	if(/(I\sHAS\sA)\s[a-zA-Z_$][0-9a-zA-Z_$]*/i.test(entry)){
		var string = /(I\sHAS\sA)\s[a-zA-Z_$][0-9a-zA-Z_$]*/i.exec(entry);
		var desc = "Variable name";
		var lex = /[^(I\sHAS\sA)\s]+/.exec(string);
		$('#lexemes tbody').append('<tr><td>' + lex + '</td><td>' + desc + '</td></tr>');
	}
}

// I HAS A <variable> ITZ <value>
if(/(I\sHAS\sA)\s[a-zA-Z_$][0-9a-zA-Z_$]*\sITZ\s.*/i.test(entry)){
	if(/(I\sHAS\sA)\s[a-zA-Z_$][0-9a-zA-Z_$]*\sITZ\s.*/i.test(entry)){
		var desc = "Variable Declaration";
		var lex = /I\sHAS\sA/i.exec(entry);
		$('#lexemes tbody').append('<tr><td>' + lex + '</td><td>' + desc + '</td></tr>');
	}
	if(/(I\sHAS\sA)\s[a-zA-Z_$][0-9a-zA-Z_$]*\sITZ\s.*/i.test(entry)){
		var string = /(I\sHAS\sA)\s[a-zA-Z_$][0-9a-zA-Z_$]*\sITZ\s.*/i.exec(entry);
		var desc = "Variable name";
		var lex = /[^(I\sHAS\sA)\s]+/.exec(string);
		$('#lexemes tbody').append('<tr><td>' + lex + '</td><td>' + desc + '</td></tr>');
	}

	if(/.+ITZ\s.*/i.test(entry)){
		var string = /.+ITZ\s.*/i.exec(entry);
		var desc = "Initialization";
		var lex = /ITZ/i.exec(string);
		$('#lexemes tbody').append('<tr><td>' + lex + '</td><td>' + desc + '</td></tr>');
	}
}

正常に動作していますが、変数名の正規表現が間違っています。私は正規表現が初めてなので、助けていただければ幸いです。

変数名に 'I' または 'HAS' または 'A' が含まれている場合、正規表現でキャッチされません。

のせいだとわかっています[^ ]が、その部分を削除すると、キーワードI HAS Aが変数名に含まれます。正規表現の改善にご協力ください。どうもありがとうございました!

4

0 に答える 0