![](/img/trans.png)
[英]How can I decrypt data stored in XML using the XML Encryption Syntax and Processing spec?
[英]Can I define the XML syntax using an operator precedence grammar?
让我们在以下假设下关注以下部分,
Misc
、 CharData
、 Reference
、 CDSect
、 PI
、 Comment
)document
, prolog
, element
)[1] document ::= prolog element Misc*
[39] element ::= STag content ETag
[43] content ::= CharData? ((element | Reference | CDSect | PI | Comment) CharData?)*
我想把它写成运算符优先语法。 但我未能完成规则content
。 我该如何定义它?
document : prolog element
| prolog element misc
;
misc : misc Misc
| Misc
;
element : STag ETag
| STag content ETage
;
该语法不是运算符语法,因此尝试为其编写运算符优先级解析器肯定会失败。 如果您真的想从事该项目,则需要重写语法。
回想一下,运算符语法有两个基本特征:
第一条规则禁止空生产和单元生产。 这些可以以臃肿的语法为代价机械地消除。
第二条规则禁止像document: prolog element
这样的右手边。 但更关键的是,它不会让您将element
用作非终结符,因为语言本身允许并列element
s。 这种修改应该是可能的,因为实际上每个element
都以终端开始和结束,因此您应该能够通过用定义宏替换其所有用途来从语法中消除element
。 但这也会很乏味。(另外,我不相信制作STag
和ETag
终端真的反映了语法;开始标签是语法复杂的 object 必须以某种方式解析。)
完成所有这些后,您将需要处理 XML 的基本上下文敏感性,这是由于需要在开始和结束标签之间达成一致。 大多数人只是简单地将其重新定义为“语义”,以便能够使用上下文无关语法,但它仍然是正确解析所必需的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.