今日はちょっと変わったところで、SGFファイルを扱う方法です。SGFというのは、様々なプラットフォーム上で販売されているSmartGoというアプリケーションのファイルフォーマットです。Formatの略で、囲碁以外のボードゲームにも対応可能なフォーマットです。囲碁のファイルフォーマットはアプリケーション毎に他にも色々ありますが、仕様がドキュメント化されているこのSGFが事実上標準フォーマットという感じです。テキストフォーマットなので中身を見たことのある人も多いかと思います。(;FF[4]GM[1]CA[UTF-8]AP[囲碁の師匠:1.1.2]SZ[19]HA[2]AB[pd][dp];W[dd])見ただけでなんとなく意味もわかる、わかりやすいフォーマットですね。いうフォーマットを扱うには、扱うプログラムを直接書くのではなく、パーサジェネレータというものを使うと楽ができます。パーサジェネレータというのは、フォーマットの規則を与えると、その規則に則ってフォーマットに従った文字列からデータ構造を抽出するコード(パーサ)を生成してくれるものです。パーサジェネレータを使って作った自作のパーサをいくつかご紹介します。JavaScript用SGFパーサ。Jisonというパーサジェネレータを使いました。Rust用SGFパーサ。rust-pegというパーサジェネレータを使いました。Swift用SGFパーサ。citronというパーサジェネレータを使いました。なんでいくつも作っているのかというと、それだけ作るのが簡単だからです^^jssgfを作った時のSGFフォーマットを記述を見てみましょう。};%%こんな風に、コレクションはどういうもの?ゲームツリーはどういうもの?シークエンスはどういうもの?ノードはどういうもの?という規則を書くと、JavaScriptで書かれたパーサを生成してくれます。実はこの規則、SGFの仕様書に書かれたものをほぼ書き写したものです。以下はSGFの仕様書より。Stone)似てるでしょ?なので、新しいプログラミング言語に取り組んだときも、その言語のパーサジェネレータがあれば、その言語用にSGFパーサを用意することは簡単なのです。囲碁のプログラムのため、Jison(BisonのJavaScript版)を使ってS...2014-02-06Pachiの使い方1月31日に囲碁電王戦が発表されましたね。2012年から電聖戦とい...2012-04-17Meteor先日、MeteorというJavaScriptベースのウェブプラットフォーム...2009-02-11マルペケHaskellでマルペケの結果を数え上げてみました。Z80アセンブラに触れる・PC98互換機にてTurbo-Cで数値計算。EditorDeltaGo.js最新記事iPadOSでポートレートとランドスケープで異なるレイアウトを採用する囲碁AIアプリの作り方4囲碁AIアプリの作り方4囲碁AIアプリの作り方3囲碁AIアプリの作り方2月別アーカイブ参加グループプログラミングはてなブログをはじめよう!nextliteracyさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。