現在ログインしていません。
新規アカウント作成
ログイン

ANTLRをVBから使用する

ANTLRは構文解析を行うプログラム(パーサー)を生成するツールです。これを使うと独自のプログラミング言語を作ったりやちょっとした構文解析を行うことができます。

ANTLR自体はJavaでできていますが、.NETのパーサーを作成することも可能です。Micorosoft製の.NETのテンプレート(たとえば、Visual Studioで自動生成されるASP.NETのテンプレート)で内でも使用されています。

ここではANTLRが公開しているドキュメントに沿って、VBで簡単な構文解析プログラムを実行するまでの手順を説明します。

参考ANTLR v4をはじめる

ANTLRはVisual Studioに統合して使用する使用方法もあるようですが、ここでは統合しないで素のAntlrを使いVBから利用します。

1.JDKのインストール

JDKのインストール方法は専門で解説しているサイトを参照してください。 たとえば、このサイトの説明はわかりやすいです。 (少しバージョンが古いので違う部分もありますが、大きな差ではないです。)

【初心者でもすぐわかる】JDKのインストール方法 Windows編

インストール時にインストール先のパスをメモっておいてください。後の手順で使用します。 たとえば、次のようなパスです。 C:\Program Files\Java\jdk-12.0.1

2.ANTLRのダウンロード

手順2-1.https://www.antlr.org/download/を表示します。

手順2-2.antlr-4.7.1-complete.jar をダウンロードします。

数字は少しくらい違っても良いですが、「complete」と付いているものをダウンロードしてください。

手順2-3.同じく antlr-csharp-runtime-4.7.1-net35.zip (zipped .dll) をダウンロードします。

数字は、手順2-2でダウンロードしたものと同じものにしてください。 (同じものがない場合は、多分、最も近い下の数字を選んでください。)

手順2-4.C:\Javalibフォルダーを作成し、ダウンロードした2ファイル をコピーします。

別のフォルダーでも良いのですが、説明の便宜のためこのフォルダーを前提にします。

zipファイルは解凍して、中身のDLLをコピーしてください。 Antlr4.Runtime.Standard.dllのような名前です。

手順2-5.C:\Javalibフォルダー内に下記の内容のバッチ antlr4.bat を作成します。

SET CLASSPATH=.;C:\Javalib\antlr-4.7.1-complete.jar;%CLASSPATH%

java org.antlr.v4.Tool %*
■リスト1:antlr4.bat

手順2-6.C:\Javalibフォルダー内に下記の内容のバッチ grun.bat を作成します。

SET CLASSPATH=.;C:\Javalib\antlr-4.7.1-complete.jar;%CLASSPATH%

@ECHO OFF
SET TEST_CURRENT_DIR=%CLASSPATH:.;=%
if "%TEST_CURRENT_DIR%" == "%CLASSPATH%" ( SET CLASSPATH=.;%CLASSPATH% )
@ECHO ON
java org.antlr.v4.gui.TestRig %*
■リスト2:grun.bat

3.パーサーのソースコード生成

手順3-1.ANTLRの文法ファイルを作成します。

本来はここで、独自のプログラミング言語の文法や、解析対象の構文の文法を記入します。 文法の記入はANTLRのハイライトで最も重要な作業です。さまざまな記法があります。 ここでは、簡単に動作確認するために公式サイトでシンプルなサンプルとして用意されている文法ファイルを少しだけいじったファイルを使用します。

C:\Javalibフォルダー内に下記に内容で Hello.g4 という名前のファイルを作成してください。

// Define a grammar called Hello
grammar Hello;
r  : 'Dim' ID ;         // match keyword hello followed by an identifier
ID : [a-z]+ ;             // match lower-case identifiers
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines
■リスト3:Hello.g4

手順3-2.コマンドプロンプトを開き C:\Javalib をカレントフォルダーにします。

つまり、cd C:\Javalib のようなことをします。

手順3-3.パーサーのソースコードを生成します。

下記コマンドを実行してください。

antlr4 -Dlanguage=CSharp Hello.g4
■リスト4:パーサーのソースコードを生成

C:\Javalibフォルダーに4つのcsファイルを含むいくつかのファイルが生成されます。

C#のソースコードを生成していますが、利用する側はVBで大丈夫ですのでご心配なく。

4.パーサーをコンパイルする

手順4-1.Visual Studio を起動します。

私は2017で試しました。 もう少し古いバージョンでも大丈夫だと思います。

手順4-2.C#のクラスライブラリを新規作成します。

プロジェクト名はHtlloAntrlにします。 さきほど生成したcsファイルをコンパイルしてDLLにしたいだけです。利用する側はVBで大丈夫ですのでご心配なく。

手順4-3.デフォルトで生成される Class1.cs ファイルを削除します。

手順4-4.さきほど生成した4つのcsファイルをコピーして、プロジェクトに加えます。

その方法は、たとえば、ソリューションエクスプローラーでプロジェクトを右クリックして、追加 > 既存の項目。

このレベルの操作がわからない方はANTLRを使うのは厳しいです。

手順4-5.C:\Javalib\Antlr4.Runtime.Standard.dllへの参照設定を追加します。

ダウンロードしたバージョンが異なるとファイル名が違うかもしれません。

手順4-6.すべてリビルドします。

成功するとbinフォルダーにHelloAntrl.dllが生成されます。

ここでビルドエラーが発生する場合バージョンの不整合です。 ダウンロードしたjarファイルとdllファイルのバージョンがあっているか確認してください。

これで、ようやくVBから操作できるパーサーができました。

5.VBで構文解析を行う

手順5-1.新しくVisual Studioを起動し、VBのクラスライブラリを新規作成します。

手順5-2.手順4-6で生成したHelloAntrl.dllと同じフォルダーにあるAntlr4.Runtime.Standard.dllに参照設定します。

手順5-3.Module1.vbに次の通りプログラムします。

Imports Antlr4.Runtime

Module Module1

    Sub Main()

        Dim sourceCode As String = "Dim myvalue"

        Dim inputStream As New AntlrInputStream(sourceCode)
        Dim lexer As New HelloLexer(inputStream)

        Dim tokens = lexer.GetAllTokens

        For Each token In tokens
            Console.WriteLine(token.Text)
        Next

        Console.ReadKey()

    End Sub

End Module
■リスト5:字句解析

これは「Dim myvalue」という短いプログラムを解析する例なのでこれだけではありがたみはりません。 実行するとDimとmyvalueが表示されます。 なお、文法ファイル(Hello.g4)にはDimの後ろ単語(ID)は英小文字1文字以上で構成されると定義してあるため、Dim myvalueの部分をDim myValueなどとすると「line 1:6 token recognition error at: 'V'」と表示されます。少しありがたみが出てきますね。

これだけではまだ初歩的な字句解析を行っているだけですが、これができれば文法ファイルの記載したとおりの構文を解析させることができるわけですから、後はAntlrの文法のヘルプやライブラリのリファレンスを見ながら作業を進めることができそうです。私もまだよくわかっていないのでこれを基に発展させていきたいと思います。