Newsgroup: it.hobby.scacchi
Titolo: Imprecisione nelle specifiche PGN?

Sto scrivendo un programma di parsing sintattico dei files PGN.
Per fare questo sto facendo riferimento a delle specifiche di formato
che ho trovato a questo indirizzo:
http://www.yacdb.com/pgn/pgn_lidx.htm
Ad un certo punto dice:
7: Tokens
[cut]
A symbol token starts with a letter or digit character and is
immediately followed by a sequence of zero or more symbol continuation
characters. These continuation characters are letter characters
("A-Za-z"), digit characters ("0-9"), the underscore ("_"), the plus
sign ("+"), the octothorpe sign ("#"), the equal sign ("="), the colon
(":"), and the hyphen ("-"). Symbols are used for a variety of purposes.
All characters in a symbol are significant. A symbol token is terminated
just prior to the first non-symbol character following the symbol
character sequence. Currently, a symbol is limited to a maximum of 255
characters in length.
Traduco: un simbolo e' una sottostringa che inizia per un alfanumerico
ed e' seguita da zero o piu' caratteri alfanumerici o uno dei _+#=:-
E va bene.
Implelemto la definizione e lancio il programma su un file.
Mi genera un errore alla prima partita che trova, perche' il risultato
e' di patta (1/2-1/2).
Il punto e' che il simbolo "/" usato per scrivere la patta non
appartiene a quell'insieme di cui sopra _+#=:-
La stringa "1/2-1/2" e' comunque indicata come corretta per esprimere il
risultato di patta, ma io sono ancora ad un livello piu' basso: sto
cercando di dividere il file nei singoli tokens.
La cosa si risolve aggiungendo il "/" all'insieme dei caratteri che
compongono un simbolo, pero' questo contrasta con le specifiche.
Che ne pensate?
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Che ne pensate?
I "symbol token" sono solo un sottotipo di token. Il game termination marker
non è un symbol token.
Alex

 non è un symbol token.
Infatti sono convinto pure io che ho commesso un errore interpretativo.
Pero' nel paragrafo 7.Tokens non riesco a trovare come faccio a definire
un token in modo piu' generico.
Il game termination marker dovrebbe essere un token a sua volta: una
cosa a piu' alto livello del token...


 un token in modo piu' generico.
E' semplice fare il parsing:
{ token-commento, fino a }
; token-commento, fino a fine riga
( token-variante, un solo carattere
) token-fine variante, un solo carattere
$[cifre] token-valutazione, fino a primo non-cifra
[cifre][punti] token-numeromossa, fino a primo non-punto
*|1-0|0-1|1/2-1/2 token-risultato, l'ultimo token
resto token-mossa, fino a spazio o ( o ) o { o ; o $
Questa struttura è pratica, ignorando token previsti solo teoricamente, e
funziona con tutti i PGN che ho trovato.
Alex

 resto token-mossa, fino a spazio o ( o ) o { o ; o $
Nel documento di specifiche non e' indicato un token di default
E' indicato in modo piu' restrittivo il symbol-token, che dice che e'
usato per un sacco di cose, ed infatti qualunque scrittura di mossa e'
un symbol-token, ma il risultato di patta no.
E' pacifico che correggo il mio programmino in modo che legga il
risultato di patta correttamente, ma volevo capire dove stava il mio
errore interpretativo, perche' ritengo si tratti di un mio errore
interpretativo e non di una incongruenza di documentazione, almeno per
adesso.
Insomma, vorrei scrivere un parser rigoroso, non un parser che funziona
e basta...
Ho tenuto conto anche dei mai visti commenti in linea (cfr. par. 5),
quelli che cominciano col puntoevirgola e finiscono a fine riga
e anche del meccanismo di Escape (cfr. par. 6), le righe che iniziano
per %, destinate a contenere specifiche proprie del software.
Credo di aver fatto le cose per bene fino ad ora, e quindi non riesco a
capire questa cosa del risultato di patta...
