LL grammars can also be parsed by recursive descent parsers. LALR parsers handle more grammars than SLR parsers. These languages assist with generating lexical analyzers and parsers for context-free grammars. These parsers can run several times faster than the generic parser loop in table-driven parsers. ANTLR can generate lexers, parsers, tree parsers, and combined lexer-parsers. LC parsers have smaller parse tables than LALR parsers and better error diagnostics. ANTLR provides a single consistent notation for specifying lexers, parsers, and tree parsers. These are recognizers that process abstract syntax trees, which can be automatically generated by parsers. The term compiler-compiler refers to tools used to create parsers that perform syntax analysis. The generated parsers are portable&colon; they do not require any specific compilers. There are no widely used generators for deterministic LC parsers. OS commands; XML parsers, SMTP headers, program arguments, etc. YAML emitters and parsers exist for many popular languages. The fastest parsers use generated assembler code. One example application of recursion is in parsers for programming languages.