For the compiler writer:
        
        
          - 
            Lexing: from a stream of characters to a stream of tokens.
          
 
          - 
            Parsing: from a stream of tokens to an abstract syntax tree.
          
 
        
        
          Lexer and parser generators exist and are normally used.
        
        
          Based on formalisms including:
        
        
          - 
            regular expressions
          
 
          - 
            finite-state automata
          
 
          - 
            context-free grammars and BNF / EBNF
          
 
          - 
            pushdown-stack automata
          
 
        
      

