microsoft phoenix defines an "intermediate representation" (ir) for programs, using asts, control flow graphs, and an exception handling model. for any program to be handled by phoenix, it needs to be converted to this representation. the specification for these file type-specific converters, called "file readers" in phoenix terminology, is also specified. phoenix comes included with readers for portable executable binary files, cil and the output of the visual c++ front-end. readers for other languages can be written using the phoenix sdk, though separate tools such as lex and yacc need to be used to write the lexer and parser, respectively.