【背景】
用antlr要去解析EDDL,其中的METHOD中的DEFINITION部分是c语言的子集。
想要匹配其中的组合字符串,类似于++,–,+=,-=等等之类的组合字符。
想要搞清楚,所有的,这类的字符,有哪些。
【解决过程】
1.参考:
加上自己想到的,已经可以写出这些了:
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
看到还有其他的特殊的操作符的:
|
但都不是标准的C中语法,所以此处也可以忽略。
5.另外也注意到,这种:
delete[] a |
或C#的
string[] strArr; |
中的"[]",
以及
域scope的"::"
都是C语言中,本身没有的,所以可以忽略。
6.后来又添了些别的,最后是:
COMPOSITE_OPERATOR : '==' | '!=' | '<=' | '>=' | '&&' | '||' | '++' | '--' | '<<' | '>>' | '+=' | '-=' | '*=' | '/=' | '%=' | '<<=' | '>>=' | '&=' | '^=' | '|=';
【总结】
不总结不知道,结果还真的发现,操作符方面,C本身的,组合(复合)类的操作符,本身就也还是不少的。
转载请注明:在路上 » 【整理】C语言中的复合(或组合)操作符