使用优先级解析器不仅用于表达式?

时间:2011-03-11 08:58:53

标签: parsing compiler-construction operator-precedence

是否可以使用某种运算符优先级解析器或分流码算法来实现简单的编程语言?例如,如果这种语言只有变量的表达式,函数和声明。

这种方式的缺点和优点是什么?它可以比传统的LL / LR解析器快得多吗?

1 个答案:

答案 0 :(得分:4)

要回答您的第一个问题,是的,可以将运算符优先级解析作为语言的一部分。如果您对此感兴趣,请查看Pratt parsers。这通常是自顶向下解析的变体,因此它应该与您的其他解析选项位于相同的性能邻域中。一般来说,我认为人们过分担心解析速度。编译器通常会花费大部分时间进行优化,并且在解析阶段出汗几毫秒对我​​来说似乎不值得。

有一种语言magpie,它实现了一个Pratt解析器。因此,最大的优点是他们已经在库中定义了语言的所有运算符而不是核心语言。这使得核心语言非常紧凑和可扩展。但缺点是,其他用户总是不得不想知道特定运营商的优先级是什么,因为通常的内置规范可能不适用。