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

Subversion Repositories sc2v

[/] [sc2v/] [trunk/] [src/] [sc2v_step1.y] - Diff between revs 18 and 19

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 18 Rev 19
Line 37... Line 37...
  char *fileregs;
  char *fileregs;
  char *filename;
  char *filename;
  int openedkeys = 0;
  int openedkeys = 0;
  int newline = 0;
  int newline = 0;
  int reg_found = 0;
  int reg_found = 0;
 
  int integer_found=0;
  int regs_end;
  int regs_end;
  int i = 0;                    //for loops counter
  int i = 0;                    //for loops counter
  FILE *file;
  FILE *file;
  FILE *regs_file;
  FILE *regs_file;
  char *regname, *regname2;
  char *regname, *regname2;
Line 118... Line 119...
 
 
%}
%}
 
 
%token NUMBER WORD SC_REG BOOL BIGGER LOWER OPENKEY CLOSEKEY WRITE WORD SYMBOL NEWLINE ENUM INCLUDE
%token NUMBER WORD SC_REG BOOL BIGGER LOWER OPENKEY CLOSEKEY WRITE WORD SYMBOL NEWLINE ENUM INCLUDE
%token COLON SEMICOLON RANGE OPENPAR CLOSEPAR TWODOUBLEPOINTS OPENCORCH CLOSECORCH SWITCH CASE DEFAULT BREAK
%token COLON SEMICOLON RANGE OPENPAR CLOSEPAR TWODOUBLEPOINTS OPENCORCH CLOSECORCH SWITCH CASE DEFAULT BREAK
%token HEXA DEFINE READ TRANSLATEOFF TRANSLATEON VERILOGBEGIN VERILOGEND TAB DOLLAR INTCONV
%token HEXA DEFINE READ TRANSLATEOFF TRANSLATEON VERILOGBEGIN VERILOGEND TAB DOLLAR MINEQ
%token VOID TTRUE TFALSE ENDFUNC
%token VOID TTRUE TFALSE ENDFUNC INC DEC INTEGER EQUALS
%token PIFDEF PENDDEF PELSE
%token PIFDEF PENDDEF PELSE
 
 
%% commands:    /* empty */
%% commands:    /* empty */
|commands command;
|commands command;
 
 
Line 135... Line 136...
  |
  |
  include
  include
  |
  |
  dollar
  dollar
  |
  |
  intconv
 
  |
 
  tab
  tab
  |
  |
  read
  read
  |
  |
  sc_reg
  sc_reg
  |
  |
 
  integer
 
  |
  number
  number
  |
  |
  bool
  bool
  |
  |
  word
  word
Line 167... Line 168...
  |
  |
  range
  range
  |
  |
  openpar
  openpar
  |
  |
  closepar | void |opencorch | closecorch | bigger | lower | switch |case_only
  closepar
  |case_number
  |
 
  void
 
  |
 
  opencorch
 
  |
 
  closecorch
 
  |
 
  bigger
 
  |
 
  lower
 
  |
 
  switch
 
  |
 
  case_only
 
  |
 
  case_number
 
  |
 
  case_hexnumber
    |
    |
    case_word
    case_word
    |
    |
    case_default
    case_default
    |
    |
    break
    break
    |hexa
  |
 
  hexa
    |
    |
    definemacro
    definemacro
    |
    |
    defineword
    defineword
    |
    |
    definenumber
    definenumber
    |
    |
    translateoff
    translateoff
    |
    |
    translateon
    translateon
    | verilogbegin | verilogend | ifdef | endif | pelse | ttrue | tfalse;
  |
 
  verilogbegin
 
  |
 
  verilogend
 
  |
 
  ifdef
 
  |
 
  endif
 
  |
 
  pelse
 
  |
 
  ttrue
 
  |
 
  tfalse
 
  |
 
  increment
 
  |
 
  decrement
 
  |
 
  equal
 
  |
 
  minorequal;
 
 
 
minorequal:
 
MINEQ
 
{
 
 //This rule is needed because <= in the step two could be confused with a non-blocking assignment
 
 defineparenthesis = 0;
 
  if (translate == 1 && verilog == 0)
 
    {
 
      if (processfound)
 
        {
 
          fprintf (file, "<1+");
 
        }
 
    }
 
  else if (verilog == 1)
 
    fprintf (file, "<=");
 
};
 
 
endfunc:
endfunc:
ENDFUNC
ENDFUNC
{
{
  defineparenthesis = 0;
  defineparenthesis = 0;
Line 233... Line 288...
  defineparenthesis = 0;
  defineparenthesis = 0;
  if (verilog == 1)
  if (verilog == 1)
    fprintf (file, " $");
    fprintf (file, " $");
};
};
 
 
intconv:
 
INTCONV
 
{
 
  defineparenthesis = 0;
 
  if (verilog == 1)
 
    fprintf (file, " (int)");
 
};
 
 
 
tab:
tab:
TAB
TAB
{
{
  defineparenthesis = 0;
  defineparenthesis = 0;
Line 324... Line 372...
    }
    }
  else if (verilog == 1)
  else if (verilog == 1)
    fprintf (file, "#define %s ()", (char *) $2);
    fprintf (file, "#define %s ()", (char *) $2);
}
}
 
 
void:WORD TWODOUBLEPOINTS WORD OPENPAR
void:
 
WORD TWODOUBLEPOINTS WORD OPENPAR
{
{
  defineparenthesis = 0;
  defineparenthesis = 0;
  if (translate == 1 && verilog == 0)
  if (translate == 1 && verilog == 0)
    {
    {
      strcpy (processname, (char *) $4);
      strcpy (processname, (char *) $4);
Line 354... Line 403...
          reg_found = 1;
          reg_found = 1;
        }
        }
    }
    }
};
};
 
 
 
integer:
 
INTEGER
 
{
 
  defineparenthesis = 0;
 
  if (translate == 1 && verilog == 0)
 
    {
 
      if (processfound)
 
        {
 
          fprintf (regs_file, "integer ");
 
          integer_found = 1;
 
        }
 
    }
 
};
 
 
 
 
bool:
bool:
BOOL
BOOL
{
{
  defineparenthesis = 0;
  defineparenthesis = 0;
  if (translate == 1 && verilog == 0)
  if (translate == 1 && verilog == 0)
Line 410... Line 474...
      else if (definefound)
      else if (definefound)
        fprintf (FILE_DEFINES, "%d", $1);
        fprintf (FILE_DEFINES, "%d", $1);
    }
    }
  else if (verilog == 1)
  else if (verilog == 1)
    fprintf (file, "%d", $1);
    fprintf (file, "%d", $1);
 
};
 
 
 
increment:
 
WORD INC
 
{
 
  defineparenthesis = 0;
 
  if (translate == 1 && verilog == 0)
 
       if (processfound){
 
        regname2 = IsReg (regslist, (char *) $1);
 
        if (regname2 == NULL){
 
            fprintf (file, "%s=%s+1", (char *) $1,(char *)$1);
 
        }else
 
            fprintf (file, "%s=%s+1", regname2,regname2);
}
}
 
  else if (verilog == 1)
 
    fprintf (file, "%s++ ", (char *) $1);
 
};
 
 
;
decrement:
 
WORD DEC
 
{
 
  defineparenthesis = 0;
 
  if (translate == 1 && verilog == 0)
 
      if (processfound){
 
        regname2 = IsReg (regslist, (char *) $1);
 
        if (regname2 == NULL){
 
            fprintf (file, "%s=%s+1", (char *) $1,(char *)$1);
 
        }else
 
            fprintf (file, "%s=%s+1", regname2,regname2);
 
      }
 
  else if (verilog == 1)
 
    fprintf (file, "%s-- ", (char *) $1);
 
};
word:
word:
WORD
WORD
{
{
 
 
  defineparenthesis = 0;
  defineparenthesis = 0;
Line 437... Line 531...
 
 
          strcpy (lastword, (char *) $1);
          strcpy (lastword, (char *) $1);
 
 
          if (reg_found)
          if (reg_found)
            {
            {
 
              regname = (char *) malloc (sizeof (char) * (strlen ((char *) $1) + 1));
              regname =
              regname2 = (char *) malloc (sizeof (char) * (strlen ((char *) $1) + strlen (processname)) + 1);
                (char *) malloc (sizeof (char) * (strlen ((char *) $1) + 1));
 
              regname2 =
 
                (char *) malloc (sizeof (char) *
 
                                 (strlen ((char *) $1) +
 
                                  strlen (processname)) + 1);
 
 
 
              strcpy (regname, (char *) $1);
              strcpy (regname, (char *) $1);
              strcpy (regname2, (char *) $1);
              strcpy (regname2, (char *) $1);
              strcat (regname2, processname);
              strcat (regname2, processname);
              fprintf (regs_file, "%s", regname2);
              fprintf (regs_file, "%s", regname2);
 
 
              regslist = InsertReg (regslist, regname, regname2);
              regslist = InsertReg (regslist, regname, regname2);
 
 
              free (regname);
              free (regname);
              free (regname2);
              free (regname2);
            }
            }
          else
          else if(integer_found){
 
              regname = (char *) malloc (sizeof (char) * (strlen ((char *) $1) + 1));
 
              regname2 = (char *) malloc (sizeof (char) * (strlen ((char *) $1) + strlen (processname)) + 1);
 
              strcpy (regname, (char *) $1);
 
              strcpy (regname2, (char *) $1);
 
              strcat (regname2, processname);
 
              fprintf (regs_file, "%s;\n", regname2);
 
 
 
              regslist = InsertReg (regslist, regname, regname2);
 
 
 
              //After adding to list print it
 
              fprintf (file, "%s ", regname2);
 
              integer_found=0;
 
              free (regname);
 
              free (regname2);
 
 
 
          }else
            {
            {
              if (newline)
              if (newline)
                {
                {
                  for (i = 0; i < openedkeys; i++)
                  for (i = 0; i < openedkeys; i++)
                    fprintf (file, "   ");
                    fprintf (file, "   ");
Line 531... Line 635...
    }
    }
  else if (verilog == 1)
  else if (verilog == 1)
    fprintf (file, "%s", (char *) $1);
    fprintf (file, "%s", (char *) $1);
};
};
 
 
 
equal:
 
EQUALS
 
{
 
  defineparenthesis = 0;
 
  reg_found=0;
 
  if (translate == 1 && verilog == 0)
 
  {
 
      if (processfound)
 
        fprintf (file, "=");
 
  }
 
  else if (definefound)
 
    fprintf (FILE_DEFINES, "=");
 
  else if (verilog == 1)
 
    fprintf (file, "=");
 
 
 
}
 
 
write:
write:
WRITE
WRITE
{
{
  defineparenthesis = 0;
  defineparenthesis = 0;
Line 902... Line 1022...
    }
    }
  else if (verilog == 1)
  else if (verilog == 1)
    fprintf (file, "case %d %s", $2, (char *) $3);
    fprintf (file, "case %d %s", $2, (char *) $3);
};
};
 
 
 
case_hexnumber:
 
CASE HEXA NUMBER SYMBOL
 
{
 
  defineparenthesis = 0;
 
  if (translate == 1 && verilog == 0)
 
    {
 
      if (processfound)
 
        {
 
          for (i = 0; i < openedkeys; i++)
 
            fprintf (file, "   ");
 
          if (openedcase)
 
            fprintf (file, ", 'h%d", $3);
 
          else
 
            fprintf (file, "'h%d", $3);
 
 
 
          newline = 1;
 
          openedcase = 1;
 
 
 
        }
 
    }
 
  else if (verilog == 1)
 
    fprintf (file, "case %d %s", $3, (char *) $4);
 
};
 
 
case_word:
case_word:
CASE WORD SYMBOL
CASE WORD SYMBOL
{
{
  defineparenthesis = 0;
  defineparenthesis = 0;
  if (translate == 1 && verilog == 0)
  if (translate == 1 && verilog == 0)

powered by: WebSVN 2.1.0

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