Soru:
PGN spesifikasyonu yanlışlıkla sembol jetonları için solidus'u (/) çıkarıyor mu?
direvus
2020-01-23 17:35:43 UTC
view on stackexchange narkive permalink

Portable Game Notation (PGN) spesifikasyonu, bir sembol jetonunda görünebilecek geçerli karakterler açısından kendisiyle çelişiyor gibi görünüyor.

[1], bölüm 7, alıntı:

Bir sembol simgesi bir harf veya rakam karakteriyle başlar ve hemen ardından sıfır veya daha fazla sembol devam karakteri dizisi izler. Bu devam karakterleri harf karakterleri ("A-Za-z"), rakam karakterleri ("0-9"), alt çizgi ("_"), artı işareti ("+"), oktotorp işaretidir ("#" ), eşittir işareti ("="), iki nokta üst üste (":") ve kısa çizgi ("-") ...

Ya da daha kısaca ifade etmek gerekirse, a sembol simgesi / ^ [A-Za-z0-9] [A-Za-z0-9 _ + # =: -] * / normal ifadesine uygundur.

Bununla birlikte, bu tanım, oyun beraberlik sonlandırma işaretini 1 / 2-1 / 2 açıkça dışlamaktadır. [1], bölüm 8.2.6'dan tekrar alıntı yapalım:

Her movetext bölümünde tam olarak bir oyun sonlandırma işareti vardır; işaretçi her zaman movetext'te son öğe olarak yer alır. Oyun sonlandırma işaretçisi, aşağıdaki dört değerden biri olan bir semboldür: "1-0" (Beyaz kazanır), "0-1" (Siyah kazanır), "1 / 2-1 / 2" (berabere kalan oyun), ve "*" (devam eden oyun, sonuç bilinmiyor veya oyun terk edildi).

"1 / 2-1 / 2" dizesi açıkça bir simge jetonunun tanımına uymuyor , yani:

a) solidus karakteri ('/', 0x2f) sembol devam karakterlerinin tanımına dahil edilmiş olmalıydı, ancak yazar bunu yapmadı, ya da;

b) oyun sona erdirme işaretçileri, sembol jetonları olarak düşünülmemelidir, bunun yerine sembol jetonlarından ayrı ayrı bir jeton türü olarak düşünülmelidir ve yazar bunu belirtemedi veya;

c) şartnamenin ifadesini yanlış anladım ve ben bir aptalım.

Biri burada batırdı ve ya ben ya da Steven J. Edwards. Umarım benim. Şahsen ben (a) 'nın üçü arasında en olası olduğunu düşünüyorum ama belki de bir şeyi gözden kaçırmışımdır.

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

Iki yanıtlar:
RemcoGerlich
2020-01-23 18:28:19 UTC
view on stackexchange narkive permalink

Haklısınız, orada yazılan metin tam olarak doğru değil.

Ayrıca işaretçinin bir sembol olduğunu ve seçeneklerden biri olarak * listelediğini söylüyor, * kendi başına bir simge olsa ve bir sembolde bulunamaz.

Bununla birlikte anlam yeterince açıktır, 1 / 2-1 / 2 geçerli bir sonlandırma belirteci. Bunu kodunuzda nasıl çözeceğiniz size kalmış. 1 / 2-1 / 2 'yi kendi başına bir token olarak eklemek zor olduğundan ( 1 sembolünden ayırmak için ileriye bakılması gerekir), muhtemelen en kolayı olası sembol karakterlerine "/" ekleyin, evet.

"*" İle ilgili noktayı yükselttiğiniz için teşekkürler Devam ettim ve kendi başına bir jeton olarak kodladım, ancak bunun oyun sonlandırma belirteçlerinin açıklamasında başka bir hata olduğunu söylemekte haklısınız.
Michael West
2020-01-23 19:41:59 UTC
view on stackexchange narkive permalink

Spesifikasyonun belirsiz olduğuna katılıyorum. Bu antlr dilbilgisi seçeneğinizi kullanır b

oyun sonlandırma işaretçileri, sembol jetonları olarak değil, sembol jetonlarından ayrı ayrı bir jeton türü olarak düşünülmelidir ve yazar bunu belirtemedi

Bulduğum dilbilgisinde

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

sona erdirmeden ayrı

  game_termination: WHITE_WINS | BLACK_WINS | DRAWN_GAME | ASTERISK;  


Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 4.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...