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).