idv935 发表于 2010-10-13 16:42

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

在一个新的语言中想要定义新的多元运算符一般采用什么形式? 这种知识一般在那方面的书上可以看到? 离散数学?形式语言?请高手指点一二

EricFisher 发表于 2010-10-13 20:34

多元运算符?能举个例子么?

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

idv935 发表于 2010-10-14 10:51

回复 2# EricFisher


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

EricFisher 发表于 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

cjaizss 发表于 2010-10-14 13:52

函数不就行了?

idv935 发表于 2010-10-16 10:44

回复 5# cjaizss
想做一个表达式分析器,提供一些新的多元运算符。在实现功能上和函数是一样的。

idv935 发表于 2010-10-16 10:48

回复 4# EricFisher
那个应该是语法设计者的事情。好像需要很深形式语言基础才能设计语法的。那样的设计可以保证运算符的优先级和结合性,我自己猜的。

cjaizss 发表于 2010-10-17 09:36

有点类似于C++的符号重载对吗?和C++不同的,你可以在用该语言写程序的时候自己造操作符,对不?其实和函数真没有什么不同,只是在这种新的语言的语法种稍有不同而已 ,规约的方法稍有不同,规约之后和函数一样处理罢了.

idv935 发表于 2010-10-17 10:13

回复 8# cjaizss 对哈哈不过不知道一般这种多元运算符定义的时候采用什么形式

cjaizss 发表于 2010-10-17 10:45

真没觉得非要从函数中剥离出来有什么实际用途
页: [1]
查看完整版本: 请教如果想在新的语言当中定义新的多元运算符一般采用什么形式?