1

我想定义一个像这样的结构/级联的领域特定语言(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 中表达这样的规则集?

4

1 回答 1

1

基于自定义语言支持教程(简单语言),以下 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
于 2017-04-02T21:54:08.120 回答