2017-03-31 34 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 
相关问题