ROOT@0..789
  DEF_MODULE_TEMPLATE@0..465
    MODULE_KW@0..6 "module"
    WHITESPACE@6..7 " "
    TEMPLATE_KW@7..15 "template"
    WHITESPACE@15..16 " "
    NAME@16..20
      IDENT@16..20 "Tmpl"
    TEMPLATE_PARAM_LIST@20..269
      LEFT_PAREN@20..21 "("
      EOL@21..22 "\n"
      WHITESPACE@22..26 "    "
      PRE_ANNOTATION@26..55 "@ Constant template p ..."
      EOL@55..56 "\n"
      WHITESPACE@56..60 "    "
      TEMPLATE_PARAM@60..80
        CONSTANT_KW@60..68 "constant"
        WHITESPACE@68..69 " "
        NAME@69..70
          IDENT@69..70 "c"
        COLON@70..71 ":"
        WHITESPACE@71..72 " "
        TYPE_NAME@72..80
          QUAL_IDENT@72..80
            IDENT@72..80 "SomeType"
      WHITESPACE@80..81 " "
      POST_ANNOTATION@81..102 "@< Constant parameter"
      EOL@102..103 "\n"
      WHITESPACE@103..107 "    "
      PRE_ANNOTATION@107..132 "@ Type template param ..."
      EOL@132..133 "\n"
      WHITESPACE@133..137 "    "
      TEMPLATE_PARAM@137..151
        TYPE_KW@137..141 "type"
        WHITESPACE@141..142 " "
        NAME@142..151
          IDENT@142..151 "TypeParam"
      WHITESPACE@151..152 " "
      POST_ANNOTATION@152..169 "@< Type parameter"
      EOL@169..170 "\n"
      WHITESPACE@170..174 "    "
      PRE_ANNOTATION@174..213 "@ Interface instance  ..."
      EOL@213..214 "\n"
      WHITESPACE@214..218 "    "
      TEMPLATE_PARAM@218..245
        INSTANCE_KW@218..226 "instance"
        WHITESPACE@226..227 " "
        NAME@227..231
          IDENT@227..231 "inst"
        COLON@231..232 ":"
        WHITESPACE@232..233 " "
        QUAL_IDENT@233..245
          IDENT@233..245 "InterfaceDef"
      WHITESPACE@245..246 " "
      POST_ANNOTATION@246..267 "@< Instance parameter"
      EOL@267..268 "\n"
      RIGHT_PAREN@268..269 ")"
    WHITESPACE@269..270 " "
    MODULE_MEMBER_LIST@270..465
      LEFT_CURLY@270..271 "{"
      EOL@271..273 "\n\n"
      WHITESPACE@273..277 "    "
      PRE_ANNOTATION@277..284 "@ Array"
      EOL@284..285 "\n"
      WHITESPACE@285..289 "    "
      DEF_ARRAY@289..314
        ARRAY_KW@289..294 "array"
        WHITESPACE@294..295 " "
        NAME@295..298
          IDENT@295..298 "Arr"
        WHITESPACE@298..299 " "
        EQUALS@299..300 "="
        WHITESPACE@300..301 " "
        INDEX_OR_SIZE@301..304
          LEFT_SQUARE@301..302 "["
          EXPR@302..303
            EXPR_LITERAL@302..303
              LITERAL_INT@302..303 "3"
          RIGHT_SQUARE@303..304 "]"
        WHITESPACE@304..305 " "
        TYPE_NAME@305..314
          QUAL_IDENT@305..314
            IDENT@305..314 "TypeParam"
      EOL@314..316 "\n\n"
      WHITESPACE@316..320 "    "
      PRE_ANNOTATION@320..330 "@ Topology"
      EOL@330..331 "\n"
      WHITESPACE@331..335 "    "
      DEF_TOPOLOGY@335..377
        TOPOLOGY_KW@335..343 "topology"
        WHITESPACE@343..344 " "
        NAME@344..347
          IDENT@344..347 "Top"
        WHITESPACE@347..348 " "
        TOPOLOGY_MEMBER_LIST@348..377
          LEFT_CURLY@348..349 "{"
          EOL@349..350 "\n"
          WHITESPACE@350..358 "        "
          SPEC_INSTANCE@358..371
            INSTANCE_KW@358..366 "instance"
            WHITESPACE@366..367 " "
            QUAL_IDENT@367..371
              IDENT@367..371 "inst"
          EOL@371..372 "\n"
          WHITESPACE@372..376 "    "
          RIGHT_CURLY@376..377 "}"
      EOL@377..379 "\n\n"
      WHITESPACE@379..383 "    "
      PRE_ANNOTATION@383..398 "@ State machine"
      EOL@398..399 "\n"
      WHITESPACE@399..403 "    "
      DEF_STATE_MACHINE@403..462
        STATE_KW@403..408 "state"
        WHITESPACE@408..409 " "
        MACHINE_KW@409..416 "machine"
        WHITESPACE@416..417 " "
        NAME@417..418
          IDENT@417..418 "M"
        WHITESPACE@418..419 " "
        STATE_MACHINE_MEMBER_LIST@419..462
          LEFT_CURLY@419..420 "{"
          EOL@420..421 "\n"
          WHITESPACE@421..427 "      "
          DEF_STATE@427..434
            STATE_KW@427..432 "state"
            WHITESPACE@432..433 " "
            NAME@433..434
              IDENT@433..434 "S"
          EOL@434..435 "\n"
          WHITESPACE@435..441 "      "
          SPEC_INITIAL_TRANSITION@441..456
            INITIAL_KW@441..448 "initial"
            WHITESPACE@448..449 " "
            TRANSITION_EXPR@449..456
              ENTER_KW@449..454 "enter"
              WHITESPACE@454..455 " "
              QUAL_IDENT@455..456
                IDENT@455..456 "S"
          EOL@456..457 "\n"
          WHITESPACE@457..461 "    "
          RIGHT_CURLY@461..462 "}"
      EOL@462..464 "\n\n"
      RIGHT_CURLY@464..465 "}"
  EOL@465..467 "\n\n"
  DEF_MODULE@467..620
    MODULE_KW@467..473 "module"
    WHITESPACE@473..474 " "
    NAME@474..484
      IDENT@474..484 "Unexpanded"
    WHITESPACE@484..485 " "
    MODULE_MEMBER_LIST@485..620
      LEFT_CURLY@485..486 "{"
      EOL@486..488 "\n\n"
      WHITESPACE@488..490 "  "
      PRE_ANNOTATION@490..522 "@ Unexpanded expansio ..."
      EOL@522..523 "\n"
      WHITESPACE@523..525 "  "
      SPEC_TEMPLATE_EXPAND@525..581
        EXPAND_KW@525..531 "expand"
        WHITESPACE@531..532 " "
        QUAL_IDENT@532..536
          IDENT@532..536 "Tmpl"
        TEMPLATE_ARG_LIST@536..581
          LEFT_PAREN@536..537 "("
          TEMPLATE_ARG@537..548
            CONSTANT_KW@537..545 "constant"
            WHITESPACE@545..546 " "
            EXPR@546..548
              EXPR_LITERAL@546..548
                LITERAL_INT@546..548 "10"
          COMMA@548..549 ","
          WHITESPACE@549..550 " "
          TEMPLATE_ARG@550..559
            TYPE_KW@550..554 "type"
            WHITESPACE@554..555 " "
            TYPE_NAME@555..559
              QUAL_IDENT@555..559
                IDENT@555..559 "Type"
          COMMA@559..560 ","
          WHITESPACE@560..561 " "
          TEMPLATE_ARG@561..580
            INSTANCE_KW@561..569 "instance"
            WHITESPACE@569..570 " "
            QUAL_IDENT@570..580
              DOT@570..571 "."
              IDENT@571..580 "instance1"
          RIGHT_PAREN@580..581 ")"
      EOL@581..582 "\n"
      WHITESPACE@582..584 "  "
      POST_ANNOTATION@584..617 "@< Unexpanded expansi ..."
      EOL@617..619 "\n\n"
      RIGHT_CURLY@619..620 "}"
  EOL@620..622 "\n\n"
  DEF_MODULE@622..788
    MODULE_KW@622..628 "module"
    WHITESPACE@628..629 " "
    NAME@629..637
      IDENT@629..637 "Expanded"
    WHITESPACE@637..638 " "
    MODULE_MEMBER_LIST@638..788
      LEFT_CURLY@638..639 "{"
      EOL@639..641 "\n\n"
      WHITESPACE@641..643 "  "
      PRE_ANNOTATION@643..673 "@ Expanded expansion  ..."
      EOL@673..674 "\n"
      WHITESPACE@674..676 "  "
      SPEC_TEMPLATE_EXPAND@676..751
        EXPAND_KW@676..682 "expand"
        WHITESPACE@682..683 " "
        QUAL_IDENT@683..687
          IDENT@683..687 "Tmpl"
        TEMPLATE_ARG_LIST@687..732
          LEFT_PAREN@687..688 "("
          TEMPLATE_ARG@688..699
            CONSTANT_KW@688..696 "constant"
            WHITESPACE@696..697 " "
            EXPR@697..699
              EXPR_LITERAL@697..699
                LITERAL_INT@697..699 "10"
          COMMA@699..700 ","
          WHITESPACE@700..701 " "
          TEMPLATE_ARG@701..710
            TYPE_KW@701..705 "type"
            WHITESPACE@705..706 " "
            TYPE_NAME@706..710
              QUAL_IDENT@706..710
                IDENT@706..710 "Type"
          COMMA@710..711 ","
          WHITESPACE@711..712 " "
          TEMPLATE_ARG@712..731
            INSTANCE_KW@712..720 "instance"
            WHITESPACE@720..721 " "
            QUAL_IDENT@721..731
              DOT@721..722 "."
              IDENT@722..731 "instance1"
          RIGHT_PAREN@731..732 ")"
        WHITESPACE@732..733 " "
        MODULE_MEMBER_LIST@733..751
          LEFT_CURLY@733..734 "{"
          WHITESPACE@734..735 " "
          DEF_CONSTANT@735..749
            CONSTANT_KW@735..743 "constant"
            WHITESPACE@743..744 " "
            NAME@744..745
              IDENT@744..745 "a"
            WHITESPACE@745..746 " "
            EQUALS@746..747 "="
            WHITESPACE@747..748 " "
            EXPR@748..749
              EXPR_LITERAL@748..749
                LITERAL_INT@748..749 "0"
          WHITESPACE@749..750 " "
          RIGHT_CURLY@750..751 "}"
      EOL@751..752 "\n"
      WHITESPACE@752..754 "  "
      POST_ANNOTATION@754..785 "@< Expanded expansion ..."
      EOL@785..787 "\n\n"
      RIGHT_CURLY@787..788 "}"
  EOL@788..789 "\n"
