Parsing: input = concrete syntax of a program, as a string or file output = corresponding abstract syntax example input { cat = 123; dog=(cat-57); print ((dog * 2)+3)} output (SEQUENCE (ASSIGN CAT (NUMBER 123)) (SEQUENCE (ASSIGN DOG (EXPR - (VARIABLE CAT) (NUMBER 57))) (SEQUENCE (PRINT (EXPR + (EXPR * (VARIABLE DOG) (NUMBER 2)) (NUMBER 3))) (ENDSEQUENCE))))