"Nothing" interpreter/compiler
This line here:


return EXIT_SUCCESS



Is equivalent to this:

return 0;


Which is automatically inserted by the compiler if it isn't found. In short, return EXIT_SUCCESS can be removed.

In addition, a few of your error messages don't include a newline at the end, as seen in this line here, and two other places:


std::cerr &lt;&lt; "compilation terminated.";



I'd just add a newline to the end of the output string to not annoy the user when the program completes/fails, like this:

std::cerr &lt;&lt; "compilation terminated.\n";


Instead of requiring the user to provide a file in the command line arguments, you can just do, well, nothing. This is the language Nothing after all. This means that this piece of code here:


if (argc &lt; 2)
{
    std::cerr &lt;&lt; "nothing: fatal error: no input files\n";
    std::cerr &lt;&lt; "compilation terminated.";
    return EXIT_FAILURE;
}



Can just become this:

if (argc &lt; 2)
{
    return 0;
}


Other than those two nitpicks, there really isn't much else for me to review here. As far as I can tell, you've followed the language specification just fine, and produced some readable code.