gpt4 book ai didi

pegjs - 如何使用 PEGjs 进行验证而不是解析?

转载 作者:行者123 更新时间:2023-12-01 23:48:47 28 4
gpt4 key购买 nike

我有以下 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 中,但我宁愿避免这种情况。而且我也想避免收集解析的组件(即,我不需要 ["a", ["b", "c", "d"]] 匹配 "abcd",我只需要 true)。

是否有一些隐藏的 PEGjs 功能可以使这项工作正常进行?也许是一个聪明的 Action ,或者是对组合器的创新使用?

或者也许我应该使用完全不同的工具,而不是解析器生成器?如果是这样,有人知道我应该使用什么吗?

最佳答案

我们可以使用 Name { return true }/{ return false } 来获得一个表达式,如果规则匹配则返回 true。然后,我们可以添加 !. 来检查我们是否在 true 情况下的输入末尾,并在 false 情况下添加 .* 跳到末尾。所以我们得到:

ValidateName = Name !. { return true } / .* { return false }

关于pegjs - 如何使用 PEGjs 进行验证而不是解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27673480/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com