title: What is the difference between an Abstract Syntax Tree and a Concrete Syntax Tree?
body: <p>I've been reading a bit about how interpreters/compilers work, and one area where I'm getting confused is the difference between an AST and a CST.  My understanding is that the parser makes a CST, hands it to the semantic analyzer which turns it into an AST.  However, my understanding is that the semantic analyzer simply ensures that rules are followed.  I don't really understand why it would actually make any changes to make it abstract rather than concrete.</p>
  
  <p>Is there something that I'm missing about the semantic analyzer, or is the difference between an AST and  CST somewhat artificial?</p>