我想更多地了解递归下降解析器的运行时。我也对递归下降解析器使用的堆栈空间感兴趣(以及运行时和堆栈空间之间的权衡)。 有哪些好的信息来源?
我已阅读wikipedia article并在网上搜索,但我没有找到任何详细信息。
答案 0 :(得分:2)
递归下降解析的运行时非常快;通常使用机器CALL / RET指令来实现递归。不会回溯或向前看的手写版本通常应该非常快。但重要的是不是解析令牌流的时候;重要的是处理字符构建令牌和/或语义检查/代码生成所花费的时间。你为什么担心这个?
堆栈空间基本上由解析程序所需的最深嵌套决定。如果你的解析器在表达式中接受(...),并且有人写了一个包含50,000个嵌套parens的表达式,那么递归下降解析将递归50,000次。 您可以通过制定关于解析器递归的深度的任意规则来阻止此行为(几乎每个人都这样做)。我发现100个级别可以让你处理非常复杂的程序。