parsing - 不仅对表达式使用优先级解析器?

标签 parsing compiler-construction operator-precedence

是否可以将某种运算符优先级解析器或调车场算法用于简单的编程语言?例如,如果这种语言只有表达式、函数和变量声明。

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

最佳答案

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

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

关于parsing - 不仅对表达式使用优先级解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5270865/

相关文章:

c++ - 为什么要编译(在初始化之前在函数中使用)?

.net - VB.NET 中的奇怪 -1.#IND 错误

sql - 在 PostgreSQL 中分组 AND 和 OR 条件

compiler-construction - 如何将 CUDA 编译为 llvm IR?

rebol - 修复 Rebol3 示例计算器以使用正常的数学运算符优先级

c# - 不要将 JToken 日期时间字符串转换为 DateTime

python - 使用python将配置文件转换为字典

javascript - D3 折线图的解析日期 "2013-07-11T00:00:00"

java - 将解析树转换为 XML

iphone - XCode编译器错误: ld: library not found for -loauth