Language tests are by nature open-ended - You can't write all possible combinations of input so don't try. The key to surviving it it to start small with something that is readily extensible and dynamic enough to easily regenerate the entire test suite if necessary to include recent changes (and unexpected insights) . Grow from the base - verifying a single-line comment for example, to more complex constructs involving multiple files.
Divide and conquer:
1. The source is text based, so you can use Perl to create Perl input files. Write routines to create testable combinations.
2. The compiler can be driven by an automation tool. Use that tool (or native abilities) to read in each source, initiate the compiler, and capture the results. Review the results manually (first pass) to establish a baseline set.
3. Use document compare routines to expose differences of the recent run to to each respective baseline. Ignore tests that pass; analyze those that fail. Initially go for breadth; tackle depth later based on current results.