Как определить структурированные типы данных в Grammar-Kit?
Я хочу определить домен-специфический язык (DSL), который является структурой / каскадно, как это
ROOT
NAME "my dsl"
TODO
DESC "foo"
END
TODO
DESC "bar"
END
END
Для моего понимания нужны следующие правила:
- Объекты ROOT и TODO должны начинаться с их ключевого слова и заканчиваться END.
- ROOT должен иметь атрибут NAME.
- TODO должен иметь атрибут DESC
- TODO 0..n раз в корне
Как я могу выразить такой набор правил в BNF?
1 ответ
Основываясь на руководстве по поддержке нестандартного языка (Simple Language), у меня работает следующий фрагмент 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