Rule Template() {
   return Sequence(
       TEMPLATE,
       Optional(PUBLIC, Template.isPublic(true)),
       InvokableDeclaration(),
       Template.declaration());
 }
 Rule TemplateBody() {
   return Sequence(
       TextBlock(),
       Template.addParts(),
       ZeroOrMore(
           Sequence(
               Directive(), Template.addParts(),
               TextBlock(), Template.addParts())));
 }
 Rule TemplateDirective() {
   return Sequence(
       Template.builder(), TemplateStart(), TemplateBody(), TemplateEnd(), Template.build());
 }