我需要在运行时更改解析器的语法规则,并且我希望避免在每次规则更改时重新生成解析器。
是否有不使用代码生成的解析器?
问候,
您可以使用(意思是可能自己实现,不太可能是一个图书馆)一个Earley parser。
您当然会为此付出间接费用。如果您的语法和它解析的源很小,这可能没问题。
否则你可能会重新考虑;为什么你不想重建解析器?大多数解析器生成器的运行速度远远快于人们编辑规则的速度。
您可以使用PEG(手写或类似boost:spirit的东西)
PEG 不是 LL 语法的严格超集,但通常更具表现力,因为它们具有各种额外功能,例如有限否定和后续上下文测试。