Bve5構文のC#パーサライブラリです。 Bve5の構文はどのように処理されているのか?という疑問を解消すべく、パーサジェネレータ「ANTLR」を利用し、Bve5.7構文のパーサを実装してみました。現在、Bve5.7.6224.40815の一部構文に対応しています。
-
- 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を参照してください。
-
-
古い構文(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を参照してください
-
その他は今後作っていきます👍
dllをGithubのリリースからダウンロードするか、このプロジェクトをビルドしてdllを入手し、各自のプロジェクトにインポートしてください。
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クラスを継承したクラスをパーサのコンストラクタの引数に指定することで取得できます。
Bve5_Parsing is using the following library.
The BSD License (3-clause BSD License)
Copyright (c) 2012 Terence Parr and Sam Harwell
- ライセンス全文 : Licenses\ANTLR4.txt
The MIT License (MIT)
Copyright(c) 2017 aoisupersix
Bve5_Parsingの技術解説です。
-> TechnicalCommentary.md