構文解析やってみっぞ!
前回の記事から2ヶ月経過しようとしていますが、やっとこさJSONの対応を済ませました。
結局泥臭い方法です。JSONの構造をURLっぽく展開することで、無理やり一意な文字を作り出してます。
そしてここまでやった結果、判明しました……
MV/MZの翻訳の即時更新はプラグイン側の対応が必要!!!
終わった~~~ なんでじゃ、とかその辺りは次の更新のネタにしようかと思います。
という訳で今回は、半年くらい前に下書き保存していた構文解析の話です。
なんぞ 構文解析
スクリプトやソースコードは、機械が読み取れる形に変換する必要があります。
その変換処理の初めの方で行われる処理の一つが、構文解析です。
構文解析はソース中の単語がどういう意味なのかを調べる処理です。
助けて!chatGPT君!
自力実装する気まんまんでしたが、ここは流行りに乗っかってchatGPT君にいい感じの実装方法を書いてくれるようにお願いしてみます。
要約:作るな。巨人の肩の上に立て。
そりゃそうですね。
ここではANTLRというライブラリをおすすめされましたが、こちらの導入を試してみたところ実行時に謎にクラッシュする問題が解決できなかったため諦めました。
4日かけて直らなかったので許して……。
代わりに"tree-sitter"というライブラリを使用します。
Windows用のものが用意されていない等こちらもひと悶着ありましたが、無事に実行するところまで成功。
実行画面はこちら。ドン
プログラムアレルギーの方は全身から血を吹き出しそうな画面ですが、要は
・ツクールMVプラグインを入力(ここでは YEP_BattleEngineCore)
・プラグイン内の"", ''で囲われている部分を抜き出し
・囲われてる部分がプログラムでどういう意味なのかを表示(この辺が構文解析)
という処理の結果を表示しています。
これでできること
ツクールのプラグインの中には、スクリプトの中にゲーム中で表示される文字を記述しているものがあります。
VXAceの時は「スクリプトの中の文字列を全部抜き出す」という処理で対応していましたが、それだとこんな時に困ります。
ここの"LANGSCORE"や"CHANGELANGUAGE"は分岐処理に使うだけで表示される事はないのですが、こんな表示されることのない文字にまで反応してしまうんですね。
その結果、プラグインによっては翻訳CSVが4000行!実際にゲームで使うのは400行!
とかになるのはザラでした。
構文解析を入れることで、ゲームに使われることがないif文やswitch文といった箇所の文字列を省いて、見た目のインパクトも容量も削ろうという意図があります。
効果が如何ほどかは……謎。
という訳で構文解析の話でした。
山場のJSONは潰せたのでもうちょっとでベータ版がリリースできるかなと思います。