请教如果想在新的语言当中定义新的多元运算符一般采用什么形式?
在一个新的语言中想要定义新的多元运算符一般采用什么形式? 这种知识一般在那方面的书上可以看到? 离散数学?形式语言? 请高手指点一二
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
在一个新的语言中想要定义新的多元运算符一般采用什么形式? 这种知识一般在那方面的书上可以看到? 离散数学?形式语言? 请高手指点一二
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(9)
回复 8# cjaizss 对 哈哈 不过不知道一般这种多元运算符定义的时候采用什么形式
真没觉得非要从函数中剥离出来有什么实际用途
有点类似于C++的符号重载对吗?和C++不同的,你可以在用该语言写程序的时候自己造操作符,对不?其实和函数真没有什么不同,只是在这种新的语言的语法种稍有不同而已 ,规约的方法稍有不同,规约之后和函数一样处理罢了.
回复 4# EricFisher
那个应该是语法设计者的事情。好像需要很深形式语言基础才能设计语法的。那样的设计可以保证运算符的优先级和结合性,我自己猜的。
回复 5# cjaizss
想做一个表达式分析器,提供一些新的多元运算符。在实现功能上和函数是一样的。
函数不就行了?
本帖最后由 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
回复 2# EricFisher
比如c语言中的?:就是个三目的运算符 。 想法是可以设定比三更大的数目,假如是五元的,那么就让给出的五个操作数进行我所指定的操作。具体操作的含义可以是很复杂的,不局限于基本的算术和逻辑运算,有点儿像多元函数的意思。
我有这样的想法:加入有一个5元运算符,采用这样的形式 operater: arg1,arg2,arg3,arg4,arg5 然后让5个参数执行我所指定的操作。
可不可以采用下面这种形式,即用空格来代替:和,
operater arg1 arg2 arg3 arg4 arg5
多元运算符?能举个例子么?
看起来是要扩展语言,增加一种表达式,要作词法,语法分析。。。