ROSE42 ::= #ignore(blanks) #continue header design #empty; header ::= '(' #continue ignoreContent ')'; design ::= '(' #continue; #readIdentifier:"object" #readIdentifier:"Design" classCategory ignoreContent; classCategory ::= => local iBraces; searchObject("Class_Category", iBraces); [classCategory]* [class]* closeBraces(iBraces) ; searchObject(sObject : value, iBraces : node) ::= [#readCString | '|' ->'\n' | ~['(' | ')']]* '(' [ #readIdentifier:"object" #readIdentifier:sName #check(sName == sObject) | searchObject(sObject) ] => increment(iBraces); ; //--------------------------------- // Some useful clauses as utilities //--------------------------------- ignoreContent ::= ['(' #continue ignoreContent ')' | #readCString | '|' ->'\n' | ~')']*; closeBraces(iBraces : value) ::= #check($decrement(iBraces) < 0) | #continue ignoreContent closeBraces(iBraces) ')';