&gt;You can make pretty much anything seem equivalent if you abstract it enough. You&#x27;ve basically just equated MVC with any program that does IO. I can&#x27;t see how that&#x27;s a useful thing to do.<p><i>shrug</i> MVC &#x2F; MVVM is that simple.<p>&gt;why would you represent a transformation (something inherently a verb&#x2F;action) as a model? &quot;Model - Input -&gt; output format transformation&quot;. It operates on models, it&#x27;s not A model.<p>Models are not limited to being data stores. Models are responsible for doing work, so-called business logic. Controllers &#x2F; ViewModels work with Views to take in user input and apply it to the models, then take the updated model and give it back to the user.<p>&gt;How do I represent a lexer as a view?<p>The lexer is part of the model.<p>The view would be what the compiler uses for input&#x2F;output: for a CLI compiler it would be the function that reads stdin or the filesystem + the function that writes to stdout and the filesystem, for a compiler hosted in an IDE or webpage would be the compiler library interface (ie: a programmatic way to give it files or strings and receive output + errors), and so on. Separate views that only know how to take in user input and display user output, interfacing with a common controller&#x2F;viewmodel + model.<p>Edit: Minor clarifications.