Read and respond to this message at: 
https://sourceforge.net/forum/message.php?msg_id=5941940
By: glutters

Yes, but it works on XP. 

The code: 

%{

#define  YYSTYPE char*  // deve cambiare
#include <stdlib.h>
#include <getopt.h>
#include "error.h"




%}


/**
Credo sia opportuno dichiarare  un struttura apposita per i token
**/

%token NL
%token DOTCOMMA
%token CLASS
%token ASPECT
%token DEF
%token TYPE
%token ID
%token ASSIGN
%token LPAREN
%token RPAREN
%token LSQPAREN
%token RSQPAREN
%token GLPAREN
%token GRPAREN
%token STRINGDQ
%token STRINGSQ
%token PUBLIC
%token PRIVATE
%token PROTECTED
%token INT
%token FLOAT
%token EXNUM
%token CHAR 
%token DEFINE
%token ENDIF
%token ASPECT
%token MAIN
%token IFDEF
%token COMPTYPE
%token TYPEOF
%token SELF
%token INIT
%token NOT
%token COMPONENT
%token EXTENDS
%token IMPLEMENTS
%token IF
%token SWITCH
%token CASE
%token IN
%token IMPORT
%token TRY
%token EXCEPT
%token PRINT
%token RAISE
%token WHILE 
%token REF
%token LSHIFT
%token RSHIFT
%token BREAK
%token RETURN 
%token DIVEQ
%token INCR 
%token DECR
%token CLASS
%token INTERFACE 
%token DOT
%token TRUE
%token FALSE
%token FOR
%token NEQ
%token DDOT
%token COMMA 
%token FOR 
%token OR
%token AND
%token EQ


/*************************************************************
DEVO USARE QUESTA STRUTTURA UNA VOLTA GENERATA UNA SINTASSI CORRETTA
%union{
char *content;
var *v;
};
*************************************************************/



%left '+' '-' '*' '/'
%left ANDBIT ORBIT XORBIT LT GT LTEQ GTEQ NEQ
%left AND OR EQ
%right LSHIFT RSHIFT
%right NOTBIT NOT
%start lines



%%
// Like python C++ mixed

 /*         
                   tutte queste regole vanno aggiunte al disotto 
                   della produzione comp_decl
                   | modifier INTERFACE ID GLPAREN  GRPAREN comp_decl           
     {}

           | modifier CLASS ID GLPAREN class_dec GRPAREN comp_decl         
{}
           | modifier INTERFACE ID GLPAREN  GRPAREN comp_decl                {}
             funzionalitĂ  avanzate da investigare
           | modifier ASPECT ID aspect_dec                                 
{}
           | modifier DEBUG ID RPAREN param_dec LPAREN GLPAREN debug_dec GRPAREN
{}
         */


// Produzione iniziale funzionante :-)

lines: lines header COMPONENT ID GLPAREN  comp_decl GRPAREN NL
      |lines NL
      |
      |lines error NL { yyerrok;}
      ;
// Dichiarazione di classe
comp_decl: modifier CLASS ID class_extra GLPAREN class_dec  GRPAREN comp_decl
{}
           |
           ;

// Dichiarazione di implementazioni di interfaccie e/o estensioni
di superclasse
class_extra: DDOT IMPLEMENTS seq_id EXTENDS ID
             |
             DDOT EXTENDS ID
             ;


seq_id: ID COMMA seq_id
        | ID
        ;




header: IMPORT seq_imp DOTCOMMA header
        | DEFINE "DEBUG" {}
        |
        ;

modifier:   PUBLIC
          | PRIVATE
          | PROTECTED
          ;

seq_imp: ID DOT seq_imp
         |ID
         ;


class_dec:  DEF method_dec class_dec
           | modifier TYPE REF ID DOTCOMMA     class_dec                   
{}
           | modifier TYPE ID DOTCOMMA         class_dec                   
{}
           | modifier ID ASSIGN TYPE DOTCOMMA  class_dec                   
{}
           | modifier ID ASSIGN INT DOTCOMMA   class_dec                   
{}
           | modifier ID ASSIGN EXNUM DOTCOMMA    class_dec                
{}
           | modifier ID ASSIGN CHAR DOTCOMMA     class_dec                
{}
           | modifier ID ASSIGN STRINGDQ DOTCOMMA class_dec                
{}
           | modifier ID ASSIGN STRINGSQ DOTCOMMA class_dec                
{}
           | modifier ID ASSIGN TRUE DOTCOMMA class_dec                    
{}
           | modifier ID ASSIGN FALSE DOTCOMMA class_dec                   
{}
           | modifier COMPTYPE REF ID DOTCOMMA class_dec                   
{}
           | modifier COMPTYPE  ID DOTCOMMA class_dec                      
{}
           | modifier ID ASSIGN COMPTYPE DOTCOMMA class_dec                
{}
           | modifier COMPTYPE ID ASSIGN LSQPAREN item_list RSQPAREN DOTCOMMA
class_dec   {}
           | modifier COMPTYPE ID ASSIGN GLPAREN dict_list GRPAREN DOTCOMMA
class_dec     {}
           | modifier COMPTYPE ID ASSIGN LPAREN item_list RPAREN DOTCOMMA 
class_dec
{}
           | modifier ID ASSIGN LSQPAREN item_list  RSQPAREN  DOTCOMMA class_dec
{}
           | modifier ID ASSIGN GLPAREN dict_list  GRPAREN DOTCOMMA class_dec
{}
           | modifier ID ASSIGN LPAREN item_list RPAREN DOTCOMMA   class_dec
{}
           |
           ;

method_dec: MAIN LPAREN param_dec RPAREN modifier GLPAREN  GRPAREN   {/*main
method*/}
          | MAIN LPAREN param_dec RPAREN GLPAREN  GRPAREN   {/*main method*/}
          | INIT LPAREN param_dec RPAREN modifier GLPAREN  GRPAREN
{/*Costruttore*/}
          | INIT LPAREN param_dec RPAREN GLPAREN  GRPAREN   {/*Costruttore*/}
          | ID LPAREN   param_dec RPAREN modifier GLPAREN  GRPAREN     {}
          | ID LPAREN   param_dec RPAREN GLPAREN  GRPAREN
          ;

/**
Dengling else problem...  ! :-) Risolto
**/


param_dec: TYPE REF ID             sufx_param_dec
           |TYPE ID                sufx_param_dec
           |ID ASSIGN TYPE         sufx_param_dec
           |COMPTYPE REF ID        sufx_param_dec
           |COMPTYPE ID            sufx_param_dec
           |ID ASSIGN COMPTYPE     sufx_param_dec
           |COMPTYPE ID ASSIGN LSQPAREN item_list RSQPAREN  sufx_param_dec
           |COMPTYPE ID ASSIGN LPAREN item_list RPAREN  sufx_param_dec
           |COMPTYPE ID ASSIGN GLPAREN dict_list GRPAREN   sufx_param_dec
           |ID ASSIGN LSQPAREN item_list RSQPAREN  sufx_param_dec
           |ID ASSIGN GLPAREN dict_list GRPAREN  sufx_param_dec
           |ID ASSIGN LPAREN item_list RPAREN   sufx_param_dec
           ;

sufx_param_dec: COMMA param_dec
     | 
     ;


item_list:   INT  sufx_item_list
           | CHAR sufx_item_list
           | EXNUM  sufx_item_list
           | STRINGSQ sufx_item_list
           | STRINGDQ sufx_item_list
           | FALSE   sufx_item_list
           | TRUE    sufx_item_list
           ;

sufx_item_list: COMMA item_list
                |
                ;

dict_list:  INT DDOT INT     sufx_dict_list
           |INT DDOT CHAR     sufx_dict_list
           |INT DDOT STRINGDQ sufx_dict_list
           |INT DDOT STRINGSQ sufx_dict_list
           |INT DDOT FLOAT    sufx_dict_list
           |INT DDOT TRUE     sufx_dict_list
           |INT DDOT FALSE    sufx_dict_list
           |INT DDOT LPAREN item_list RPAREN   sufx_dict_list
           |INT DDOT LSQPAREN item_list RSQPAREN  sufx_dict_list

           |CHAR DDOT INT   sufx_dict_list
           |CHAR DDOT CHAR  sufx_dict_list
           |CHAR DDOT STRINGDQ  sufx_dict_list
           |CHAR DDOT STRINGSQ  sufx_dict_list
           |CHAR DDOT FLOAT     sufx_dict_list
           |CHAR DDOT TRUE      sufx_dict_list
           |CHAR DDOT FALSE     sufx_dict_list
           |CHAR DDOT LPAREN item_list RPAREN   sufx_dict_list
           |CHAR DDOT LSQPAREN item_list RSQPAREN  sufx_dict_list
           
           |STRINGDQ DDOT INT  sufx_dict_list
           |STRINGDQ DDOT CHAR sufx_dict_list
           |STRINGDQ DDOT STRINGDQ sufx_dict_list
           |STRINGDQ DDOT STRINGSQ sufx_dict_list
           |STRINGDQ DDOT FLOAT    sufx_dict_list
           |STRINGDQ DDOT TRUE     sufx_dict_list
           |STRINGDQ DDOT FALSE    sufx_dict_list
           |STRINGDQ DDOT LPAREN item_list RPAREN  sufx_dict_list
           |STRINGDQ DDOT LSQPAREN item_list RSQPAREN  sufx_dict_list
           
           |STRINGSQ DDOT INT     sufx_dict_list
           |STRINGSQ DDOT CHAR    sufx_dict_list
           |STRINGSQ DDOT STRINGDQ  sufx_dict_list
           |STRINGSQ DDOT STRINGSQ  sufx_dict_list
           |STRINGSQ DDOT FLOAT     sufx_dict_list
           |STRINGSQ DDOT TRUE      sufx_dict_list
           |STRINGSQ DDOT FALSE     sufx_dict_list
           |STRINGSQ DDOT LPAREN item_list RPAREN   sufx_dict_list
           |STRINGSQ DDOT LSQPAREN item_list RSQPAREN  sufx_dict_list

           |FLOAT DDOT INT    sufx_dict_list
           |FLOAT DDOT CHAR   sufx_dict_list
           |FLOAT DDOT STRINGDQ  sufx_dict_list
           |FLOAT DDOT STRINGSQ  sufx_dict_list
           |FLOAT DDOT FLOAT     sufx_dict_list
           |FLOAT DDOT TRUE      sufx_dict_list
           |FLOAT DDOT FALSE     sufx_dict_list
           |FLOAT DDOT LPAREN item_list RPAREN   sufx_dict_list
           |FLOAT DDOT LSQPAREN item_list RSQPAREN  sufx_dict_list

           |TRUE DDOT INT   sufx_dict_list
           |TRUE DDOT CHAR  sufx_dict_list
           |TRUE DDOT STRINGDQ sufx_dict_list
           |TRUE DDOT STRINGSQ sufx_dict_list
           |TRUE DDOT FLOAT    sufx_dict_list
           |TRUE DDOT TRUE     sufx_dict_list
           |TRUE DDOT FALSE    sufx_dict_list
           |TRUE DDOT LPAREN item_list RPAREN     sufx_dict_list
           |TRUE DDOT LSQPAREN item_list RSQPAREN sufx_dict_list
           |FALSE DDOT INT   sufx_dict_list
           |FALSE DDOT CHAR  sufx_dict_list
           |FALSE DDOT STRINGDQ   sufx_dict_list
           |FALSE DDOT STRINGSQ   sufx_dict_list
           |FALSE DDOT FLOAT      sufx_dict_list
           |FALSE DDOT TRUE       sufx_dict_list
           |FALSE DDOT FALSE      sufx_dict_list
           |FALSE DDOT LPAREN item_list RPAREN  sufx_dict_list
           |FALSE DDOT LSQPAREN item_list RSQPAREN  sufx_dict_list
           ;


sufx_dict_list: COMMA dict_list
                |
                ;

%%

#include "lex.yy.c"



int yyerror(char const *msg){

  fprintf(stderr, "error at line: %d, %s", yylineno, msg);
  exit(-1);


}


void handleArguments(int argc, char *argv[]){

      char c;
      char *input_file = NULL;
      char *output_file = NULL;
      // Può contenere o un percorso ad un file o una directory
      // NOTA: bisogna definire un formato per le librerie
      char *library = NULL;

      short assembler_opt = FALSE;
      int opt_level = 0;



      while((c = getopt(argc, argv, "i:o:L:a:O:")) != EOF){


        switch(c){
          
          case 'i':
               // input file
               input_file = optarg;
               break;
          case 'o':
               // output file
               output_file = optarg;
               break;
          case 'L': 
               // library in input
               library = optarg;
               break;
          case 'a':
               // Compile and assembly in bytecode
               assembler_opt = TRUE;
               break;
          case 'O':
               opt_level = atoi(optarg);
               break;

          default:
               break;

        }
      } // END WHILE

}




int main(int argc, char *argv[]){
  

  // handleArguments(argc,argv);
  

  yyin = stdin;
  yyparse();

}

 

______________________________________________________________________
You are receiving this email because you elected to monitor this forum.
To stop monitoring this forum, login to SourceForge.net and visit: 
https://sourceforge.net/forum/unmonitor.php?forum_id=74807

------------------------------------------------------------------------------
_______________________________________________
GnuWin32-Users mailing list
GnuWin32-Users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gnuwin32-users

Reply via email to