Unless I missed any there are 123 lexical elements to a Java source code file. So I suppose I will be glad I am doing it this way based on the entire structure rather than individual elements because it is so complex. I will just need to write the code that parses each individual element and determines what is to be done accordingly. However it should be accurate. I suppose what I can do despite a loss of speed would be to have exceptions thrown that are thrown when something is not what is to be expected in a place. So for example in CompilationUnit it will try to read Annotations but if there are none then it will throw an exception that the given fragment has failed. So this would be an ImproperStructureException of sorts. The only problem would be if the structure of the file is not correct to begin with. So I suppose it would then depend on return values to see if it could parse something there or similar.