BveTrainSim5構文の.NETパーサライブラリです。 入力された文字列やファイルを解析し、プログラム上で利用しやすい形式に変換します。 現在マップファイルとシナリオファイル構文に対応しています。
-
- Bve5の全構文に対応
-
- マップファイルのバージョン1.00から2.02に対応。
- 数式や変数、Includeディレクティブにも対応しています。
その他は今後作っていきます👍
- .Net Standard 2.0 or .Net framework 4.5
NugetでBve5_Parsingとしてパッケージを公開しています。
-
コマンドラインからインストールする場合
nuget install Bve5_Parsing
-
VisualStudioからインストールする場合
- ツール > Nugetパッケージマネージャ > ソリューションのNugetパッケージの管理をクリック
- 参照タブで
Bve5_Parsing
を検索 - インストールをクリック
C#でマップファイルのパースを行う場合
using Bve5_Parsing.MapGrammar;
using Bve5_Parsing.MapGrammar.EvaluateData;
using System.Linq;
...
string input; //String to be analyzed
MapGrammarParser parser = new MapGrammarParser();
// 文字列をマップ構文としてパースする
MapData mapData = parser.Parse(input);
// マップファイルへのファイルパスを指定してパースする
MapData mapData2 = parser.ParseFromFile(@"PATH/TO/MAP/FILE");
// Include構文の参照先を再帰的にパースする
MapData mapDataWithInclude = parser.ParseFromFile(@"PATH/TO/MAP/FILE", MapGrammarParserOption.ParseIncludeSyntaxRecursively)
// AST(抽象構文木)にパースする
MapData ast = parser.ParseToAst(input, @"PATH/TO/FILE/PATH");
// パースエラーの取得
if (parser.ParseErrors.Any()) {
// error handling
}
// 旧形式でステートメントのデータを取得する場合(通常は必要ありません)
var syntaxData = mapData.Statements.Select(state => state.ToSyntaxData());
mapData.Version //マップ構文のバージョン情報
mapData.Encoding // マップ構文のエンコーディング指定
foreach(var statement in mapData.Statements) {
/* 各構文情報 */
statement.Distance; //構文の距離程
statement.FunctionName; //構文の関数名
}
...
パース処理に成功した場合、結果はMapDataクラスで返ってきます。例えば、ファイルヘッダのバージョン情報はMapData.Versionに格納されています。また、構文解析のエラーはMapGrammarParser.ParserErrorsに格納されています。MapGrammarParser.ParserErrorsではエラーの種別(警告かエラーか)やエラーとなった構文の位置、エラーメッセージが取得出来ます。独自のエラーメッセージを実装する場合は、MessageGeneratorを継承したカスタムクラスを実装し、MapGrammarParserのコンストラクタで指定して下さい。
Bve5_Parsing.slnに含まれているParseSampleAppプロジェクトからは、コンソール上でパーサの動作を確かめることができます。Bve5_Parsingの実装例として適宜利用して下さい。
Bve5_Parsing is using the following library.
The BSD License (3-clause BSD License)
Copyright (c) 2012 Terence Parr and Sam Harwell
- ライセンス全文 : ANTLR4ライセンス全文
The MIT License (MIT)
Copyright (c) 2017 hnx8
- ライセンス全文 : ReadJEncライセンス全文
The MIT License (MIT)
Copyright(c) 2017-2019 aoisupersix
Bve5_Parsingの技術解説です。
-> TechnicalCommentary.md
Thanks goes to these wonderful people (emoji key):
Aoi Tanaka 💻 | s520 💻 |
This project follows the all-contributors specification. Contributions of any kind welcome!