PDA

View Full Version : Devo implementare un linguaggio...


mjordan
24-03-2004, 15:15
Salve a tutti.
Sto lavorando ad un piccolo compilatore. Man mano che procedo nello sviluppo testo piccole sezioni di codice affinchè tutto proceda per il meglio.
Il mio problema si presenta nel parser.

Ho il seguente linguaggio:


L = { (BIT)^n, n >= 1, BIT e { 0,1 } }


Da questo linguaggio si può esprimere una grammatica context-free non ambigua
(quindi LALR con un solo puntatore di look-ahead senza conflitti shift/reduce).
Ho pertanto generato la seguante grammatica:


s => (a)
a => a BIT
a => BIT


Ho quindi generato il parser mediante sintassi YACC (bison -y), mentre lo scanner l'ho
scritto a mano:


%{
#include <stdio.h>

int counter;

int yylex(void);
extern void yyerror(char * s);
%}

%token BIT
%start s

%%

s : '('a')' {
printf("Valore risultante: %d!\n", counter);
return 0;
}
;

a : a BIT {
if ($2 == 1)
counter++;
}
;

a : BIT {
if ($1 == 1)
counter++;
}
;

%%

int
main(void)
{
counter = 0;

return(yyparse());
}

int
yylex(void)
{
char c;

c = getchar();
if (c == '0' || c == '1') {
c = c - '0';
return BIT;
}
else
return c;
}


Il parser dovrebbe restituire il numero di token BIT pari a 1 ma ottengo sempre e solo 0! Non riesco a fare il debugging perchè non ho ancora implementato una symbol table e dio solo sa come bison gestisca internamente i token senza una tabella di simboli. So solo che in sua assenza ci sono solo decine e decine di goto.
Dove sbaglio? :muro:

LukeHack
20-05-2004, 15:40
mjordan non avevo letto sto 3d all'epoca...
ammazza che cacchio stai implementando, roba tostissima!
ma che fine hai fatto? non ti si vede più!
ciao

mjordan
06-12-2008, 23:19
mjordan non avevo letto sto 3d all'epoca...
ammazza che cacchio stai implementando, roba tostissima!
ma che fine hai fatto? non ti si vede più!
ciao

Che tu ci creda o no... Ho visto il tuo messaggio adesso... :asd:
Ora tu mi avrai risposto dopo due mesi... Io ti ho risposto dopo 4 anni e 7 mesi... Va bhè fa niente dai... Poi il problema l'ho risolto implementando la symbol table... Solo che adesso non mi ricordo dove stava l'errore... :asd:

LukeHack
08-12-2008, 12:04
Che tu ci creda o no... Ho visto il tuo messaggio adesso... :asd:
Ora tu mi avrai risposto dopo due mesi... Io ti ho risposto dopo 4 anni e 7 mesi... Va bhè fa niente dai... Poi il problema l'ho risolto implementando la symbol table... Solo che adesso non mi ricordo dove stava l'errore... :asd:

asd ammazza che tempistica... 4 anni lol

Mattyfog
08-12-2008, 13:14
curiosità: e come procede il tuo progetto?