OpenCores
URL https://opencores.org/ocsvn/sc2v/sc2v/trunk

Subversion Repositories sc2v

[/] [sc2v/] [trunk/] [src/] [sc2v_step3.y] - Rev 14

Go to most recent revision | Compare with Previous | Blame | View Log

/* -----------------------------------------------------------------------------
 *
 *  SystemC to Verilog Translator v0.3
 *  Provided by OpenSoc Design
 *  
 *  www.opensocdesign.com
 *
 * -----------------------------------------------------------------------------
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Library General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */


%{
#include <stdio.h>
#include <string.h>

  int module_found = 0;
  int concat_found = 0;
  int opened_pars;
  int *concat_par_num;
  int concats_found = 0;
  char *aux;
  void yyerror (const char *str)
  {
    fprintf (stderr, "error: %s\n", str);
  }

  int yywrap ()
  {
    return 1;
  }

  main ()
  {
    concat_par_num = (int *) malloc (16 * sizeof (int));
    *concat_par_num = 0;
    yyparse ();

  }

%}

%token WORD 
%token OPENPAR CLOSEPAR 
%token MODULE 

%% commands:
/* empty */
|commands command;


command:
module 
| 
closepar 
| 
concat 
| 
openpar;

module:
MODULE
{
  module_found = 1;
  opened_pars++;
  printf ("%s", (char *) $1);
};

openpar:
OPENPAR
{
  printf ("(");
  opened_pars++;
};

closepar:
CLOSEPAR
{
  if (module_found)
    {
      printf (")");
      opened_pars--;
      module_found = 0;
    }
  else if (concat_found)
    {
      if (opened_pars == *(concat_par_num + concats_found))
        {
          printf ("}");
          concats_found--;
          if (concats_found == 0)
            {
              concat_found = 0;
            }
        }
      else
        {
          printf (")");
        }
      opened_pars--;
    }
  else
    {
      opened_pars--;
      printf (")");
    }
};

concat:
WORD
{
  aux = (char *) $1;
  aux++;
  printf ("{%s", aux);
  concat_found = 1;
  opened_pars++;
  concats_found++;
  *(concat_par_num + concats_found) = opened_pars;
};

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.