<div dir="ltr">Hi everyone!<div>I hope that I'm querying the correct mailing list about my question.</div><div><br></div><div>I work as a teaching assistant at the Hebrew University, teaching C and C++. As part of our course, we ask the students to submit C and C++ exercises which we grade (both manually and automatically).</div><div><br></div><div>When grading students exercises, we check the validity of their code. For example,</div><div><ul><li>We check if the students didn't forget to use include safe-guard;</li><li>If the students used non-safe functions, which we consider forbidden to use (in addition, sometimes we explicitly tell students not to use set of predefined functions or C++ classes, as the exercises ask them to implement this set of functions).</li><li>If the students didn't include a forbidden header;</li><li>If the students didn't use a #pragma statement to bypass our compilation instructions;</li><li>C++: If the students remembered to use "const" when required, and to pass parameters by reference when needed;</li><li>C++: that the students returned lvalue when needed and rvalue when needed etc.</li><li>C++: When writing an iterator, if it was implemented correctly (a.k.a, according to Input/Output/Forward/Bidirectional/Random Access iterator rules + using iterator traits).</li></ul><div>Right now these tests are being done by a human. As our classes formed from 300 to 600 students (next semester we'll have 650...) it'll be really hard and non-efficient to do it by hand. Thus I thought it might be a good idea to automate these checks too.</div></div><div><br></div><div>Initially, I thought to write that with Python using ANTLr (creating an AST for both the Preprocessing stage and the C stage and just iterating over them), but at the middle of programming, I came across the Static Analyser API of Clang and thought I should switch to it, as it seems very mature and well fit for our needs.</div><div><br></div><div>Before diving deeply into clang, I'd love to hear from you, who have experience in clang and LLVM dev, if I'm on the right track, and can actually achieve my goal using clang, or I should stick with my previous attempt. Our end goal is a program that we can run, send the path to the student exercise, and get the errors that she had so that we can reduce points accordingly. </div><div><br></div><div>Thank you very much!</div><div>Yahav.</div></div>