我正在尝试使用Lark为WordPress 短代码创建一个解析器。该语言中的自闭合标签与标准的开始标签没有区别,即使在完全有效的语法中也会造成相当多的歧义。我已经让它大部分工作了,但正在努力匹配开始和结束标签。
以下示例包含一个自闭合标签 [a] 和一个带有纯文本内容的标签 [b][/b]:
[a][b] content [/b]
我的语言定义的相关部分如下所示:
shortcode: shortcode_template{shortcode_name, attribute_list} | "[" shortcode_name attribute_list "]"
shortcode_template{name, attrs}: "[" name attrs "]" value "[/" name "]"
shortcode_name: /[^\[\]\<\>\&\/\s]+/
我希望为开始/结束标记变体使用模板会做类似于正则表达式组逻辑的事情,例如"[" (name) attrs "]" value "[/" $1 "]"
,但这似乎只是被解压缩到"[" shortcode_name attribute_list "]" value "[/" shortcode_name "]"
中,导致上述文本被解析为:
value
shortcode
shortcode_template
shortcode_name a
attribute_list
value
shortcode
shortcode_name b
attribute_list
shortcode_name b
是否有一个选项告诉 Lark 开始标签中的名称值应该与结束标签中的名称值相同?