我有以下的PEGjs产生式:
NameStartChar = ":" / [A-Z] / "_" / [a-z] / [\u00C0-\u00D6] / [\u00D8-\u00F6] / [\u00F8-\u02FF] / [\u0370-\u037D] /
[\u037F-\u1FFF] / [\u200C-\u200D] / [\u2070-\u218F] / [\u2C00-\u2FEF] / [\u3001-\uD7FF] /
[\uF900-\uFDCF] / [\uFDF0-\uFFFD] / [\uD800-\uDB7F][\uDC00-\uDFFF]
NameChar = NameStartChar / "-" / "." / [0-9] / "\u00B7" / [\u0300-\u036F] / [\u203F-\u2040]
Name = NameStartChar NameChar*
如果我的输入字符串与 Name
匹配,我希望得到true
,否则返回false
,我并不关心组件的解析。
然而,PEGjs在匹配失败时会抛出异常。
当然,我可以使用 try/catch 来处理,但我更希望避免这样做。我也想避免收集解析出来的组件(例如,当匹配 "abcd"
时,我不需要 ["a", ["b", "c", "d"]]
,我只需要 true
)。
是否有一些隐藏的 PEGjs 功能可以解决这个问题?也许是巧妙的操作或组合子的创新用法?
或者,我应该使用完全不同的工具,而不是解析器生成器?如果是这样的话,有人知道我应该使用什么吗?