在一次面试中,我被问到这个问题:
编写一段代码来生成解析树,就像编译器在内部为任何给定表达式所做的那样。例如:
a+(b+c*(e/f)+d)*g 发布于 2012-02-14 18:57:39
每当您打算编写解析器时,要问的主要问题是您是想手动完成,还是使用解析器生成器框架。
在这种情况下,我会说这是一个很好的练习,把它全部写出来。
从树本身的良好表示开始。这将是你的算法的输出。例如,这可能是一个对象集合,其中一个对象类型可以表示一个“标签”,如示例中的a、b和c。其他人可以代表数字。然后,您可以定义运算符的表示形式,例如,+是一个二元运算符,它将有两个子对象,分别表示左子表达式和右子表达式。
下一步是实际的解析器,我建议使用一个经典的递归解析器。描述这一点并提供标准伪代码实现的一个文本是由Theodore Norvell编写的文本
https://stackoverflow.com/questions/9275200
复制相似问题