2017-03-31 120 views
0

我想定義一個領域特定語言(DSL)是結構/級聯這樣如何在Grammar-Kit中定義結構化數據類型?

ROOT 
    NAME "my dsl" 
    TODO 
    DESC "foo" 
    END 
    TODO 
    DESC "bar" 
    END 
END 

對於我的理解,它需要下列規則:

  • ROOT和TODO對象已開始他們的關鍵字並以END結束。
  • ROOT必須具有NAME屬性。
  • TODO必須在根DESC屬性
  • TODO是0到n次

我怎樣才能表達的BNF這樣的規則集?

回答

0

基於Custom Language Support Tutorial(簡單語言),以下BNF代碼段適用於我。

{ 
    tokens=[ 
    space='regexp:[\s\n]+' 
    string="regexp:'.*'" 
    ] 
} 

simpleFile ::= 'ROOT' space nameAttr space (todoObj space)+ 'END' 
nameAttr ::= 'NAME' space string 

todoObj ::= 'TODO' space descAttr space 'END' 
descAttr ::= 'DESC' space string