我想定义一个像这样结构/级联的领域特定语言(DSL(
ROOT
NAME "my dsl"
TODO
DESC "foo"
END
TODO
DESC "bar"
END
END
据我了解,它需要以下规则:
- ROOT 和 TODO 对象必须以关键字开头,以 END 结尾。
- ROOT 必须具有 NAME 属性。
- 待办事项必须具有 DESC 属性
- TODO 在根中是 0..n 次
如何在 BNF 中表达此类规则集?
基于自定义语言支持教程(简单语言(,以下 BNF 代码段对我有用。
{
tokens=[
space='regexp:[sn]+'
string="regexp:'.*'"
]
}
simpleFile ::= 'ROOT' space nameAttr space (todoObj space)+ 'END'
nameAttr ::= 'NAME' space string
todoObj ::= 'TODO' space descAttr space 'END'
descAttr ::= 'DESC' space string