什么是可重入的解析器?

clo*_*ead 11 parsing reentrancy

谁可以给我解释一下这个?特别是之间的区别:

http://github.com/whymirror/greghttp://piumarta.com/software/peg/

前者是后者的可重入版本.

JUS*_*ION 16

最简单的重入解析器不使用全局变量,因此可以同时激活多个实例(不一定与线程相关,但这是我怀疑的主要用例).

但是,在更复杂的用例中,您可以使用解析器实际解析同一源文档中的多种语言.例如,考虑一个JSP解析器,它必须解析同一文件中的Java代码和HTML.您可以制作两个解析器并在它们之间切换,而不是制作一个涵盖两种语言的大型解析器(可能非常不切实际).但是,如果您的解析器使用它们之间的全局状态切换可能会有问题.一个可重入的解析器允许您轻松地在解析器之间切换,或者以协程的形式,或者在简单的"解析器-A调用解析器-B中嵌入代码,然后返回"情况.


编辑添加:

如果您想要一种极端形式的可重入解析,请查看解析器组合器(如Parsec),其中"语法"中的每个子表达式都是完全独立的解析器.你通过组合无数的小解析器来构建一个大的解析器.


KMå*_*Mån 5

从维基

要重入,可以使用计算机程序或例程:

  • 必须不包含静态(或全局)非恒定数据。
  • 不得将地址返回静态(或全局)非恒定数据。
  • 必须仅对调用方提供的数据起作用。
  • 绝对不能依赖于对单例资源的锁定。

不一定与线程安全有关,但是可以解析文档中的多个语法。