現在のプロジェクトでは、優れた機能を備えた Xtext で文法を記述しました。たとえば、私の文法のコード スニペット
Device:
deviceName = ID ':'
('region' ':' ( deviceRegions += DeviceRegions)+ )* ;
DeviceRegions:
regionLabel = [RegionLabel] ';'
// It stores a List of regionLabel functionalities
;
RegionLabel: name = ID ;
上記の文法を使用して、次の高レベル仕様を記述します。
DeviceOne :
region :
Room ;
Floor ;
Building;
DeviceTwo:
region :
Room ;
Floor ;
Building;
xText で記述された文法の同等の BNF 文法を見たいと思います。同等の文法は、たとえば次のようになります。
Device = ID ':'
( 'region' ':' (deviceRegions = DeviceRegions)+)* ;
DeviceRegions :
regionLabel = RegionLabel ';' ;
RegionLabel = 'room' | 'Floor' | 'Building' ;
ID = 'A'..'Z' ('a' ..'z' | 'A' ..'Z')* ;
私の質問は、「xText で書かれた文法を同等の BNF 文法に変換する方法はありますか、それとも手動で行うべきですか?」
xText の文法は非常に簡単に習得して記述できることを知っています。ただし、BNF 文法が必要です。