gpt4 book ai didi

使用用户定义的运算符优先级进行解析

转载 作者:行者123 更新时间:2023-12-03 12:15:56 26 4
gpt4 key购买 nike

好的,所以这里有一个问题:鉴于 Haskell 允许您定义具有任意运算符优先级的新运算符……如何才能真正解析 Haskell 源代码?

在解析源之前,您无法知道设置了哪些运算符优先级。但是在您知道正确的运算符优先级之前,您无法解析源代码。所以……嗯,怎么样?

例如,考虑表达式

x *** y +++ z

在我们完成对模块的解析之前,我们不知道导入了哪些其他模块,因此不知道哪些运算符(和其他标识符)可能在范围内。我们当然还不知道它们的优先级。但是解析器必须返回一些东西......但是它应该返回吗
(x *** y) +++ z

或者它应该返回
x *** (y +++ z)

可怜的解析器没有办法知道。这只有在您找到带来 (+++) 的导入后才能确定。和 (***)进入范围,从磁盘加载该文件,并发现运算符的优先级是什么。很明显,解析器本身不会做所有的 I/O。解析器只是将字符流转换为 AST。

显然,某个地方的某个人已经想出了如何做到这一点。但我无法解决...任何提示?

最佳答案

引用 page on GHC trac对于解析器:

Infix operators are parsed as if they were all left-associative. The renamer uses the fixity declarations to re-associate the syntax tree.

关于使用用户定义的运算符优先级进行解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29185467/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com