Analizzatore sintattico (AS) per linguaggio Prolog.
Un AS è un riconoscitore delle frasi del linguaggio. Oltre a riconoscere
le frasi del linguaggio, il Parser costruisce una rappresentazione interna
delle frasi stesse.
L'utilizzo normale prevede di utilizzare il comando feed per indicare al lexer da dove prendere l'input.
Dopo una feed si utilizza il metodo read() per farsi restituire la forma interna della prima frase.
Si richiama la read() per la frase successiva.
Il lexer è gestito direttamente dal parser.
Si può anche interrompere il parsing di una frase per iniziarne una nuova, poi
successivamente ripristinare il parsing interrotto.
Questo si può ottenere grazie ai metodi feed e reload.
Grammatica Prolog:
Clause ->
Read(1200) .
Read(N) ->
Op(N,M,fx) Read(M-1) Rest(N,M)
Op(N,M,fx) Read(M-1)
Op(N,M,fy) Read(M) Rest(N,0)
Op(N,M,fy) Read(M)
Term Rest(N,0)
Term
Rest(N,M) ->
Op(N,M1,xfx) Read(M1-1) Rest(N,M1) {M1>M}
Op(N,M1,xfx) Read(M1-1) {M1>M}
Op(N,M1,xfy) Read(M1) Rest(N,M1) {M1>M}
Op(N,M1,xfy) Read(M1)
Op(N,M1,yfx) Read(M1-1) Rest(N,M1)
Op(N,M1,yfx) Read(M1-1)
Op(N,M1,xf) Rest(N,M1) {M1>M}
Op(N,M1,xf)
Op(N,M1,yf) Rest(N,M1)
Op(N,M1,yf)
Term ->
Num
Var
List
Ident
Ident ( Args
NoArgs
( Read(1200) )
Num ->
un numero
Var ->
una stringa che inizi con una lettera maiuscola o con un _
List ->
[ ]
[ RestList
RestList ->
Read(999) , RestList
Read(999) | Read(999) ]
Read(999) ]
Ident ->
tutte le stringhe che non sono variabili o numeri
Args ->
Read(999) , Args
Read(999) )
NoArgs ->
!
not
nl
Op(N,M,T) ->
operatore di tipo T e priorità M, con T Î {fx, fy, xfx, xfy, yfx, xf, yf} e con M
Tabella dei termini.
Viene inizializzata durante la creazione di SetOps che avviene nel costruttore di questo parser.
normalSpeech
public boolean normalSpeech
Per modificare la lettura delle variabili.
Se false le variabili sono le stringhe che iniziano con la lettera maiuscola.
Così prevede prolog.
Se true le variabili sono le stringhe che iniziano con la lettera minuscola.
Così prevede il senso comune, infatti solitamente i nomi propri iniziano con la
maiuscola (Antonio, Marco, Francesco,...),
mentre i nomi comuni con la minuscola (professore, studente, ...).
Di default è false.
inRead
public boolean inRead
Indica che stiamo facendo il parsing per il comando prolog read/1.
Deve essere settata a true se si utilizza il parser per leggere una stringa
immessa in seguito ad un comando prolog read/1.
Viene riportata a false automaticamente dal parser alla fine della lettura della stringa.
Il parser restituisce così un termine e non un DottedTermSexp.
Viene saltato anche il controllo sulle variabili single.
Permette di ripristinare un analizzatore lessicale.
In genere si utilizza dopo aver completato l'analisi di un input per
ripristinare un lexer restituito da uno dei metodi feed.