【背景】
用antlr要去解析EDDL,其中的METHOD中的DEFINITION部分是c语言的子集。
想要匹配其中的组合字符串,类似于++,–,+=,-=等等之类的组合字符。
想要搞清楚,所有的,这类的字符,有哪些。
【解决过程】
1.参考:
加上自己想到的,已经可以写出这些了:COMPOSITE_OPERATOR
:'==' |
'++' | '--' |
'+=' | '-=' | '*=' | '/=' | '%=' | '<<=' | '>>=' | '&=' | '^=' | '|=';
2.另外,又觉得未必是完整的,所以再去找找资料。
后来是参考wiki:
才发现漏了些,所以再补充成为:COMPOSITE_OPERATOR
:'==' | '!=' |
'++' | '--' |
'<>' |
'&&' | '||' |
'+=' | '-=' | '*=' | '/=' | '%=' | '<<=' | '>>=' | '&=' | '^=' | '|=';
3.然后又看到其中有个:
member selection的"->"
感觉好像C语言中,貌似没有这个用法。
不过又想起来了,原来是结构体指针,去获取其中的成员的时候,的确是:
structPointer->someField
的写法的。
但是,考虑到EDDL中的C,是C的subset子集,不支持指针的,所以"->"也就可以忽略了。
4.不过,倒是又参考:
看到还有其他的特殊的操作符的:Member pointed to bybof object pointed to byaa->*b
Member pointed to bybof objectaa.*b
但都不是标准的C中语法,所以此处也可以忽略。
5.另外也注意到,这种:delete[] a
或C#的string[] strArr;
中的"[]",
以及
域scope的"::"
都是C语言中,本身没有的,所以可以忽略。
6.后来又添了些别的,最后是:COMPOSITE_OPERATOR
:'==' | '!=' |
'<=' | '>=' |
'&&' | '||' |
'++' | '--' |
'<>' |
'+=' | '-=' | '*=' | '/=' | '%=' | '<<=' | '>>=' | '&=' | '^=' | '|=';
【总结】
不总结不知道,结果还真的发现,操作符方面,C本身的,组合(复合)类的操作符,本身就也还是不少的。