3.2Un analizzatore migliore
    Indietro Avanti

    Per limitare questa generazione, si puo` tener conto della forma delle regole della grammatica. Per esempio, se il sintagma nominale e` composto da un articolo seguito da un sostantivo, si puo` utilizzare questo fatto per limitare la ricerca solo alle possibili combinazioni di questi due simboli non terminali. Possiamo allora ridefinire il predicato sn nel seguente modo:

    sn(X,Y): e` vero se c'e` un sintagma nominale all'inizio della sequenza X, e la parte rimanente della sequenza dopo il sintagma nominale e` Y. Dobbiamo allora riscrivere le regole della grammatica G1 tenendo conto di questo nuovo predicato, cioe`:

    sn(X,Y) :- articolo(X,Z),sostantivo(Z,Y).
     


    Questo significa che esiste un sintagma nominale se possiamo trovare un articolo nella parte anteriore di X seguito da Z e se possiamo trovare un sostantivo nella parte anteriore di Z; possiamo schematizzare questo fatto con il seguente diagramma:
    [il,gatto,mangia,il,topo]
    --------- X ------------------
    ------------- Z ---------
    ------ Y -------
    
    Il procedimento di aggiunta di un argomento dovra` ovviamente essere esteso a tutti i predicati della grammatica. Essa diventa dunque:
    proposizione(X,Y) :- sn(X,Z),sv(Z,Y).
    sn(X,Y) :- articolo(X,Z),sostantivo(Z,Y).
    sv(X,Y) :- verbo(X,Z),sn(Z,Y).
    articolo([il|Y],Y).
    sostantivo([gatto|Y],Y).
    sostantivo([topo|Y],Y).
    verbo([mangia|Y],Y).
    
    Il significato del fatto articolo([il|Y],Y) e` che e` possibile trovare un articolo all'inizio di una sequenza che inizia con la parola "il".

    Possiamo a questo punto interrogare il sistema sottoponendogli la seguente domanda:
    ?- proposizione([il,gatto,mangia,il,topo],[]).
    
    Vedi esempio



    Approfondimenti

     IndietroAvanti