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