hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
構文解析 - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

小ワザ

構文解析

 構文解析とは、かかれている文章からコンピュータで意味を読み取ること、その解析のことです。
主にプログラム言語開発などで使用されています。

ここではアドベンチャーゲーム(以下、AVG,ADV)(サウンドノベル含む)でシナリオデータ*1を作成、読み込むための構文解析を取り上げています。

〜 目標 〜

  • 命令 = 引数, 引数, 引数, ... の形式を読み取ります。
  • 引数を文字列に対応させます
  • // から始まる文字列はコメントとして無視します
  • 日本語から始まる文字列は、そのまま表示します(「改行だけ」も含めて)
  • テキストファイルから一行ずつ読み込んでみます(サンプル)
  • <html>形式の命令を読み取ります

STEP 1 - サンプル

とりあえずサンプルです。HSP3公式掲示板より。

構文解析 v0.0 ( りさ )

+  命令解析

構文解析 v0.1 ( osakana )
(引数の文字列中の半角スペースに対応してみました。)

+  命令解析

構文解析 v0.2 ( りさ )
日本語・コメント・命令の判定をしたい
テキストファイルから読み込みたい

+  命令解析

htmlっぽい構文解析 ( まな )
<〜>間の文字列の処理をモジュール化してみました。

+  命令解析

やり方を考えてみる

いろいろやり方があるだろうと思うので、今後の課題?も含めちょっと考えてみましょう。
とりあえず思いつくままに…。

…考えてたら頭痛くなってきた。w

スクリプトの種類

 スクリプトの種類をあげてみましょう。
次のような感じでしょうか。

  • HTMLのようなタグで囲むタイプ
  • 昔のBASICのような1行1命令
  • CやHSPのような、1行1命令や複数行を囲む命令

どれがAVG向きなんでしょう…?

AVGを開発するのには、プログラマーである必要はありません。
あるいはパソコン初心者かもしれません。

出来る限り簡単で分かり易い書式を目指すと、やはりBASICのようなタイプに行き着くのではないでしょうか。

慣れた人の為にHTML形式も用意したいと思います。
どちらが便利かは・・・命令のタイプにもよると思います。

無駄なスペースを削除するタイミング

 無駄なスペースやタブ、コメントなどを削除するタイミングはいつがいいのでしょうか。

  • スクリプト初回読み込み時に、全体のエラーチェックを行なうと同時に余計なスペースなどを取り除く。(HSPがこれ?)
  • 1つ命令を読み込むたびに余計なスペースなどを取り除く。

ことき前者の方法ではついでに解析しやすい書式に変えてしまうことがあります。こうしておくと実行時の処理が楽になりますし、若干の速度アップもできるかもですね。
前者は後者がある程度できるようにならないと難しいかもしれませんね。

文字列の読み取り

命令の引数に、セリフなどで使用する文字列を記述する場合があります。 通常「"(ダブルクォーテーション)」で囲まれて記述されてます。

  • 「"」で囲まれた範囲内はスペースを削除しない。(構文解析のときに間違って削除しない)
  • 改行、「"」の記述方法、読み取り方法。
    • \" → "、\\ → \、\n → 改行
      ※\を処理するときに、"表"や"ソ"など2バイト目が\になっているものを考慮しないとはまる
  • その他特殊な文字の記述方法、読み取り方法。(タブとかハートなど…あんまりAVGでは必要性は感じませんが一応書いてみた。)

記述は、CやHSPの記述方法をまねすればほぼOK。
読み取りは…「"」〜「"」の間はできるだけそのままになるように地道に処理すればよさそう。

条件文・繰り返し

HSPで言うところのifやrepeat命令。
ifは1行記述にも出来ますが、複数行記述できたほうが処理できる幅が広がります。
複数行にした場合、次の命令が何処にあるかはネスト処理も含めスクリプトエンジン側で処理できたほうがよさそうです。(なんとなく)

コメント

  • 一度、目指している形式で テスト シナリオを簡単に書いてみるのはどうでしょうか? -- osakana 2006-10-09 (月) 21:59:15
  • プログラムの技術とは関係ないですが、シナリオの規格を大雑把に決めた方がみんなでいろいろし易いですね。 -- 男性A? 2006-10-09 (月) 23:28:31
  • みなさん、こちらにいらしたのですネ☆ -- りさ 2006-10-10 (火) 08:21:10
  • 「メイン」みたいなものを書きたいんですが、どこに書けばいいんでしょう?構文解析の中はマズイですよね? -- りさ 2006-10-10 (火) 08:21:46
  • 『りさAVGエンジン』ってなページをソフト開発のトコに作って進めてはどうですか? -- kz3 2006-10-10 (火) 09:03:40
  • あっと...もしかして今りささん編集中だったかしら...変なラベルがぽつんとあったり、無駄な改行(~)をとったりしていました。あとラベル(*)の不具合とか...。 -- kz3 2006-10-10 (火) 09:19:07
  • wiki使えるか微妙ですけど、トライしてみますね!>kz3さん -- りさ 2006-10-10 (火) 09:19:51
  • いえ、大丈夫です☆ HTMLより難しいですねw >ありがとうございます。>不具合とか -- りさ 2006-10-10 (火) 09:21:29
  • はじめまして。突然すみません、まなさんのhtmlっぽい構文解析のモジュールを使わせていただいてもよろしいでしょうか? -- Pine? 2011-07-16 (土) 19:49:00
  • 探しても投稿されたコンテンツに関する著作権の記載が見つけられませんでしたが、wiki利用者は概ね より多くの人に利用して貰おうという意図で内容を公開していると思うので、自由に使っても大丈夫だと思いますよ。 -- osakana 2011-07-30 (土) 17:23:47

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

*1 シナリオデータ:AVGで使用するキャラクターのセリフや行動、イベントなどをゲームデータ用の文法で記述したもの。シナリオスクリプト。
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2011-07-30 (土) 17:23:48 (861d)