#!/usr/bin/perl

use strict;


my $ARGC = @ARGV;
my $outfileName = "tokens.h";
main();


sub getTokens
{
  my $tokenFile = $_[0];
  my @tokArray;
  print "Opening $tokenFile\n";
  open FILE, $tokenFile or die $!;
  
  #my $testName = "";
  while (my $line = <FILE>)
  {
    chomp($line); #Remove newline
    #print "Line ->" . $line . "<-";
    my @tokSplit = split('=',$line);
    my $tokName;
    my $tokIndex;
    
    #print "Name  ->" . $tokSplit[0] . "<-";
    #print "Index ->" . $tokSplit[1] . "<-\n";
    
    #Make sure the index isn't too crazy
    if($tokIndex > 10000)
    {
      print "ERROR: Token index is over 10000\n";
      exit(0);
    }
    
    #Add this to the array
    $tokArray[$tokSplit[1]] = $tokSplit[0];
  }
  
  return @tokArray;
}

sub writeFile
{
  my @tokArray = @_;
  my $headerFile = ">$outfileName";
  print "Opening $headerFile\n";
  open (HFILE, $headerFile);
  
  print HFILE "const char * tokList[] = {";
  foreach my $token (@tokArray)
  {
    if($token eq "")
    {
      $token = "NULL";
    }
    print HFILE "  \"" . $token . "\",";
  }
  print HFILE "\"NULL\"};";
}

# Takes .token file as sole argument
sub main()
{
  my $tokenFile = $ARGV[0];
  my $grammarName = $tokenFile;s/\.tokens$//;
  
  $grammarName =~ s/\.tokens$//;
  
  my @tokArray = getTokens($tokenFile);
  
  writeFile(@tokArray);
  

}
