Question: My guess is it just made parsing easier, but I can't see exactly why.

So what does this have ...

```
do
{
  some stuff
}
while(test);

more stuff

```

that's better than ...

```
do
{
  some stuff
}
while(test)

more stuff

```

Answer: 
While I don't know the answer, consistency seems like the best argument. Every statement group in C/C++ is either terminated by 

1. A semicolon
2. A brace

Why create a construct which does neither?
My answer is that, the compiler may get confusion, when we didn't include the semicolon in the termination of `do.....while();` loop. Without this it is not clear about:

1. when the do ends?
2. If the while may a separate loop followed immediately after do loop.

That's why we include semicolon in the end of `do......while` loop, to indicate the loop is terminating here if the condition is false.