免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2944 | 回复: 9
打印 上一主题 下一主题

请教如果想在新的语言当中定义新的多元运算符一般采用什么形式? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-10-13 16:42 |只看该作者 |倒序浏览
在一个新的语言中想要定义新的多元运算符一般采用什么形式? 这种知识一般在那方面的书上可以看到? 离散数学?形式语言?  请高手指点一二

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
2 [报告]
发表于 2010-10-13 20:34 |只看该作者
多元运算符?能举个例子么?

看起来是要扩展语言,增加一种表达式,要作词法,语法分析。。。

论坛徽章:
0
3 [报告]
发表于 2010-10-14 10:51 |只看该作者
回复 2# EricFisher


    比如c语言中的?:就是个三目的运算符 。 想法是可以设定比三更大的数目,假如是五元的,那么就让给出的五个操作数进行我所指定的操作。具体操作的含义可以是很复杂的,不局限于基本的算术和逻辑运算,有点儿像多元函数的意思。
   我有这样的想法:加入有一个5元运算符,采用这样的形式  operater: arg1,arg2,arg3,arg4,arg5 然后让5个参数执行我所指定的操作。
   可不可以采用下面这种形式,即用空格来代替:和,   
   operater  arg1  arg2  arg3 arg4 arg5

论坛徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
4 [报告]
发表于 2010-10-14 11:00 |只看该作者
本帖最后由 prolj 于 2010-10-14 11:19 编辑

哦,其实我一直好奇,语法规则是如何设计的,比如现有的c语法,为什么就是这样:

(6.5.1) primary-expression:
               identifier
               constant
               string-literal
               ( expression )

(6.5.2) postfix-expression:
               primary-expression
               postfix-expression [ expression ]
               postfix-expression ( argument-expression-listopt )
               postfix-expression . identifier
               postfix-expression -> identifier
               postfix-expression ++
               postfix-expression --
               ( type-name ) { initializer-list }
               ( type-name ) { initializer-list , }

(6.5.2) argument-expression-list:
               assignment-expression
               argument-expression-list , assignment-expression

(6.5.3) unary-expression:
               postfix-expression
               ++ unary-expression
               -- unary-expression
               unary-operator cast-expression
               sizeof unary-expression
               sizeof ( type-name )

(6.5.3) unary-operator: one of
               & * + - ~              !

(6.5.4) cast-expression:
               unary-expression
               ( type-name ) cast-expression

(6.5.5) multiplicative-expression:
               cast-expression
               multiplicative-expression * cast-expression
               multiplicative-expression / cast-expression
               multiplicative-expression % cast-expression

(6.5.6) additive-expression:
                multiplicative-expression
                additive-expression + multiplicative-expression
                additive-expression - multiplicative-expression
(6.5.7) shift-expression:
                additive-expression
                shift-expression << additive-expression
                shift-expression >> additive-expression

(6.5.8) relational-expression:
                shift-expression
                relational-expression     shift-expression
                                       <
                relational-expression     shift-expression
                                       >
                relational-expression     shift-expression
                                       <=
                relational-expression     shift-expression
                                       >=

(6.5.9) equality-expression:
                relational-expression
                equality-expression == relational-expression
                equality-expression != relational-expression

(6.5.10) AND-expression:
                equality-expression
                AND-expression & equality-expression

(6.5.11) exclusive-OR-expression:
                AND-expression
                exclusive-OR-expression ^ AND-expression

(6.5.12) inclusive-OR-expression:
                exclusive-OR-expression
                inclusive-OR-expression | exclusive-OR-expression

(6.5.13) logical-AND-expression:
                inclusive-OR-expression
                logical-AND-expression && inclusive-OR-expression

(6.5.14) logical-OR-expression:
                logical-AND-expression
                logical-OR-expression || logical-AND-expression

(6.5.15) conditional-expression:
                logical-OR-expression
                logical-OR-expression ? expression : conditional-expression

(6.5.16) assignment-expression:
              conditional-expression
              unary-expression assignment-operator assignment-expression

(6.5.16) assignment-operator: one of
              = *= /= %= +=            -=    <<=    >>=   &=    ^=    |=

(6.5.17) expression:
              assignment-expression
              expression , assignment-expression

(6.6) constant-expression:
              conditional-expression

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2010-10-14 13:52 |只看该作者
函数不就行了?

论坛徽章:
0
6 [报告]
发表于 2010-10-16 10:44 |只看该作者
回复 5# cjaizss
想做一个表达式分析器,提供一些新的多元运算符。在实现功能上和函数是一样的。

论坛徽章:
0
7 [报告]
发表于 2010-10-16 10:48 |只看该作者
回复 4# EricFisher
那个应该是语法设计者的事情。好像需要很深形式语言基础才能设计语法的。那样的设计可以保证运算符的优先级和结合性,我自己猜的。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
8 [报告]
发表于 2010-10-17 09:36 |只看该作者
有点类似于C++的符号重载对吗?和C++不同的,你可以在用该语言写程序的时候自己造操作符,对不?其实和函数真没有什么不同,只是在这种新的语言的语法种稍有不同而已 ,规约的方法稍有不同,规约之后和函数一样处理罢了.

论坛徽章:
0
9 [报告]
发表于 2010-10-17 10:13 |只看该作者
回复 8# cjaizss 对  哈哈  不过不知道一般这种多元运算符定义的时候采用什么形式

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
10 [报告]
发表于 2010-10-17 10:45 |只看该作者
真没觉得非要从函数中剥离出来有什么实际用途
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP