mizdra's blog

ぽよぐらみんぐ

ポケモンを一行で表現する構文「PokeSugar」を作った

趣味プロジェクトでポケモンを一行で表現する構文が必要になったので作った。
名前の由来はPokemonSyntactic sugarから。

更新履歴

v0.1.0

  • 構文をABNFで書いた。
  • オプション値で配列を使う際に各要素を区切る記号をスラッシュからパイプに変更した。

はじめに

GitHubで公開している仕様を読んで下さい。

github.com

構文を導入するメリット

様々な場所でポケモンに関する議論が展開されていく中で、ポケモン自体の表し方が多様化しており、場所によってポケモンの表現がまちまちになっている。PokeSugarではそれを定義化することで統一を図り、人や機械にとって扱いやすい「ポケモンを表現する構文」の提供を目指す。ポケモンを文字だけで表せるので、一行だけでリソースとしても利用出来る。

構文の例

ラティオス!臆病?浮遊@拘り眼鏡(流星群|サイコショック|波乗り|めざパ炎){C252|S252}[H31|A30|B31|C30|D31|S30]
ラティオス!臆病?浮遊@拘り眼鏡(流星群|サイコショック|波乗り|めざパ炎){C252S252}[3VacsU]
ラティオス!臆病@拘り眼鏡(流星群|サイコショック|波乗り|めざパ炎){CSぶっぱ}[めざパ炎理想]

ランドロス-霊獣 !意地っ張り ?威嚇 @スカーフ (地震|蜻蛉返り|はたき落とす|馬鹿力) {ASぶっぱ}
ヒードラン !冷静 @拘り眼鏡 (噴火|オバヒ|ラスターカノン|大地の力) {HCぶっぱ} <レベル:100|性別:♂>

何故この構文にしたのか

構文仕様についてはGitHubに載っているので、ここではこの仕様にした経緯について書く。

識別子による工夫

まずポケモンを表現する上で欠かせないのが種族, 性格, 特性, 持ち物, , 努力値, 個体値の7つの要素だろう。 これらの要素は!, ?などの記号と組み合わせることにより、機械が識別しやすいようにした。また、持ち物の識別子に@を利用して普段見慣れている構文に近づけたり、覚えやすいようにした。

括弧による工夫

, 努力値, 個体値は比較的文字数が多くなるので、括弧で括って可読性を高めた。
もし括弧で括らなかった場合、以下のように見辛くなる。

ラティオス!臆病?浮遊@拘り眼鏡$流星群|サイコショック|波乗り|めざパ炎#C252S252*3VacsU

オプションによる工夫

レベル性別など普段は使われない要素をオプションとして保持することで可読性を高めた。使わない要素に識別子を与えても利用者が覚える際に負担がかかるだけだ。

<レベル:100|性別:♂>
<リボン:'ゴージャスリボン|ロイヤルリボン|ゴージャスロイヤルリボン'|色:通常色>

自由度による工夫

人によってひらがな, カタカナ, 漢字, 英語, 略語など様々な文字で要素を記述するので、PokeSugarでもそれに対応した。

"対応した"というよりは寧ろ"決めていない"とするほうが正しい。仕様では要素に使用する文字に殆ど制約を設けていない。どの形式に対応するかは構文を利用するプログラムやソフトウェアが決める。これにより柔軟に情報を表現できる。

バンギラス
りゅうせいぐん
流星群
龍星群
竜星群
10万ボルト
十万ボルト
Aのすがた
\!のすがた
\?のすがた
CSぶっぱ
CSぶっぱ余りH
5VaU
3VacsU

種族ブロックは必ず先頭でなければならないが、他のブロックの順序に指定はない。仕様では可読性を重視してフォルム, 性格, 特性, 持ち物, , 努力値, 個体値, オプションの順で書いてある。また、種族ブロックを除いた他のブロックは省略可能なので以下のようにも書ける。

ラティオス!臆病?浮遊@拘り眼鏡(流星群|サイコショック|波乗り|めざパ炎){C252S252}[3VacsU]
ラティオス@拘り眼鏡?浮遊!臆病{C252S252}[3VacsU](流星群|サイコショック|波乗り|めざパ炎)
ラティオス[3VacsU]
ラティオス

種族ブロックを除く他のブロックの前であれば空白を挿入することが出来る。

ヒードラン !冷静 @拘り眼鏡 (噴火|オバヒ|ラスターカノン|大地の力) {HCぶっぱ} <レベル:100|性別:♂>

最後に

自分の趣味プロジェクトに使う構文ゆえに全く期待していないが、この構文が誰かの役に立つと嬉しい。
オプションは誰でも自由に拡張できるのでライセンスの下であれば、カスタマイズをするものアリだろう。

おわり。