It turns out I had misunderstood my assignment, sort of. The precedence rules I described are the ones presented in my course book, but since my primary concern is being compatible with the parser we were given from the teacher, I tried it on the code above, and it parses the assignment into the body as well.
The program I wanted to write should "simply" have been:
(while true do skip) ; x := y
But hey, at least it's compatible!