はじめに
経緯
Visual StudioでANTLR4の開発の手助けをするANTLR Language SupportがVisual Studio2017で対応を止めているため、代替手段を模索。
このstackoverflowの記事でAntlr4TemplatesとAntlr4BuildTasksを知ったため試してみた。
前提
Visual Studio2022インストール済
準備
環境構築
-
Antlr4Templatesインストール
dotnet new -i Antlr4Templates
1.テンプレートそのままの内容をVisualStudioでビルドできるところまで実施
src/sol1フォルダにANTLR4開発プロジェクトFooを登録。
テンプレートから作成されたg4ファイルから自動的にparser/lexerが生成される。
またビルドが通るところまで実施。
1.1.テンプレートからプロジェクト作成
cd src/sol1
mkdir Foo
cd Foo
dotnet new csharp-combine
補足: 他にC#向けのテンプレートとしてparser/lexerが分かれているantlr4cs-split
が有る。
1.2.Visual Studioで開く
- 作成されたcsprojファイルをVisual Studioで開く。
この時点でVisual Studioからビルドできる。
しかしg4ファイルからのparser/lexerのC#プログラムの自動生成はされない、 - Visual Studioのファイル > Foo.sln の保存 を選択し、ソリューションを保存
1.3.Visual StudioプロジェクトにAntlr4BuildTasks導入
- パッケージマネージャー・コンソールから導入
Install-Package Antlr4BuildTasks
1.4 終わり
ここまでで、g4ファイルから自動的にparser/lexerのC#プログラムが自動生成される。
また、ビルドも通る。
2. 自作のg4ファイルをVisualStudioでビルドできるようにする
src/sol1フォルダにANTLR4開発プロジェクトWooを登録。
自作のg4ファイルから自動的にparser/lexerが生成される。
またビルドが通るところまで実施。
2.1.テンプレートからプロジェクト作成
cd src/sol1
mkdir Woo
cd Woo
dotnet new csharp-combine
2.2.g4ファイルを置き換える
テンプレートから作成されたArithmetic.g4を削除し、自作のg4ファイルを配置。
ここでは、WooFoo.g4
grammar WooFoo;
woofoo : expression (SEMI expression)* EOF;
略
2.3.Program.cs編集
static void Try(string input)
の
var lexer = new ArithmeticLexer(str);
var parser = new ArithmeticParser(tokens);
を
var lexer = new WooFooLexer(str);
var parser = new WooFooParser(tokens);
var tree = parser.file();
を
var tree = parser.woofoo();
2.3.csproj編集
<Antlr4 Include="Arithmetic.g4">
を
<Antlr4 Include="WooFoo.g4">
2.4.Visual Studioで開く
- 作成されたcsprojファイルをVisual Studioで開く。
- Visual Studioのファイル > Foo.sln の保存 を選択し、ソリューションを保存
2.5.Visual StudioプロジェクトにAntlr4BuildTasks導入
- パッケージマネージャー・コンソールから導入
Install-Package Antlr4BuildTasks
2.6 終わり
ここまでで、g4ファイルから自動的にparser/lexerのC#プログラムが自動生成される。
また、ビルドも通る。