Skip to content

s520/Bve5_Parsing

 
 

Repository files navigation

Build Status MIT License

Bve5_Parsing

bve5PasingImage

Bve5構文のC#パーサライブラリです。 Bve5の構文はどのように処理されているのか?という疑問を解消すべく、パーサジェネレータ「ANTLR」を利用し、Bve5.7構文のパーサを実装してみました。現在、Bve5.7.6224.40815の一部構文に対応しています。

Supported Syntaxes

  • Scenario File

    • Bve5.7全構文に対応
    • namespace: ScenarioGrammar
    • 出力: ScenarioDataクラス 構文解析の結果は、ScenarioDataクラスで返します。ScenarioDataクラスは以下のフィールドで構成されています。
      • string Version: シナリオファイルのバージョン情報
      • List<FilePath> Route: マップファイルの相対パス
      • List<FilePath> Vehicle: 車両ファイルの相対パス
      • string Image: サムネイル画像の相対パス
      • string Title: シナリオタイトル
      • string RouteTitle: 路線名
      • string VehicleTitle: 車両名
      • string Author: 路線と車両の作者
      • string Comment: シナリオの説明

    なお、RouteとVechicleに関しては、複数ファイルの指定と重み係数に対応するため、相対パスと重み係数をまとめたFilePath構造体のリストを返します。相対パスはFilePath.Value、重み係数はFilePath.Weightに対応しています。

    詳しくは、ScenarioData.csを参照してください。

  • Map File

    • 古い構文(ex.Legacyなど)や数学関数を除くBve5.7全構文と変数に対応

    • namespace: MapGrammar

    • 出力: MapDataクラス 構文解析の結果は、MapDataクラスで返します。MapDataクラスは以下のフィールドで構成されています。

      • string Version: バージョン情報
      • string Encoding: ファイルエンコーディング
      • string StructureListPath: ストラクチャリストの相対パス
      • string StationListPath: 停車場リストの相対パス
      • string SignalListPath: 信号リストの相対パス
      • string SoundListPath: サウンドリストの相対パス
      • string Sound3DListPath: 固定音源リストの相対パス
      • List<SyntaxData> Statements: 各構文情報をまとめたSyntaxDataクラスのリスト
    • そのうち、Statementsは各構文情報をまとめたSyntaxDataクラスのリストを返します。SyntaxDataクラスは以下のフィールドで構成されてます。

      • double Distance: 構文の距離程
      • string[] MapElement: 構文のマップ要素(ex.Structure,Repeaterなど)
      • string Key: 構文のキー(Track['この部分'])
      • string Function: 構文の関数名(ex.Interpolate)
      • Dictionary<string, object> Arguments: 構文の引数名。引数がキーであれば型はstring、引数が数値であれば型はdoubleで返します。

    詳しくは、MapData.csを参照してください

その他は今後作っていきます👍

Requirements

Installation

dllをGithubのリリースからダウンロードするか、このプロジェクトをビルドしてdllを入手し、各自のプロジェクトにインポートしてください。

Usage for C#

ex. C#でMapFileの構文解析を行う場合.

using Bve5_Parsing.MapGrammar;

...
    string input; //String to be analyzed
    MapGrammarParser parser = new MapGrammarParser();

    MapData returnData;
    try{
        returnData = parser.Parse(input);
    }catch(Exception e){

    }
...

構文が解析された場合、結果はMapDataクラスで返ってきます。例えば、ファイルヘッダのバージョン情報はMapData.Versionに格納されています。

構文解析のエラーはErrorListenerクラスを継承したクラスをパーサのコンストラクタの引数に指定することで取得できます。

Used Librarys

Bve5_Parsing is using the following library.

The BSD License (3-clause BSD License)

Copyright (c) 2012 Terence Parr and Sam Harwell

License

The MIT License (MIT)

Copyright(c) 2017 aoisupersix

License.md

TechnicalCommentary

Bve5_Parsingの技術解説です。
-> TechnicalCommentary.md

About

C# Parsing Library for Bve5.7

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C# 88.4%
  • ANTLR 11.6%