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
[email protected]
https://lists.sourceforge.net/lists/listinfo/gnuwin32-users