A parser reads in the output of the lexical analyzer, and verifies the syntax of the language. If the input program is syntactically incorrect or has a type error, it generates errors and warnings. This is called semantic analysis. For example, the parser might complain about the example above, if it "had not" already seen codice_3 with its type adjective. The parser uses all the information to make a structure typically called an Abstract Syntax Tree (AST).