%token RECORDID %token FIELDID %token NUMERO %{ int grafo[16][16]; int linea[16]; int i; %} %% listarec: /* empty */ | listarec rec ; rec: RECORDID '{' listafield '}' { for( i=0; i<16; i++ ) { grafo[$1][i]=linea[i]; linea[i]=0; } } | error ; listafield: field | listafield field ; field: FIELDID '=' NUMERO ';' { linea[$1]=$3; } ; %% int yyerror( char* s ) { printf("-- %s --",s); } main (){ int i,j; int somma; for( i=0; i<16; i++) for( j=0; j<16; j++ ) grafo[i][j]=0; for( i=0; i<16; i++ ) linea[i]=0; yyparse(); printf(" "); for( j=0; j<16; j++ ) printf(" $%02d ",j); printf("\n"); for( i=0; i<16; i++ ) { printf(" @%02d ",i); for( j=0; j<16; j++ ) printf(" %3d ",grafo[i][j]); printf("\n"); } somma=0; for( i=0; i<16; i++ ) somma=somma+grafo[i][0]; printf("\nSomma dei pesi degli archi entranti nel nodo 0: %d\n",somma); return 0; }