_rule_def:
    // only an empty line is OK
|
    // recovery from errors is OK: continue at the next line
    error
|
    optMs_rule
|
    msCompound
;

    // each rule ends in a '\n'
_rule:                      
    _rule_def '\n' reset
//    {
//        if (d_scanner.endOfInput())
//            ACCEPT();
//    }
;                               
                                
    // there may be no rules
    // the scanner skips blanks, but returns '\n'
rules:
    rules _rule
|
    // empty
;

