code: private void eatSplicedRange(List segments) {
          Token token = tokenizer.peekToken(0);
          if (token == null) {// ∈
              return;
          }
          switch (token.getKind()) {
              case LITERAL_STRING:
                  segments.add(token.getData());
                  break;
              case LSQUARE:
                  tokenizer.nextToken();
                  List<?> list = new ArrayList<>();
                  eatRange(list);
                  if (list.isEmpty()) {
                      empty = true;
                  } else {
                      segments.add(list);
                  }
                  tokenizer.peekToken(0, TokenKind.RSQUARE);
                  break;
              default:
                  return;
          }
          if (tokenizer.hasMoreTokens()) {// ∈
              tokenizer.nextToken();
              eatSplicedRange(segments);
          }
      }
docs: SplicedRange -> (<PLAIN_STR> | "[" Range "]")(SplicedRange | ∈)