Automatic Grading of Programming Assignments: An Approach Based on Formal Semantics | Synapse