首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift中的自定义运算符

Swift中的自定义运算符
EN

Stack Overflow用户
提问于 2015-04-02 08:56:13
回答 1查看 453关注 0票数 2

众所周知,可以在Swift中定义自定义操作符如下:

代码语言:javascript
复制
infix operator +- { associativity left precedence 140 }

Swift编程语言规范告诉我们

使用operator关键字在全局级别声明新运算符。

我想知道的是,它们所谓的“全局级别”是什么意思,以及编译器是如何在语法分析中找出操作符的。Swift编译器是使用需要在使用站点了解这些操作符定义的自定义解析器,还是有一些特殊的OPERATOR_PRECEDENCE编译器阶段(或类似的内容)?还是我在这里错过的完全不同的东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-03 04:44:56

我不知道它有多快,但也没那么难。

一种方法是首先构造一个AST,其中表达式只是操作数(包括括号大小的子表达式)和运算符的列表。一旦初始解析完成并声明了操作符,优先级(和固定性,如果必要)可以附加到每个操作符,AST被重新封装,使用分流码算法的简化形式将每个表达式列表重新构建为表达式树。

在Swift的例子中,似乎使用空白来区分前缀、后缀和infix运算符(堡垒的阴影!)。我不清楚一旦知道了所有操作符的名称,是否需要重新设置一个操作符序列,但是我看不到任何其他方法,因为空格规则不允许前缀操作符(例如)后面跟着一个空格,以便将它从后面的前缀操作符中分离出来。这并不会使上述算法复杂化,因为运算符、操作数和括号不共享任何公共字符。因此,即使不清楚每个操作符标记从何处开始,最糟糕的情况也是您最终不得不将一个运算符令牌拆分成几个实际的操作符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29408865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档