AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

四則演算

四則演算するperlプログラム
与えられた数式はグローバル変数$qに入っていて、
使える演算子は、+-*/と括弧。
演算の優先順位は 括弧 → */ → +- の順

一応ちゃんと動いてる模様
http://rafeel.s602.xrea.com/calc/?q=2*%281%2B4%2B1%29


2*(1+4+1)
の計算結果は、12になります。

2*(1+(4*2)+1)
答え20
二重括弧も大丈夫ですね


優先順位は再帰呼び出しの順位になっています。
負の数がなかったので追加します。
次に、これを、一次方程式も解けるようにしてみます(ゝω・)

$q =~ s/[\n\r]+//g;

my ($type1,$token1) = addsub();
print $token1;
print "<br>";
exit;

sub addsub()
{
	my @dic;
	my ($type1,$token1) = muldiv();
	for(;;)
	{
		if( substr($q,0,1) ne "+" && substr($q,0,1) ne "-" )
		{
			$dic[0]=$type1;$dic[1]=$token1;
			return @dic;
		}
	
		my ($type2,$token2) = getToken();
		if($type2 eq "+")
		{
			my ($type3,$token3) = muldiv();
			$token1 = $token1+$token3;
		}
		elsif($type2 eq "-")
		{
			my ($type3,$token3) = muldiv();
			$token1 = $token1-$token3;
		}
	}
}
sub muldiv()
{
	my @dic;
	my ($type1,$token1) = factor();
	for(;;)
	{
		if( substr($q,0,1) ne "*" && substr($q,0,1) ne "/" )
		{
			$dic[0]=$type1;$dic[1]=$token1;
			return @dic;
		}
		my ($type2,$token2) = factor();
		if($type2 eq "*")
		{
			my ($type3,$token3) = factor();
			$token1 = $token1*$token3;
		}
		elsif($type2 eq "/")
		{
			my ($type3,$token3) = factor();
			$token1 = $token1/$token3;
		}
	}
}
sub factor()
{
	my @dic;
	my ($type1,$token1) = getToken();

	if( $type1 eq "(" )
	{
		my ($type1,$token1) = addsub();
		$dic[0]=$type1;$dic[1]=$token1;
		if( substr($q,0,1) ne ")" ) { print "nest error<br>"; }
		getToken();
		return @dic;
	}

	$dic[0]=$type1;$dic[1]=$token1;
	return @dic;
}
sub getToken()
{
	my $token="";
	my $type="";
	my $c = substr($q,0,1);
	if($c =~ /[0-9]+/ ) { $type="num";$q =~ s/^([0-9]+)//; $token=$1; }
	elsif($c =~ /[a-zA-Z]+/ ) { $type="alp";$q =~ s/^([a-zA-Z]+)//; $token=$1; }
	else { $type=$c;$token=$c;$q=substr($q,1); }

	my @dic;
	$dic[0]=$type;$dic[1]=$token;
	return @dic;
}