最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【整理】C语言中的复合(或组合)操作符

C crifan 2589浏览 0评论

【背景】

用antlr要去解析EDDL,其中的METHOD中的DEFINITION部分是c语言的子集。

想要匹配其中的组合字符串,类似于++,–,+=,-=等等之类的组合字符。

想要搞清楚,所有的,这类的字符,有哪些。

【解决过程】

1.参考:

关于C语言中的复合赋值操作符

加上自己想到的,已经可以写出这些了:

COMPOSITE_OPERATOR
	:	'==' |
		 '++' | '--' | 
		 '+=' | '-=' | '*=' | '/=' | '%=' | '<<=' | '>>=' | '&=' | '^=' | '|=';

2.另外,又觉得未必是完整的,所以再去找找资料。

后来是参考wiki:

http://en.wikipedia.org/wiki/C_%28programming_language%29#Operators

才发现漏了些,所以再补充成为:

COMPOSITE_OPERATOR
	:	'==' | '!=' |
		 '++' | '--' | 
		 '<<' | '>>' |
		 '&&' | '||' |
		 '+=' | '-=' | '*=' | '/=' | '%=' | '<<=' | '>>=' | '&=' | '^=' | '|=';

3.然后又看到其中有个:

member selection的"->"

感觉好像C语言中,貌似没有这个用法。

不过又想起来了,原来是结构体指针,去获取其中的成员的时候,的确是:

structPointer->someField

的写法的。

但是,考虑到EDDL中的C,是C的subset子集,不支持指针的,所以"->"也就可以忽略了。

4.不过,倒是又参考:

http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

看到还有其他的特殊的操作符的:

Member pointed to by b of object pointed to by a[f]a->*b
Member pointed to by b of object aa.*b

但都不是标准的C中语法,所以此处也可以忽略。

5.另外也注意到,这种:

delete[] a

或C#的

string[] strArr;

中的"[]",

以及

域scope的"::"

都是C语言中,本身没有的,所以可以忽略。

6.后来又添了些别的,最后是:

COMPOSITE_OPERATOR
	:	'==' | '!=' |
		'<=' | '>=' |
		'&&' | '||' |
		'++' | '--' |
		'<<' | '>>' |
		'+=' | '-=' | '*=' | '/=' | '%=' | '<<=' | '>>=' | '&=' | '^=' | '|=';

【总结】

不总结不知道,结果还真的发现,操作符方面,C本身的,组合(复合)类的操作符,本身就也还是不少的。

转载请注明:在路上 » 【整理】C语言中的复合(或组合)操作符

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.203 seconds, using 22.14MB memory