Lisp starts with text. Plain old ascii (or utf-8) text. Bytes in a file or string with characters. The lisp interpreter or compiler scans this text and builds the next level: s-expressions.
This is a lump of linked lists essentially. The lisp interpreter slurps in text and constructs this data structure in memory, but otherwise doesn't do anything with it. The doing comes later when evaluating the structure and applying semantic meaning:
Here the lisp interpreter scans the "raw" data (linked lists) and tries to extract some meaning from them. For example, if the first item in the list being evaluated is a "token" (a word) this is assumed to be a function call.
Probably level 3 and 4 are mixed in interpreters, but in compilers they are separate. With compilers we have probably lost the original s-expression tree and are at this point it is byte code being executed by a real or virtual CPU.
In C we go from text file (level 1) directly to byte code (level 4) with generally no visibility on the intermediate steps. With special flags you can ask LLVM to dump the in-memory structure in step 2 to text.