---input---
module CkCallback {
	readonly CProxy_ckcallback_group _ckcallbackgroup;
	message CkCcsRequestMsg {
		char data[];
 	};
	message CkDataMsg {
		char data[];
	};
	
	mainchare ckcallback_main {
		entry ckcallback_main(CkArgMsg *m);
	};
	group [migratable] ckcallback_group : IrrGroup {
		entry ckcallback_group();
		entry void registerCcsCallback(char name[strlen(name)+1],
			CkCallback cb);
		entry void call(CkCallback c,CkMarshalledMessage msg);
		entry void call(CkCallback c, int length, char data[length]);
	};
};

---tokens---
'module'      Keyword
' '           Text
'CkCallback'  Name.Class
' '           Text
'{'           Punctuation
'\n'          Text

'\t'          Text
'readonly'    Keyword
' '           Text
'CProxy_ckcallback_group' Name
' '           Text
'_ckcallbackgroup' Name
';'           Punctuation
'\n'          Text

'\t'          Text
'message'     Keyword
' '           Text
'CkCcsRequestMsg' Name
' '           Text
'{'           Punctuation
'\n'          Text

'\t\t'        Text
'char'        Keyword.Type
' '           Text
'data'        Name
'['           Punctuation
']'           Punctuation
';'           Punctuation
'\n'          Text

' \t'         Text
'}'           Punctuation
';'           Punctuation
'\n'          Text

'\t'          Text
'message'     Keyword
' '           Text
'CkDataMsg'   Name
' '           Text
'{'           Punctuation
'\n'          Text

'\t\t'        Text
'char'        Keyword.Type
' '           Text
'data'        Name
'['           Punctuation
']'           Punctuation
';'           Punctuation
'\n'          Text

'\t'          Text
'}'           Punctuation
';'           Punctuation
'\n'          Text

'\t\n\t'      Text
'mainchare'   Keyword
' '           Text
'ckcallback_main' Name
' '           Text
'{'           Punctuation
'\n'          Text

'\t\t'        Text
'entry'       Keyword
' '           Text
'ckcallback_main' Name.Function
'('           Punctuation
'CkArgMsg'    Name
' '           Text
'*'           Operator
'm'           Name
')'           Punctuation
';'           Punctuation
'\n'          Text

'\t'          Text
'}'           Punctuation
';'           Punctuation
'\n'          Text

'\t'          Text
'group'       Keyword
' '           Text
'['           Punctuation
'migratable'  Keyword
']'           Punctuation
' '           Text
'ckcallback_group' Name.Label
' '           Text
':'           Punctuation
' '           Text
'IrrGroup'    Name
' '           Text
'{'           Punctuation
'\n'          Text

'\t\t'        Text
'entry'       Keyword
' '           Text
'ckcallback_group' Name.Function
'('           Punctuation
')'           Punctuation
';'           Punctuation
'\n'          Text

'\t\t'        Text
'entry'       Keyword
' '           Text
'void'        Keyword.Type
' '           Text
'registerCcsCallback' Name
'('           Punctuation
'char'        Keyword.Type
' '           Text
'name'        Name
'['           Punctuation
'strlen'      Name
'('           Punctuation
'name'        Name
')'           Punctuation
'+'           Operator
'1'           Literal.Number.Integer
']'           Punctuation
','           Punctuation
'\n'          Text

'\t\t\t'      Text
'CkCallback'  Name
' '           Text
'cb'          Name
')'           Punctuation
';'           Punctuation
'\n'          Text

'\t\t'        Text
'entry'       Keyword
' '           Text
'void'        Keyword.Type
' '           Text
'call'        Name
'('           Punctuation
'CkCallback'  Name
' '           Text
'c'           Name
','           Punctuation
'CkMarshalledMessage' Name
' '           Text
'msg'         Name
')'           Punctuation
';'           Punctuation
'\n'          Text

'\t\t'        Text
'entry'       Keyword
' '           Text
'void'        Keyword.Type
' '           Text
'call'        Name
'('           Punctuation
'CkCallback'  Name
' '           Text
'c'           Name
','           Punctuation
' '           Text
'int'         Keyword.Type
' '           Text
'length'      Name
','           Punctuation
' '           Text
'char'        Keyword.Type
' '           Text
'data'        Name
'['           Punctuation
'length'      Name
']'           Punctuation
')'           Punctuation
';'           Punctuation
'\n'          Text

'\t'          Text
'}'           Punctuation
';'           Punctuation
'\n'          Text

'}'           Punctuation
';'           Punctuation
'\n'          Text
