Natural language processing (NLP) is focused on developing systems that allow computers to communicate with humans using everyday language. NLP involves computational methods to aid understanding of human language. Communication for both speakers and hearers involves processes like intention, generation, perception, analysis, syntactic interpretation, semantic interpretation, and pragmatic interpretation. Natural language is highly ambiguous and must be disambiguated at syntax, semantics, and pragmatics levels. Ambiguities compound and generate many possible interpretations. Both top-down and bottom-up parsing are used to analyze syntax, but explore search spaces differently.