A Fully Automatic Approach to the Assessment of Programming Assignments