generate strings by repeated replacement of non-terminals with string of terminals and non-terminals write start symbol (non-terminal) replace non-terminal with terminal