我为领域特定语言定义了一种语法。看起来像这样:
Expression -> (SingleObjectExpression | MultipleObjectExpression)
SingleObjectExpression -> Identifier AttributeFilter:* RelationFilter:* ConnectionFilter:*
MultipleObjectExpression -> (OrConnected | AndConnected) AttributeFilter:* RelationFilter:* ConnectionFilter:*
OrConnected -> "(" SingleObjectExpression _ "OR" _ SingleObjectExpression ")"
AndConnected -> "(" SingleObjectExpression _ "AND" _ SingleObjectExpression ")"
AttributeFilter -> ".attribute(" singleString "=" singleString ")"
RelationFilter -> ".isParentOf(" SingleObjectExpression ")"
ConnectionFilter -> ".hasConnection(" ( "from(" SingleObjectExpression ")" | "to(" SingleObjectExpression ")" ) AttributeFilter:* ")"
Identifier -> singleString
singleString -> [a-zA-Z]:+
_ -> [ \s]:+
保留较短时间只是为了提出一个想法。 例如,此语法的有效输入为:
语法的编译器和提供程序是Nearley.js。
现在,我想创建一个用户界面(HTML && CSS && Javascript)。该界面应提供一个输入字段,用户可以在其中使用提供的语法构建此类句子。
为尽量减少可能的错误,我想向用户提供帮助。这应该向用户显示他在哪个位置具有哪些输入选项。我已经自己解决了,用户必须双击规则中的元素,然后替换标记的元素。但这似乎不是一个很好的解决方案。
有人有一个聪明的主意吗?