#!/usr/bin/perl
#
# $Id: rpn2symreq,v 1.1.1.1 2007/04/18 16:16:05 kohju Exp $
#
# Test Script
#
# cat testdata | ./rpn.<ARCH>.<CPU> | ./rpn2symreq
#

use strict;
use lib "../";
use sp;


#ѿμºݤ֤ͤ
sub get_value
{
    my ($v) = @_;
    return $v;
}

#¹Ԥͤ餦
sub exec_func
{
    my ($f) = @_;
    return "func_execute";
}




while(<>)
{
    chomp;

    my($least,$to)=split("=>",$_);
    my $ret = "";

    do {
	$least=~/([:A-Za-z][A-Za-z0-9]*)\[([^\[]*)\]/;
	$least=$'; #'
	my $v = "";
	if($1 eq "VAR"){#ͤľ뤳
	    $v = &get_value('$'.$2);
	    
	}elsif($1 eq "NUM"){
	    $v = $2;
	}elsif($1 eq "STR"){
	    $v = '"'.$2.'"';
	}elsif($1 eq "EXEC"){
	    my @t = split(',', $2);
	    my $str = "";
	    for(my $i=0;$i<$t[1];$i++){
		if($str){
		    $str = &sp::sp_pop(). ", $str";
		}else{
		    $str = &sp::sp_pop();
		}
	    }

#	    print "$t[0]($str)\n";
	    $v = "$t[0]($str)". &exec_func("$t[0]($str)"); #¹Ԥͤ餦

	}

	$ret .= "sp::sp_push($v)\n";
	&sp::sp_push($v);


    } while($least);

    if ($to){
	$ret .= '$'."$to = sp::sp_pop()\n";
    }

    &sp::sp_flush();
    $ret .= "sp::sp_flush()\n\n";
    print $ret;
}



