Domanda:
La specifica PGN omette erroneamente solidus (/) per i token di simboli?
direvus
2020-01-23 17:35:43 UTC
view on stackexchange narkive permalink

La specifica PGN (Portable Game Notation) sembra contraddire se stessa riguardo ai caratteri validi che possono apparire in un simbolo.

Da [1], sezione 7, citazione:

Un token simbolo inizia con una lettera o un carattere numerico ed è immediatamente seguito da una sequenza di zero o più caratteri di continuazione del simbolo. Questi caratteri di continuazione sono caratteri alfabetici ("A-Za-z"), caratteri numerici ("0-9"), il trattino basso ("_"), il segno più ("+"), il segno ottotorpo ("#" ), il segno di uguale ("="), i due punti (":") e il trattino ("-") ...

Oppure, per dirla in modo più conciso, un il token simbolo è conforme all'espressione regolare / ^ [A-Za-z0-9] [A-Za-z0-9 _ + # =: -] * / .

Tuttavia, questa definizione preclude esplicitamente il marcatore di fine del pareggio del gioco 1 / 2-1 / 2 . Citando ancora da [1], sezione 8.2.6:

Ogni sezione di movetext ha esattamente un indicatore di fine gioco; il marcatore compare sempre come ultimo elemento nel testo del filmato. L'indicatore di fine partita è un simbolo che è uno dei seguenti quattro valori: "1-0" (bianco vince), "0-1" (nero vince), "1 / 2-1 / 2" (partita pareggiata), e "*" (gioco in corso, risultato sconosciuto o gioco abbandonato).

La stringa "1 / 2-1 / 2" ovviamente non soddisfa la definizione di un simbolo token , quindi:

a) il carattere solidus ('/', 0x2f) avrebbe dovuto essere incluso nella definizione dei caratteri di continuazione del simbolo, ma l'autore non è riuscito a farlo, oppure;

b) i marcatori di fine gioco non dovrebbero essere considerati gettoni simbolo, ma piuttosto un tipo distinto di gettone separato dai gettoni simbolo, e l'autore non è riuscito a indicarlo, oppure;

c) Ho completamente ha frainteso la formulazione delle specifiche e sono un idiota.

Qualcuno ha sbagliato qui, e o sono io, o sono Steven J. Edwards. Si spera che sia io. Personalmente penso che (a) sia il più probabile dei tre ma forse mi sono perso qualcosa.

[1] http://www.saremba.de/chessgml/standards/pgn/pgn-complete.htm

Due risposte:
RemcoGerlich
2020-01-23 18:28:19 UTC
view on stackexchange narkive permalink

Hai ragione, il testo così come è scritto lì non è esattamente corretto.

Dice anche che il marcatore è un simbolo ed elenca * come una delle opzioni, anche se * è di per sé un token e non può essere presente in un simbolo.

Detto questo, il significato è abbastanza chiaro, 1 / 2-1 / 2 è un valido marcatore di terminazione. Come risolverlo nel codice dipende da te. Poiché è difficile aggiungere 1 / 2-1 / 2 come token da solo (sarebbe necessario guardare avanti per disambiguare il simbolo 1 eccetera), è probabilmente più facile aggiungi "/" ai possibili caratteri del simbolo, sì.

Grazie per aver sollevato il punto su "*". Ero andato avanti e avevo codificato "*" come un token a sé stante, ma penso che tu abbia ragione a dire che questo è un altro errore nella descrizione dei marcatori di fine gioco.
Michael West
2020-01-23 19:41:59 UTC
view on stackexchange narkive permalink

Sono d'accordo che le specifiche siano ambigue. Questa grammatica antlr utilizza la tua opzione b

i marcatori di fine gioco non dovrebbero essere considerati gettoni simbolo, ma piuttosto un tipo distinto di gettone che è separato dai gettoni simbolo, e il l'autore non è riuscito a indicarlo

Nella grammatica trovo

  SIMBOLO: [a-zA-Z0-9] [a-zA-Z0-9_ + # =: -] *;  

separato dalla terminazione

  game_termination: WHITE_WINS | BLACK_WINS | DRAWN_GAME | ASTERISCO;  


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 4.0 con cui è distribuito.
Loading...