# For making sure that no conflicts occur
package SymTab;
use Carp;
sub new {
my($type,%ids) = @_;
my($this) = bless {
Id2Sym => {},
Sym2Id => {},
IsPar => {},
}, $type;
$this->add_ids(%ids);
$this;
}
sub add_ids {
my($this,%hash) = @_;
for(keys %hash) {
$this->{Id2Sym}{$_} = $hash{$_};
$this->{Sym2Id}{$hash{$_}->[0]} = $_;
}
}
sub add_params {
my($this,%hash) = @_;
$this->add_ids(%hash);
for(keys %hash) {
$this->{IsPar}{$_} = 1;
}
}
sub decl_locals {
my($this) = @_;
my $str;
for(keys %{$this->{Id2Sym}}) {
if(!$this->{IsPar}{$_}) {
$str .= $this->{Id2Sym}{$_}[1]
->get_decl($this->{Id2Sym}{$_}[0]).";";
}
}
$str;
}
sub get_params {
}
sub get_symname {
my($this,$id) = @_;
confess "Symbol not found: $id\n" if(!defined($this->{Id2Sym}{$id}));
return $this->{Id2Sym}{$id}[0];
}
1;