如何在Grammar-Kit中定义结构化数据类型?

时间:2017-03-31 14:08:53

标签: jetbrains-ide intellij-plugin grammar-kit

我想定义一个像这样结构/级联的域特定语言(DSL)

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

根据我的理解,它需要以下规则:

  • ROOT和TODO对象必须以其关键字开头,以END结束。
  • ROOT必须具有NAME属性。
  • TODO必须具有DESC属性
  • TODO在ROOT中为0..n次

我如何在BNF中表达这样的规则?

1 个答案:

答案 0 :(得分: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