Core: handle conditions in preprocessor directives.
Core: Refactore rules to handle top-level source code.
Clean: Rename code_source in code_string.
Core/Fix: Add preprocessor visitor, improve/fix grammar.