语法(DSL)用户输入支持

时间:2019-02-27 13:06:44

标签: javascript html grammar dsl

我为领域特定语言定义了一种语法。看起来像这样:

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]:+

保留较短时间只是为了提出一个想法。 例如,此语法的有效输入为:

  • Server.attribute(password = kgfjerjeks).isParentOf(Software).hasConnection(to(Database).attribute(secure = true))
  • (PC1.attribute(user = dumb)AND PC2.attribute(user = smart))。hasConnection(to(Server))

语法的编译器和提供程序是Nearley.js。

现在,我想创建一个用户界面(HTML && CSS && Javascript)。该界面应提供一个输入字段,用户可以在其中使用提供的语法构建此类句子。

为尽量减少可能的错误,我想向用户提供帮助。这应该向用户显示他在哪个位置具有哪些输入选项。我已经自己解决了,用户必须双击规则中的元素,然后替换标记的元素。但这似乎不是一个很好的解决方案。

有人有一个聪明的主意吗?

0 个答案:

没有答案