有没有办法通过正则表达式验证XQuery?
我想在我的客观c程序中使用它。
答案 0 :(得分:2)
在E-BNF中注意到XQuery Grammar。 BNF是无上下文语法的表示法,它比常规语法(例如由正则表达式描述)更少限制。通常,无法将语法转换为Chomsky Hierarchy上的语言 lower 。
许多理论计算机科学,没有人告诉我们XQuery工作组不只是为了方便使用BNF而且可以使用REGEX来描述语法。
但让我们有另一种观点。 XQuery允许从其他模块加载任意代码。如果实现允许这样做,甚至允许HTTP资源,例如。 import module namespace functx = "http://www.functx.com" at "http://www.xqueryfunctions.com/xq/functx-1.0-nodoc-2007-01.xq";
(不要在你的应用程序中执行此操作,镜像functx库 - 从网页加载会慢得多,而functx会不喜欢你)。因此,您需要解析(至少某些部分)XQuery以获取所有代码。
选择一些XQuery实现并使用它。有lots around,Apple甚至包括NSXML中的一个。
答案 1 :(得分:0)
不,使用正则表达式无法识别非常规语言的无上下文语言。
更具体地说,CF语言需要无限的内存结构(如堆栈)才能被解析,而常规语言识别则不需要,只需要固定数量的内存(对于有限自动机)
XQuery实际上是一种语法相当复杂的语言。它包含整个XPath 2.0语言作为子集。在过去,我已经为XPath 2.0生成了一个解析器,并且知道它的语法。它有大约210条规则。这本身就说明了XPath 2.0的复杂性,XPath 2.0只是XQuery的一个子集。