我有一个 ASCII 垃圾二进制文件,比方说,其中某处包含一些 XML 代码片段。
我正在寻找可以在此二进制文件中找到这些 XML 片段的(最好是快速的)算法。
(就像正则表达式,但使用上下文无关语法进行模式匹配。)
我也想以某种方式将算法推广到其他上下文无关文法。
有什么想法吗?
最佳答案
通常解析器会解析一个应该属于该语言的句子,而不是一个任意的句子,其中属于该语言的句子隐藏在其中。
我建议您使用语法和正则表达式的开始符号来检查 ASCII 垃圾中的它,一旦找到它,就对以该符号开始的文本和句子的其余部分使用解析器,然后查看解析器因错误而停止解析的位置。然后你必须根据错误发生的位置来判断 JS 代码是否正确。
我不知道有什么算法可以开箱即用地完成您想要的操作,但我猜想以前可能有人需要这个,因为它实际上很有用。也许你能在书中找到一些有趣的东西Parsing Techniques由 Grune 和 Jacobs 撰写。
关于regex - 在二进制文件中查找代码片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8491525/