09/09/12 15:28
dmr
Ciao a tutti spero di aver postato nella sezione giusta.
Sto studiando da autodidatta Il libro "Compilatori Principi, tecniche e strumenti", solo che sono arrivato in una parte(analizzatori lessicali) dove spiega come convertire un'espressione regolare in un dfa, utilizzando le funzioni nullable(n),firstpos(n),lastpos(n) ed followpos(p).
Nel libro c'è scritto:
1)nullable(n): è vera per un nodo dell'albero sintattico se il linguaggio relativo alla sottoespressione rappresentata da n contiene ε. In questo caso la sottoespressione può essere "resa nulla" ovvero può essere fatta coincidere con la stringa vuota anche se in generale la stessa sottoespressione può rappresentare altre stringhe.
2)firstpos(n): è l'insieme delle posizioni del sottoalbero con radice n corrispondenti al primo simbolo di almeno una stringa del linguaggio
descritto dalla sottoespressione con radice n.
3)lastpos(n): è l'insieme delle posizioni nel sottoalbero nel sottoalbero con radice n corrispondenti all'ultimo simbolo di almeno una stringa del linguaggio descritto dalla sottoespressione con radice n.
4)followpos(p): per una posizione p, è l'insieme delle posizioni q nell'intero albero sintattico tali che esiste unastringa x=A1 A2 ... An
nel linguaggio L((r)#) tale che per qualche valore di i c'è un modo di giustificare l'appartenenza di x a L((r)#) per cui a: corrisponde alla posizione p nell'albero sintattico e Ai+1 corrisponde alla posizione q.
L'espressione regolare di esempio è: (a|b)*abb# ed il suo albero sintattico è nell'immagine allegata(firstpos(n) a sinistra del nodo e lastpos(n) a destra del nodo).
Quello che non riesco a capire è come si calcolano, avendo già pronto l'albero sintattico, le funzioni firstpos(n), lastpos(n) e followpos(n).
Grazie in anticipo .
Sto studiando da autodidatta Il libro "Compilatori Principi, tecniche e strumenti", solo che sono arrivato in una parte(analizzatori lessicali) dove spiega come convertire un'espressione regolare in un dfa, utilizzando le funzioni nullable(n),firstpos(n),lastpos(n) ed followpos(p).
Nel libro c'è scritto:
1)nullable(n): è vera per un nodo dell'albero sintattico se il linguaggio relativo alla sottoespressione rappresentata da n contiene ε. In questo caso la sottoespressione può essere "resa nulla" ovvero può essere fatta coincidere con la stringa vuota anche se in generale la stessa sottoespressione può rappresentare altre stringhe.
2)firstpos(n): è l'insieme delle posizioni del sottoalbero con radice n corrispondenti al primo simbolo di almeno una stringa del linguaggio
descritto dalla sottoespressione con radice n.
3)lastpos(n): è l'insieme delle posizioni nel sottoalbero nel sottoalbero con radice n corrispondenti all'ultimo simbolo di almeno una stringa del linguaggio descritto dalla sottoespressione con radice n.
4)followpos(p): per una posizione p, è l'insieme delle posizioni q nell'intero albero sintattico tali che esiste unastringa x=A1 A2 ... An
nel linguaggio L((r)#) tale che per qualche valore di i c'è un modo di giustificare l'appartenenza di x a L((r)#) per cui a: corrisponde alla posizione p nell'albero sintattico e Ai+1 corrisponde alla posizione q.
L'espressione regolare di esempio è: (a|b)*abb# ed il suo albero sintattico è nell'immagine allegata(firstpos(n) a sinistra del nodo e lastpos(n) a destra del nodo).
Quello che non riesco a capire è come si calcolano, avendo già pronto l'albero sintattico, le funzioni firstpos(n), lastpos(n) e followpos(n).
Grazie in anticipo .
Ultima modifica effettuata da dmr 09/09/12 15:40
aaa