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

Subversion Repositories sc2v

[/] [sc2v/] [trunk/] [src/] [sc2v_step1.y] - Diff between revs 4 and 6

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 4 Rev 6
/* -----------------------------------------------------------------------------
/* -----------------------------------------------------------------------------
 *
 *
 *  SystemC to Verilog Translator v0.2
 *  SystemC to Verilog Translator v0.2
 *  Provided by OpenSoc Design
 *  Provided by OpenSoc Design
 *
 *
 *  www.opensocdesign.com
 *  www.opensocdesign.com
 *
 *
 * -----------------------------------------------------------------------------
 * -----------------------------------------------------------------------------
 *  This program is free software; you can redistribute it and/or modify
 *  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
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *  (at your option) any later version.
 *
 *
 *  This program is distributed in the hope that it will be useful,
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Library General Public License for more details.
 *  GNU Library General Public License for more details.
 *
 *
 *  You should have received a copy of the GNU General Public License
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */
 */
%{
%{
#include 
#include 
#include 
#include 
#include "list.h"
#include "list.h"
/* Global var to store Regs */
/* Global var to store Regs */
RegsList *regslist;
RegsList *regslist;
/* Global var to store Defines */
/* Global var to store Defines */
DefinesList *defineslist;
DefinesList *defineslist;
int processfound = 0;
int processfound = 0;
int switchfound = 0;
int switchfound = 0;
int switchparenthesis = 0;
int switchparenthesis = 0;
char *processname, *processname2;
char *processname, *processname2;
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 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;
char *lastword; // Stores last WORD for use it in WRITE
char *lastword; // Stores last WORD for use it in WRITE
char *file_defines;
char *file_defines;
FILE *FILE_DEFINES;
FILE *FILE_DEFINES;
char *file_writes;
char *file_writes;
FILE *FILE_WRITES; //FILE to store .write to know if it is a wire or reg
FILE *FILE_WRITES; //FILE to store .write to know if it is a wire or reg
int definefound = 0;
int definefound = 0;
int defineinvocationfound = 0;
int defineinvocationfound = 0;
int opencorchfound = 0;
int opencorchfound = 0;
int openedcase = 0;
int openedcase = 0;
int default_break_found = 0;
int default_break_found = 0;
int default_found;
int default_found;
//Directives variables
//Directives variables
int translate;
int translate;
int verilog;
int verilog;
int writemethod;
int writemethod;
void yyerror(const char *str)
void yyerror(const char *str)
{
{
        fprintf(stderr,"error: %s\n",str);
        fprintf(stderr,"error: %s\n",str);
}
}
int yywrap()
int yywrap()
{
{
        return 1;
        return 1;
}
}
main()
main()
{
{
        regslist = (RegsList *)malloc(sizeof(RegsList));
        regslist = (RegsList *)malloc(sizeof(RegsList));
        InitializeRegsList(regslist);
        InitializeRegsList(regslist);
        defineslist = (DefinesList *)malloc(sizeof(DefinesList));
        defineslist = (DefinesList *)malloc(sizeof(DefinesList));
        InitializeDefinesList(defineslist);
        InitializeDefinesList(defineslist);
        processname = (char *)malloc(256*sizeof(int));
        processname = (char *)malloc(256*sizeof(int));
        processname2 = (char *)malloc(256*sizeof(int));
        processname2 = (char *)malloc(256*sizeof(int));
        fileregs = (char *)malloc(256*sizeof(int));
        fileregs = (char *)malloc(256*sizeof(int));
        file_defines = (char *)malloc(256*sizeof(int));
        file_defines = (char *)malloc(256*sizeof(int));
        strcpy(file_defines, (char *)"file_defines.sc2v");
        strcpy(file_defines, (char *)"file_defines.sc2v");
        FILE_DEFINES = fopen(file_defines,(char *)"w");
        FILE_DEFINES = fopen(file_defines,(char *)"w");
        file_writes = (char *)malloc(256*sizeof(int));
        file_writes = (char *)malloc(256*sizeof(int));
        strcpy(file_writes, (char *)"file_writes.sc2v");
        strcpy(file_writes, (char *)"file_writes.sc2v");
        FILE_WRITES = fopen(file_writes,(char *)"w");
        FILE_WRITES = fopen(file_writes,(char *)"w");
                        if(FILE_WRITES!=NULL)
                        if(FILE_WRITES!=NULL)
                                printf("\nopening file => filename = %s\n",file_writes);
                                printf("\nopening file => filename = %s\n",file_writes);
    translate=1;
    translate=1;
        verilog=0;
        verilog=0;
        writemethod=0;
        writemethod=0;
        yyparse();
        yyparse();
        fclose(FILE_WRITES);
        fclose(FILE_WRITES);
        fclose(FILE_DEFINES);
        fclose(FILE_DEFINES);
}
}
%}
%}
%token NUMBER WORD SC_INT SC_UINT BOOL BIGGER LOWER OPENKEY CLOSEKEY WRITE WORD SYMBOL NEWLINE ENUM INCLUDE
%token NUMBER WORD SC_INT SC_UINT 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 SC_BIGINT SC_BIGUINT HEXA DEFINE READ TRANSLATEOFF TRANSLATEON VERILOGBEGIN VERILOGEND TAB DOLLAR INTCONV
%token SC_BIGINT SC_BIGUINT HEXA DEFINE READ TRANSLATEOFF TRANSLATEON VERILOGBEGIN VERILOGEND TAB DOLLAR INTCONV
%token VOID
%token VOID TTRUE TFALSE
%token PIFDEF PENDDEF PELSE
%token PIFDEF PENDDEF PELSE
%%
%%
commands: /* empty */
commands: /* empty */
        | commands command
        | commands command
        ;
        ;
command:
command:
    voidword
    voidword
        |
        |
    include
    include
        |
        |
    dollar
    dollar
        |
        |
        intconv
        intconv
        |
        |
        tab
        tab
        |
        |
        read
        read
        |
        |
        sc_int
        sc_int
        |
        |
        sc_uint
        sc_uint
        |
        |
        sc_bigint
        sc_bigint
        |
        |
        sc_biguint
        sc_biguint
        |
        |
        number
        number
        |
        |
        bool
        bool
        |
        |
        word
        word
        |
        |
        symbol
        symbol
        |
        |
        write
        write
        |
        |
        newline
        newline
        |
        |
        openkey
        openkey
        |
        |
        closekey
        closekey
        |
        |
        colon
        colon
        |
        |
        semicolon
        semicolon
        |
        |
        range
        range
        |
        |
        openpar
        openpar
        |
        |
        closepar
        closepar
        |
        |
        void
        void
        |
        |
        opencorch
        opencorch
        |
        |
        closecorch
        closecorch
        |
        |
        bigger
        bigger
        |
        |
        lower
        lower
        |
        |
        switch
        switch
        |
        |
        case_only
        case_only
        |
        |
    case_number
    case_number
        |
        |
        case_word
        case_word
        |
        |
        case_default
        case_default
        |
        |
        break
        break
        |
        |
        hexa
        hexa
        |
        |
        define
        define
        |
        |
        translateoff
        translateoff
        |
        |
        translateon
        translateon
        |
        |
        verilogbegin
        verilogbegin
        |
        |
        verilogend
        verilogend
        |
        |
        ifdef
        ifdef
        |
        |
        endif
        endif
        |
        |
        else
        pelse
 
        |
 
        ttrue
 
        |
 
        tfalse
        ;
        ;
voidword:
voidword:
    VOID
    VOID
        {
        {
        if(verilog==1)
        if(verilog==1)
          fprintf(file," void");
          fprintf(file," void");
        };
        };
include:
include:
    INCLUDE
    INCLUDE
        {
        {
        if(verilog==1)
        if(verilog==1)
          fprintf(file," #include");
          fprintf(file," #include");
        };
        };
dollar:
dollar:
    DOLLAR
    DOLLAR
        {
        {
        if(verilog==1)
        if(verilog==1)
          fprintf(file," $");
          fprintf(file," $");
        };
        };
intconv:
intconv:
    INTCONV
    INTCONV
        {
        {
        if(verilog==1)
        if(verilog==1)
          fprintf(file," (int)");
          fprintf(file," (int)");
        };
        };
tab:
tab:
    TAB
    TAB
        {
        {
        if(verilog==1)
        if(verilog==1)
          fprintf(file," \t");
          fprintf(file," \t");
        };
        };
read:
read:
        READ OPENPAR CLOSEPAR
        READ OPENPAR CLOSEPAR
                {
                {
                if(verilog==1)
                if(verilog==1)
                  fprintf(file,".read()");
                  fprintf(file,".read()");
                }
                }
define:
define:
        DEFINE WORD OPENPAR CLOSEPAR
        DEFINE WORD OPENPAR CLOSEPAR
                {
                {
                  if(translate==1 && verilog==0){
                  if(translate==1 && verilog==0){
                        InsertDefine(defineslist, (char *)$2);
                        InsertDefine(defineslist, (char *)$2);
                        definefound = 1;
                        definefound = 1;
                        fprintf(FILE_DEFINES,"`define %s ",(char *)$2);
                        fprintf(FILE_DEFINES,"`define %s ",(char *)$2);
                  }else if(verilog==1)
                  }else if(verilog==1)
                    fprintf(file,"#define %s ()",(char *)$2);
                    fprintf(file,"#define %s ()",(char *)$2);
                }
                }
void:
void:
        WORD TWODOUBLEPOINTS WORD OPENPAR CLOSEPAR
        WORD TWODOUBLEPOINTS WORD OPENPAR CLOSEPAR
                {
                {
                if(translate==1&& verilog==0){
                if(translate==1&& verilog==0){
                        strcpy(processname ,(char *)$4);
                        strcpy(processname ,(char *)$4);
                        strcpy(processname2 ,(char *)$4);
                        strcpy(processname2 ,(char *)$4);
                        strcat(processname2, (char *)".sc2v");
                        strcat(processname2, (char *)".sc2v");
                        strcpy(fileregs ,(char *)$4);
                        strcpy(fileregs ,(char *)$4);
                        strcat(fileregs, (char *)"_regs.sc2v");
                        strcat(fileregs, (char *)"_regs.sc2v");
                        /*
                        /*
                        strcpy(file_writes, (char *)$4);
                        strcpy(file_writes, (char *)$4);
                        strcat(file_writes, (char *)"_writes.sc2v");
                        strcat(file_writes, (char *)"_writes.sc2v");
                        */
                        */
                }else if(verilog==1)
                }else if(verilog==1)
                  fprintf(file," %s::%s()",(char *)$1,(char *)$3);
                  fprintf(file," %s::%s()",(char *)$1,(char *)$3);
                }
                }
sc_int:
sc_int:
        SC_INT LOWER NUMBER BIGGER
        SC_INT LOWER NUMBER BIGGER
                {
                {
        if(translate==1&& verilog==0){
        if(translate==1&& verilog==0){
                        if(processfound)
                        if(processfound)
                        {
                        {
                                fprintf(regs_file,"reg[%d:0] ",(-1 + $3));
                                fprintf(regs_file,"reg[%d:0] ",(-1 + $3));
                                reg_found = 1;
                                reg_found = 1;
                        }
                        }
                }else if(verilog==1)
                }else if(verilog==1)
                  fprintf(file,"sc_int<%d>",$3);
                  fprintf(file,"sc_int<%d>",$3);
                }
                }
                ;
                ;
sc_uint:
sc_uint:
        SC_UINT LOWER NUMBER BIGGER
        SC_UINT LOWER NUMBER BIGGER
                {
                {
                if(translate==1&& verilog==0){
                if(translate==1&& verilog==0){
                        if(processfound)
                        if(processfound)
                        {
                        {
                                fprintf(regs_file,"reg[%d:0] ",(-1 + $3));
                                fprintf(regs_file,"reg[%d:0] ",(-1 + $3));
                                reg_found = 1;
                                reg_found = 1;
                        }
                        }
                }else if(verilog==1)
                }else if(verilog==1)
                  fprintf(file,"sc_uint<%d>",$3);
                  fprintf(file,"sc_uint<%d>",$3);
                }
                }
                ;
                ;
sc_bigint:
sc_bigint:
        SC_BIGINT LOWER NUMBER BIGGER
        SC_BIGINT LOWER NUMBER BIGGER
                {
                {
                if(translate==1&& verilog==0){
                if(translate==1&& verilog==0){
                        if(processfound)
                        if(processfound)
                        {
                        {
                                fprintf(regs_file,"reg[%d:0] ",(-1 + $3));
                                fprintf(regs_file,"reg[%d:0] ",(-1 + $3));
                                reg_found = 1;
                                reg_found = 1;
                        }
                        }
                }else if(verilog==1)
                }else if(verilog==1)
                 fprintf(file,"sc_bigint<%d> ",$3);
                 fprintf(file,"sc_bigint<%d> ",$3);
                }
                }
                ;
                ;
sc_biguint:
sc_biguint:
        SC_BIGUINT LOWER NUMBER BIGGER
        SC_BIGUINT LOWER NUMBER BIGGER
                {
                {
                if(translate==1&& verilog==0){
                if(translate==1&& verilog==0){
                        if(processfound)
                        if(processfound)
                        {
                        {
                                fprintf(regs_file,"reg[%d:0] ",(-1 + $3));
                                fprintf(regs_file,"reg[%d:0] ",(-1 + $3));
                                reg_found = 1;
                                reg_found = 1;
                        }
                        }
                }else if(verilog==1)
                }else if(verilog==1)
                  fprintf(file,"sc_biguint<%d> ",$3);
                  fprintf(file,"sc_biguint<%d> ",$3);
                }
                }
                ;
                ;
bool:
bool:
                BOOL
                BOOL
                        {
                        {
                    if(translate==1&& verilog==0){
                    if(translate==1&& verilog==0){
                                if(processfound)
                                if(processfound)
                                {
                                {
                                        fprintf(regs_file,"reg ");
                                        fprintf(regs_file,"reg ");
                                        reg_found = 1;
                                        reg_found = 1;
                                }
                                }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,"bool");
                       fprintf(file,"bool");
                        }
                        }
                        ;
                        ;
range:
range:
                RANGE OPENPAR NUMBER COLON NUMBER CLOSEPAR
                RANGE OPENPAR NUMBER COLON NUMBER CLOSEPAR
                        {
                        {
                    if(translate==1&& verilog==0){
                    if(translate==1&& verilog==0){
                                if(processfound)
                                if(processfound)
                                        fprintf(file,"[%d:%d]",$3,$5);
                                        fprintf(file,"[%d:%d]",$3,$5);
                                else if(definefound)
                                else if(definefound)
                                        fprintf(FILE_DEFINES,"[%d:%d]",$3,$5);
                                        fprintf(FILE_DEFINES,"[%d:%d]",$3,$5);
                        }else if(verilog==1)
                        }else if(verilog==1)
                      fprintf(file,".range(%d,%d)",$3,$5);
                      fprintf(file,".range(%d,%d)",$3,$5);
                        }
                        }
                        ;
                        ;
number:
number:
                NUMBER
                NUMBER
                        {
                        {
                        if(translate==1&& verilog==0){
                        if(translate==1&& verilog==0){
                                if(processfound)
                                if(processfound)
                                        if(reg_found)
                                        if(reg_found)
                                        {
                                        {
                                            if(opencorchfound)
                                            if(opencorchfound)
                                                fprintf(regs_file,"%d:0", -1 + $1);
                                                fprintf(regs_file,"%d:0", -1 + $1);
                                            else
                                            else
                                                fprintf(regs_file,"%d",$1);
                                                fprintf(regs_file,"%d",$1);
                                        }
                                        }
                                        else
                                        else
                                                fprintf(file,"%d",$1);
                                                fprintf(file,"%d",$1);
                                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);
                        }
                        }
                        ;
                        ;
word:
word:
                WORD
                WORD
                        {
                        {
                    if(translate==1&& verilog==0){
                    if(translate==1&& verilog==0){
                          if(processfound)
                          if(processfound)
                          {
                          {
                             if(openedcase)
                             if(openedcase)
                             {
                             {
                                fprintf(file," :\n");
                                fprintf(file," :\n");
                                    for(i = 0; i < openedkeys; i++)
                                    for(i = 0; i < openedkeys; i++)
                                            fprintf(file,"   ");
                                            fprintf(file,"   ");
                                    fprintf(file,"begin\n");
                                    fprintf(file,"begin\n");
                                    openedcase = 0;
                                    openedcase = 0;
                             }
                             }
                                 lastword=malloc(sizeof(char)*strlen((char *)$1));
                                 lastword=malloc(sizeof(char)*strlen((char *)$1));
                             strcpy(lastword, (char *)$1);
                             strcpy(lastword, (char *)$1);
                             if(reg_found)
                             if(reg_found)
                             {
                             {
                              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);
                              InsertReg(regslist, regname, regname2);
                              InsertReg(regslist, regname, regname2);
                             }
                             }
                             else
                             else
                             {
                             {
                               if(newline)
                               if(newline)
                                   {
                                   {
                                   for(i = 0; i < openedkeys; i++)
                                   for(i = 0; i < openedkeys; i++)
                                         fprintf(file,"   ");
                                         fprintf(file,"   ");
                                   }
                                   }
                                   regname2 = IsReg(regslist, (char *)$1);
                                   regname2 = IsReg(regslist, (char *)$1);
                                   if(regname2 == NULL)
                                   if(regname2 == NULL)
                                   {
                                   {
                                         if(IsDefine(defineslist, (char *)$1))
                                         if(IsDefine(defineslist, (char *)$1))
                                         {
                                         {
                                           fprintf(file,"`%s", (char *)$1);
                                           fprintf(file,"`%s", (char *)$1);
                                           defineinvocationfound = 1;
                                           defineinvocationfound = 1;
                                         }
                                         }
                                         else
                                         else
                                         {
                                         {
                                           fprintf(file,"%s",(char *)$1);
                                           fprintf(file,"%s ",(char *)$1);
                                         }
                                         }
                                   }
                                   }
                                   else
                                   else
                                         fprintf(file,"%s",regname2);
                                         fprintf(file,"%s",regname2);
                                   newline = 0;
                                   newline = 0;
                             }
                             }
                          }
                          }
                          else if(definefound)
                          else if(definefound)
                          {
                          {
                                if(IsDefine(defineslist, (char *)$1))
                                if(IsDefine(defineslist, (char *)$1))
                                {
                                {
                                        fprintf(FILE_DEFINES,"`%s",(char *)$1);
                                        fprintf(FILE_DEFINES,"`%s",(char *)$1);
                                }
                                }
                                else
                                else
                                {
                                {
                                        fprintf(FILE_DEFINES,"%s ",(char *)$1);
                                        fprintf(FILE_DEFINES,"%s ",(char *)$1);
                                }
                                }
                          }
                          }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file," %s",(char *)$1);
                       fprintf(file," %s",(char *)$1);
                    };
                    };
symbol:
symbol:
                SYMBOL
                SYMBOL
                        {
                        {
                        if(translate==1&& verilog==0){
                        if(translate==1&& verilog==0){
                                if(processfound)
                                if(processfound)
                                {
                                {
                                   if(reg_found)
                                   if(reg_found)
                                        fprintf(regs_file,"%s",(char *)$1);
                                        fprintf(regs_file,"%s",(char *)$1);
                                   else
                                   else
                                        fprintf(file,"%s",(char *)$1);
                                        fprintf(file,"%s",(char *)$1);
                                }
                                }
                                else if(definefound)
                                else if(definefound)
                                {
                                {
                                   fprintf(FILE_DEFINES,"%s",(char *)$1);
                                   fprintf(FILE_DEFINES,"%s",(char *)$1);
                                }
                                }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,"%s",(char *)$1);
                       fprintf(file,"%s",(char *)$1);
                        };
                        };
write:
write:
                WRITE
                WRITE
                        {
                        {
                        if(translate==1&& verilog==0){
                        if(translate==1&& verilog==0){
                writemethod=1;
                writemethod=1;
                                if(processfound)
                                if(processfound)
                                {
                                {
                                        fprintf(file," = ");
                                        fprintf(file," = ");
                                        fprintf(FILE_WRITES, "%s\n", lastword);
                                        fprintf(FILE_WRITES, "%s\n", lastword);
                                }
                                }
                                else if(definefound)
                                else if(definefound)
                                {
                                {
                                        fprintf(FILE_DEFINES," = ");
                                        fprintf(FILE_DEFINES," = ");
                                }
                                }
                                free(lastword);
                                free(lastword);
                        }else if(verilog==1){
                        }else if(verilog==1){
                            fprintf(file,".write");
                            fprintf(file,".write");
                         }
                         }
                        };
                        };
newline:
newline:
                NEWLINE
                NEWLINE
                        {
                        {
                    if(translate==1&& verilog==0){
                    if(translate==1&& verilog==0){
                                if(processfound & !reg_found & !openedcase)
                                if(processfound & !reg_found & !openedcase)
                                {
                                {
                                        fprintf(file,"\n");
                                        fprintf(file,"\n");
                                        newline = 1;
                                        newline = 1;
                                }
                                }
                                else if(definefound)
                                else if(definefound)
                                {
                                {
                                        fprintf(FILE_DEFINES,"\n");
                                        fprintf(FILE_DEFINES,"\n");
                                }
                                }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,"\n");
                       fprintf(file,"\n");
                        };
                        };
colon:
colon:
                COLON
                COLON
                        {
                        {
                        if(translate==1&& verilog==0){
                        if(translate==1&& verilog==0){
                                if(processfound)
                                if(processfound)
                                {
                                {
                                  if(reg_found)
                                  if(reg_found)
                                  {
                                  {
                                        fprintf(regs_file,",");
                                        fprintf(regs_file,",");
                                  }
                                  }
                                  else
                                  else
                                        fprintf(file,",");
                                        fprintf(file,",");
                                }
                                }
                                else if(definefound)
                                else if(definefound)
                                {
                                {
                                        fprintf(FILE_DEFINES,",");
                                        fprintf(FILE_DEFINES,",");
                                }
                                }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,",");
                       fprintf(file,",");
                        };
                        };
semicolon:
semicolon:
                SEMICOLON
                SEMICOLON
                        {
                        {
                    if(translate==1&& verilog==0){
                    if(translate==1&& verilog==0){
                                if(processfound)
                                if(processfound)
                                {
                                {
                                  if(reg_found)
                                  if(reg_found)
                                  {
                                  {
                                        fprintf(regs_file,";\n");
                                        fprintf(regs_file,";\n");
                                        reg_found = 0;
                                        reg_found = 0;
                                  }
                                  }
                                  else if(defineinvocationfound)
                                  else if(defineinvocationfound)
                                  {
                                  {
                                        defineinvocationfound = 0;
                                        defineinvocationfound = 0;
                                  }
                                  }
                                  else
                                  else
                                  {
                                  {
                                        fprintf(file,";");
                                        fprintf(file,";");
                                  }
                                  }
                                }
                                }
                                else if(definefound)
                                else if(definefound)
                                {
                                {
                                        fprintf(FILE_DEFINES,";");
                                        fprintf(FILE_DEFINES,";");
                                }
                                }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,";");
                       fprintf(file,";");
                        };
                        };
openpar:
openpar:
                OPENPAR
                OPENPAR
                        {
                        {
            if(translate==1 && verilog==0){
            if(translate==1 && verilog==0){
                                if(processfound)
                                if(processfound)
                                {
                                {
                                        fprintf(file,"(");
                                        fprintf(file,"(");
                                }
                                }
                                else if(definefound)
                                else if(definefound)
                                {
                                {
                                        fprintf(FILE_DEFINES,"(");
                                        fprintf(FILE_DEFINES,"(");
                                }
                                }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,"(");
                       fprintf(file,"(");
                        };
                        };
closepar:
closepar:
                CLOSEPAR
                CLOSEPAR
                        {
                        {
                    if(translate==1&& verilog==0){
                    if(translate==1&& verilog==0){
                                if(processfound)
                                if(processfound)
                                {
                                {
                                        fprintf(file,")");
                                        fprintf(file,")");
                                }
                                }
                                else if(definefound)
                                else if(definefound)
                                {
                                {
                                        fprintf(FILE_DEFINES,")");
                                        fprintf(FILE_DEFINES,")");
                                }
                                }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,")");
                       fprintf(file,")");
                        };
                        };
opencorch:
opencorch:
                OPENCORCH
                OPENCORCH
                        {
                        {
                        if(translate==1&& verilog==0){
                        if(translate==1&& verilog==0){
                                if(processfound)
                                if(processfound)
                                {
                                {
                                  if(reg_found)
                                  if(reg_found)
                                  {
                                  {
                                        fprintf(regs_file,"[");
                                        fprintf(regs_file,"[");
                                        opencorchfound = 1;
                                        opencorchfound = 1;
                                  }
                                  }
                                  else
                                  else
                                        fprintf(file,"[");
                                        fprintf(file,"[");
                                }
                                }
                                else if(definefound)
                                else if(definefound)
                                {
                                {
                                        fprintf(FILE_DEFINES,"[");
                                        fprintf(FILE_DEFINES,"[");
                                }
                                }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,"[");
                       fprintf(file,"[");
                        };
                        };
closecorch:
closecorch:
                CLOSECORCH
                CLOSECORCH
                        {
                        {
                    if(translate==1&& verilog==0){
                    if(translate==1&& verilog==0){
                                if(processfound)
                                if(processfound)
                                {
                                {
                                  if(reg_found)
                                  if(reg_found)
                                  {
                                  {
                                        fprintf(regs_file,"]");
                                        fprintf(regs_file,"]");
                                        opencorchfound = 0;
                                        opencorchfound = 0;
                                  }
                                  }
                                  else
                                  else
                                        fprintf(file,"]");
                                        fprintf(file,"]");
                                }
                                }
                                else if(definefound)
                                else if(definefound)
                                {
                                {
                                        fprintf(FILE_DEFINES,"]");
                                        fprintf(FILE_DEFINES,"]");
                                }
                                }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,"]");
                       fprintf(file,"]");
                        };
                        };
openkey:
openkey:
                OPENKEY
                OPENKEY
                        {
                        {
                    if(translate==1 && verilog==0){
                    if(translate==1 && verilog==0){
                                openedkeys++;
                                openedkeys++;
                                if(openedkeys==1 & !definefound)
                                if(openedkeys==1 & !definefound)
                                {
                                {
                                        printf("opening file => filename = %s\n",processname2);
                                        printf("opening file => filename = %s\n",processname2);
                                        file = fopen(processname2,(char *)"w");
                                        file = fopen(processname2,(char *)"w");
                                        printf("opening file => filename = %s\n",fileregs);
                                        printf("opening file => filename = %s\n",fileregs);
                                        regs_file = fopen(fileregs,(char *)"w");
                                        regs_file = fopen(fileregs,(char *)"w");
                                        processfound = 1;
                                        processfound = 1;
                                        regslist = (RegsList *)malloc(sizeof(RegsList));
                                        regslist = (RegsList *)malloc(sizeof(RegsList));
                                        InitializeRegsList(regslist);
                                        InitializeRegsList(regslist);
                                        regname = (char *)malloc(256*sizeof(int));
                                        regname = (char *)malloc(256*sizeof(int));
                                        regname2 = (char *)malloc(256*sizeof(int));
                                        regname2 = (char *)malloc(256*sizeof(int));
                                }
                                }
                                if(processfound)
                                if(processfound)
                                        if(openedkeys != switchparenthesis)
                                        if(openedkeys != switchparenthesis)
                                        {
                                        {
 
                                            fprintf(file,"\n");
                                                for(i = 0; i < openedkeys; i++)
                                                for(i = 0; i < openedkeys; i++)
                                                        fprintf(file,"   ");
                                                        fprintf(file,"   ");
                                                fprintf(file,"begin\n");
                                                fprintf(file,"begin\n");
                                                newline = 1;
                                                newline = 1;
                                        }
                                        }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,"{");
                       fprintf(file,"{");
                        }
                        }
                        ;
                        ;
closekey:
closekey:
                CLOSEKEY
                CLOSEKEY
                        {
                        {
            if(translate==1&& verilog==0){
            if(translate==1&& verilog==0){
                                if(processfound)
                                if(processfound)
                                {
                                {
                                        if(openedkeys==switchparenthesis & switchfound == 1)
                                        if(openedkeys==switchparenthesis & switchfound == 1)
                                        {
                                        {
                                                fprintf(file,"\n");
                                                fprintf(file,"\n");
                                                if(default_found & !default_break_found)
                                                if(default_found & !default_break_found)
                                                {
                                                {
                                                for(i = 0; i < openedkeys; i++)
                                                for(i = 0; i < openedkeys; i++)
                                                        fprintf(file,"   ");
                                                        fprintf(file,"   ");
                                                fprintf(file,"end\n");
                                                fprintf(file,"end\n");
                                                default_found = 0;
                                                default_found = 0;
                                                }
                                                }
                                                for(i = 0; i < openedkeys; i++)
                                                for(i = 0; i < openedkeys; i++)
                                                        fprintf(file,"   ");
                                                        fprintf(file,"   ");
                                                fprintf(file,"endcase\n");
                                                fprintf(file,"endcase\n");
                                                newline = 1;
                                                newline = 1;
                                                switchfound = 0;
                                                switchfound = 0;
                                                switchparenthesis = 0;
                                                switchparenthesis = 0;
                                        }
                                        }
                                        else
                                        else
                                        {
                                        {
                                                fprintf(file,"\n");
                                                fprintf(file,"\n");
                                                for(i = 0; i < openedkeys; i++)
                                                for(i = 0; i < openedkeys; i++)
                                                        fprintf(file,"   ");
                                                        fprintf(file,"   ");
                                                fprintf(file,"end\n");
                                                fprintf(file,"end\n");
                                                newline = 1;
                                                newline = 1;
                                        }
                                        }
                                }
                                }
                                openedkeys--;
                                openedkeys--;
                                if(definefound)
                                if(definefound)
                                {
                                {
                                        definefound = 0;
                                        definefound = 0;
                                        fprintf(FILE_DEFINES,"\n//Dummy Comment\n");
                                        fprintf(FILE_DEFINES,"\n//Dummy Comment\n");
                                }
                                }
                                else if(openedkeys==0)
                                else if(openedkeys==0)
                                {
                                {
                                        fclose(file);
                                        fclose(file);
                                        fclose(regs_file);
                                        fclose(regs_file);
                                        free(regslist);
                                        free(regslist);
                                        free(regname);
                                        free(regname);
                                        free(regname2);
                                        free(regname2);
                                        processfound = 0;
                                        processfound = 0;
                                }
                                }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,"}");
                       fprintf(file,"}");
                        };
                        };
bigger:
bigger:
                BIGGER
                BIGGER
                        {
                        {
            if(translate==1&& verilog==0){
            if(translate==1&& verilog==0){
                                if(processfound)
                                if(processfound)
                                {
                                {
                                        fprintf(file,">");
                                        fprintf(file,">");
                                }
                                }
                                else if(definefound)
                                else if(definefound)
                                {
                                {
                                        fprintf(FILE_DEFINES,">");
                                        fprintf(FILE_DEFINES,">");
                                }
                                }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,">");
                       fprintf(file,">");
                        };
                        };
lower:
lower:
                LOWER
                LOWER
                        {
                        {
                        if(translate==1&& verilog==0){
                        if(translate==1&& verilog==0){
                                if(processfound)
                                if(processfound)
                                {
                                {
                                        fprintf(file,"<");
                                        fprintf(file,"<");
                                }
                                }
                                else if(definefound)
                                else if(definefound)
                                {
                                {
                                        fprintf(FILE_DEFINES,"<");
                                        fprintf(FILE_DEFINES,"<");
                                }
                                }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,"<");
                       fprintf(file,"<");
                        };
                        };
switch:
switch:
                SWITCH
                SWITCH
                        {
                        {
                        if(translate==1&& verilog==0){
                        if(translate==1&& verilog==0){
                          if(processfound)
                          if(processfound)
                                {
                                {
                                        fprintf(file,"\n");
                                        fprintf(file,"\n");
                                        for(i = 0; i < openedkeys; i++)
                                        for(i = 0; i < openedkeys; i++)
                                                fprintf(file,"   ");
                                                fprintf(file,"   ");
                                        fprintf(file,"case");
                                        fprintf(file,"case");
                                        switchfound = 1;
                                        switchfound = 1;
                                        switchparenthesis = openedkeys + 1;
                                        switchparenthesis = openedkeys + 1;
                                }
                                }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,"switch");
                       fprintf(file,"switch");
                        };
                        };
case_number:
case_number:
                CASE NUMBER SYMBOL
                CASE NUMBER SYMBOL
                        {
                        {
                        if(translate==1&& verilog==0){
                        if(translate==1&& verilog==0){
                          if(processfound)
                          if(processfound)
                          {
                          {
                                for(i = 0; i < openedkeys; i++)
                                for(i = 0; i < openedkeys; i++)
                                        fprintf(file,"   ");
                                        fprintf(file,"   ");
                                if(openedcase)
                                if(openedcase)
                                        fprintf(file,", %d",$2);
                                        fprintf(file,", %d",$2);
                                else
                                else
                                        fprintf(file,"%d",$2);
                                        fprintf(file,"%d",$2);
                                newline = 1;
                                newline = 1;
                                openedcase = 1;
                                openedcase = 1;
                          }
                          }
                        }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_word:
case_word:
                CASE WORD SYMBOL
                CASE WORD SYMBOL
                        {
                        {
                        if(translate==1&& verilog==0){
                        if(translate==1&& verilog==0){
                          if(processfound)
                          if(processfound)
                          {
                          {
                                for(i = 0; i < openedkeys; i++)
                                for(i = 0; i < openedkeys; i++)
                                        fprintf(file,"   ");
                                        fprintf(file,"   ");
                                if(openedcase)
                                if(openedcase)
                                        fprintf(file,", %s",(char *)$2);
                                        fprintf(file,", %s",(char *)$2);
                                else
                                else
                                        fprintf(file,"%s",(char *)$2);
                                        fprintf(file,"%s",(char *)$2);
                                newline = 1;
                                newline = 1;
                                openedcase = 1;
                                openedcase = 1;
                          }
                          }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,"case %s %s",(char *)$2,(char *)$3);
                       fprintf(file,"case %s %s",(char *)$2,(char *)$3);
                        };
                        };
case_default:
case_default:
                DEFAULT SYMBOL
                DEFAULT SYMBOL
                        {
                        {
                        if(translate==1&& verilog==0){
                        if(translate==1&& verilog==0){
                          if(processfound)
                          if(processfound)
                          {
                          {
                                for(i = 0; i < openedkeys; i++)
                                for(i = 0; i < openedkeys; i++)
                                        fprintf(file,"   ");
                                        fprintf(file,"   ");
                                fprintf(file,"default:\n");
                                fprintf(file,"default:\n");
                                for(i = 0; i < openedkeys; i++)
                                for(i = 0; i < openedkeys; i++)
                                        fprintf(file,"   ");
                                        fprintf(file,"   ");
                                fprintf(file,"begin\n");
                                fprintf(file,"begin\n");
                                newline = 1;
                                newline = 1;
                                default_found = 1;
                                default_found = 1;
                          }
                          }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,"default %s",(char *)$2);
                       fprintf(file,"default %s",(char *)$2);
                        };
                        };
case_only:
case_only:
        CASE OPENPAR
        CASE OPENPAR
                {
                {
                //This rule occurs when in Verilog mode a case appears
                //This rule occurs when in Verilog mode a case appears
                if(verilog==1)
                if(verilog==1)
                  fprintf(file,"case(");
                  fprintf(file,"case(");
        };
        };
break:
break:
                BREAK SEMICOLON
                BREAK SEMICOLON
                        {
                        {
                        if(translate==1&& verilog==0){
                        if(translate==1&& verilog==0){
                         if(processfound)
                         if(processfound)
                         {
                         {
                                if(newline == 0)
                                if(newline == 0)
                                        fprintf(file,"\n");
                                        fprintf(file,"\n");
                                for(i = 0; i < openedkeys; i++)
                                for(i = 0; i < openedkeys; i++)
                                        fprintf(file,"   ");
                                        fprintf(file,"   ");
                                fprintf(file,"end\n");
                                fprintf(file,"end\n");
                                if(default_found)
                                if(default_found)
                                        {
                                        {
                                                default_break_found = 1;
                                                default_break_found = 1;
                                        }
                                        }
                         }
                         }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,"break;");
                       fprintf(file,"break;");
                        };
                        };
hexa:
hexa:
                HEXA
                HEXA
                        {
                        {
                    if(translate==1&& verilog==0){
                    if(translate==1&& verilog==0){
                        if(processfound)
                        if(processfound)
                        {
                        {
                                fprintf(file,"'h");
                                fprintf(file,"'h");
                        }
                        }
                        else if(definefound)
                        else if(definefound)
                        {
                        {
                                fprintf(FILE_DEFINES,"'h");
                                fprintf(FILE_DEFINES,"'h");
                        }
                        }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,"0x");
                       fprintf(file,"0x");
                        };
                        };
translateoff:
translateoff:
        TRANSLATEOFF
        TRANSLATEOFF
                {
                {
                  translate=0;
                  translate=0;
                  fprintf(stderr,"Found Translate off directive \n");
                  fprintf(stderr,"Found Translate off directive \n");
        };
        };
translateon:
translateon:
        TRANSLATEON
        TRANSLATEON
                {
                {
                  translate=1;
                  translate=1;
                  fprintf(stderr,"Found Translate on directive \n");
                  fprintf(stderr,"Found Translate on directive \n");
        };
        };
verilogbegin:
verilogbegin:
        VERILOGBEGIN
        VERILOGBEGIN
                {
                {
                  verilog=1;
                  verilog=1;
                  fprintf(stderr,"Found Verilog Begin directive \n");
                  fprintf(stderr,"Found Verilog Begin directive \n");
        };
        };
verilogend:
verilogend:
        VERILOGEND
        VERILOGEND
                {
                {
                  verilog=0;
                  verilog=0;
                  fprintf(stderr,"Found Verilog End directive \n");
                  fprintf(stderr,"Found Verilog End directive \n");
        };
        };
ifdef:
ifdef:
       PIFDEF
       PIFDEF
           {
           {
            if(translate==1&& verilog==0){
            if(translate==1&& verilog==0){
                                if(processfound)
                                if(processfound)
                                {
                                {
                                        fprintf(file,"`ifdef");
                                        fprintf(file,"`ifdef");
                                }
                                }
                                else if(definefound)
                                else if(definefound)
                                {
                                {
                                        fprintf(FILE_DEFINES,"`ifdef");
                                        fprintf(FILE_DEFINES,"`ifdef");
                                }
                                }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,"#ifdef");
                       fprintf(file,"#ifdef");
                        };
                        };
endif:
endif:
       PENDDEF
       PENDDEF
           {
           {
            if(translate==1&& verilog==0){
            if(translate==1&& verilog==0){
                                if(processfound)
                                if(processfound)
                                {
                                {
                                        fprintf(file,"`endif");
                                        fprintf(file,"`endif");
                                }
                                }
                                else if(definefound)
                                else if(definefound)
                                {
                                {
                                        fprintf(FILE_DEFINES,"`endif");
                                        fprintf(FILE_DEFINES,"`endif");
                                }
                                }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,"#endif");
                       fprintf(file,"#endif");
                        };
                        };
else:
pelse:
       PELSE
       PELSE
           {
           {
            if(translate==1&& verilog==0){
            if(translate==1&& verilog==0){
                                if(processfound)
                                if(processfound)
                                {
                                {
                                        fprintf(file,"`else");
                                        fprintf(file,"`else");
                                }
                                }
                                else if(definefound)
                                else if(definefound)
                                {
                                {
                                        fprintf(FILE_DEFINES,"`else");
                                        fprintf(FILE_DEFINES,"`else");
                                }
                                }
                        }else if(verilog==1)
                        }else if(verilog==1)
                       fprintf(file,"#else");
                       fprintf(file,"#else");
                        };
                        };
 
ttrue:
 
      TTRUE
 
          {
 
                if(translate==1&& verilog==0){
 
                                if(processfound)
 
                                {
 
                                        fprintf(file,"1");
 
                                }
 
                        }else if(verilog==1)
 
                       fprintf(file,"1");
 
                        };
 
 
 
 
 
tfalse:
 
      TFALSE
 
          {
 
                if(translate==1&& verilog==0){
 
                                if(processfound)
 
                                {
 
                                        fprintf(file,"0");
 
                                }
 
                        }else if(verilog==1)
 
                       fprintf(file,"0");
 
                        };
 
 

powered by: WebSVN 2.1.0

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