我想定义一个像这样的结构/级联的领域特定语言(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 中表达这样的规则集?
我想定义一个像这样的结构/级联的领域特定语言(DSL)
ROOT
NAME "my dsl"
TODO
DESC "foo"
END
TODO
DESC "bar"
END
END
据我了解,它需要以下规则:
如何在 BNF 中表达这样的规则集?
基于自定义语言支持教程(简单语言),以下 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