PDA

View Full Version : [C] Parsing


maxithron
11-01-2004, 03:44
Premessa:

Non ho problemi a costruire un albero di parsing partendo da un'espressione prefissa.

Dubbio:

Dopo ogni chiamata della funz. ricorsiva, non si dovrebbe generare un nodo che contiene il carattere successivo che viene letto dall'input?

mjordan
11-01-2004, 04:16
Va bene se ti rispondo fra tre mesi? ;-)
Sto studiando giorno e notte la teoria dei compilatori... Terrò a mente il quesito durante lo studio... :D

maxithron
11-01-2004, 12:51
Siamo in due a fare le nottate allora :D ma credo che forse una risposta l'ho già trovata.

Voglio solo esserne sicuro e poi la posto.

mjordan
11-01-2004, 16:51
Stai usando qualche libro in particolare? Io il "dragon book",
Aho, Sethi, Ullman
Compilers: Principles, techniques and tools di Addison Wesley.

Fantastico.

http://images.amazon.com/images/P/0201101947.01.LZZZZZZZ.jpg

maxithron
12-01-2004, 00:38
Ma vaaaa..... non ci posso credere!! Ovviamente si, è proprio il libro in questione.

Unito anche all'ottimo "Algoritmi in C" di Sedgewick.

maxithron
12-01-2004, 02:01
dovrebbe essere così se gli operandi sono caratteri singoli:



char *a;

int i;

typedef struct Tnode* link;

struct Tnode {char token; link l, r; } ;

link New(char token, link l, r)

{
link x = malloc(sizeof *x);
x->token = token; x-> l = l; x->r = r;
return x;
}



link parse()
{
char t = a[i++];
link x = NEW(t, NULL, NULL);

if ((t == '+') || (t == '*'))
{
x->1 = parse(); x->r = parse();
}
return x;
}

Dun
12-01-2004, 03:03
Originariamente inviato da mjordan
Stai usando qualche libro in particolare? Io il "dragon book",
Aho, Sethi, Ullman
Compilers: Principles, techniques and tools di Addison Wesley.

Fantastico.

http://images.amazon.com/images/P/0201101947.01.LZZZZZZZ.jpg

Ma allora non sono l'unico ad avere quel mega tomo
:D :D :D

/\/\@®¢Ø
12-01-2004, 03:07
Originariamente inviato da Dun
Ma allora non sono l'unico ad avere quel mega tomo
:D :D :D
piu' diffuso della bibbia :D

mjordan
12-01-2004, 03:50
La copertina è a dir poco filosofica...
Fateci caso... Piu' un informatico è teorico e più è filosofo ...

mjordan
12-01-2004, 04:07
Originariamente inviato da maxithron
Unito anche all'ottimo "Algoritmi in C" di Sedgewick.

Io ho la bibbia degli algoritmi:

Cormen, Leiserson, Rivest
Introduction to Algorithms
Jackson Libri

http://www.amazon.com/gp/reader/0262032937/ref=sib_rdr_fc/102-9186471-0586544?%5Fencoding=UTF8&p=S001#reader-link

Fantastico :D Amo questi libri :D

mjordan
12-01-2004, 04:12
Maxithron perchè perdi del tempo prezioso a usare questi modelli teorici che sono una grotta :D
C'è il metodo Java:


Compiler.buildParseTreeFromPrefixExpr(String PrefExpr);


Semplice no?
:sofico:

maxithron
12-01-2004, 10:45
Originariamente inviato da mjordan
Maxithron perchè perdi del tempo prezioso a usare questi modelli teorici che sono una grotta :D
C'è il metodo Java:


Compiler.buildParseTreeFromPrefixExpr(String PrefExpr);


Semplice no?
:sofico:

A dire il vero non mi sono ancora avvicinato al linguaggio Java. E' grave? :D

/\/\@®¢Ø
12-01-2004, 11:54
Originariamente inviato da maxithron
A dire il vero non mi sono ancora avvicinato al linguaggio Java. E' grave? :D
non ti perdi nulla (mjordan: :Prrr: :D ;) )

maxithron
12-01-2004, 12:35
Originariamente inviato da /\/\@®¢Ø
non ti perdi nulla (mjordan: :Prrr: :D ;) )

Il problema è il fattore tempo a disposizione. Già faccio fatica a studiare quel poco che posso perchè, da un pò di anni, ho a che fare con il lato peggiore dell'informatica....ovvero, farlo per lavoro!

maxithron
13-01-2004, 19:59
Originariamente inviato da maxithron
dovrebbe essere così se gli operandi sono caratteri singoli:



char *a;

int i;

typedef struct Tnode* link;

struct Tnode {char token; link l, r; } ;

link New(char token, link l, r)

{
link x = malloc(sizeof *x);
x->token = token; x-> l = l; x->r = r;
return x;
}



link parse()
{
char t = a[i++];
link x = NEW(t, NULL, NULL);

if ((t == '+') || (t == '*'))
{
x->1 = parse(); x->r = parse();
}
return x;
}



Comunque...sì, questo codice mi risponde al dubbio (almeno a questo.....x il momento...)


Domanda: cosa si deve fare per non avere più dubbi? :D

Luc@s
13-01-2004, 20:03
Originariamente inviato da maxithron
Domanda: cosa si deve fare per non avere più dubbi? :D

Si chiede a dio l'omnisapienza
:D

mjordan
14-01-2004, 14:37
Originariamente inviato da maxithron
Il problema è il fattore tempo a disposizione. Già faccio fatica a studiare quel poco che posso perchè, da un pò di anni, ho a che fare con il lato peggiore dell'informatica....ovvero, farlo per lavoro!

Parole sante... Ma non so se hai capito quello che volevo intendere... Mi riferivo ad un vecchio thread dove era nata la famigerata polemica fra il risolvere i problemi mediante uso di API e mediante implementazione manuale tramite lo studio effettivo di un modello :p Possibile che non ti ricordi? :D

maxithron
15-01-2004, 16:35
Originariamente inviato da mjordan
Parole sante... Ma non so se hai capito quello che volevo intendere... Mi riferivo ad un vecchio thread dove era nata la famigerata polemica fra il risolvere i problemi mediante uso di API e mediante implementazione manuale tramite lo studio effettivo di un modello :p Possibile che non ti ricordi? :D

Ehm...no.... :boh: mi posteresti il link?

mjordan
15-01-2004, 18:12
Non la troverei neanche se avessi un agente intelligente scritto in prolog per la ricerca su pagine :D Non mi ricordo che discussione era... :D

maxithron
15-01-2004, 18:26
Originariamente inviato da mjordan
Non la troverei neanche se avessi un agente intelligente scritto in prolog per la ricerca su pagine :D Non mi ricordo che discussione era... :D

Mmhh....aspetta che qualcosa comincio a ricordare... forse quella dove si utilizzò il termine: "il modello è una grotta?"

mjordan
15-01-2004, 18:35
Originariamente inviato da maxithron
Mmhh....aspetta che qualcosa comincio a ricordare... forse quella dove si utilizzò il termine: "il modello è una grotta?"

Esatto :D Quella dove mi suggeristi di non rovinarmi il fegato inutilmente se non con un buon boccale di birra :sofico:

maxithron
15-01-2004, 18:41
Originariamente inviato da mjordan
Esatto :D Quella dove mi suggeristi di non rovinarmi il fegato inutilmente se non con un buon boccale di birra :sofico:


Evvai!!!! ora ricordo! ma adesso voglio trovare anche il link!