\section{Error handling} All syntactic and semantic errors cause parser exceptions to be thrown. In particular, the methods used to match tokens in the parser base class (match et al) throw §EdpgMismatchedToken§. The methods in the lexer base class used to match characters (match et al) throw analogous exceptions. \subsection{DPG exception hierarchy} DPG-generated parsers throw exceptions to signal recognition errors or other stream problems. All exceptions derive from EdpgException. The hierarchy is the following: \begin{verbatim} EdpgException EdpgMismatchedChar EdpgMismatchedToken EdpgSemantic \end{verbatim} \subsubsection{EdpgException} The EdpgException exception class is the base of all DPG generated exceptions. User defined exceptions must derive from this class. \subsubsection{EdpgMismatchedChar} This exception is thrown by the lexer when it is looking for a character, but finds a different one on the input stream. \subsubsection{EdpgMismatchedToken} This exception is thrown by the parser when it is looking for a token, but finds a different one on the input token stream. \subsubsection{EdpgSemantic} This exception is thrown by a validating semantic predicate. \subsection{Specifying exception handlers} DPG allows to specify specific exception handler to a given rule or alternative. The general form of an exception handler specification is: \begin{verbatim} ... except { code to handle exception } ... finally { code to handle exception } \end{verbatim} \subsubsection{Exception handler for a rule} The exception handler for a rule must be placed after the terminating semicolon. The handler can be either an §except§ block or a §finally§ block. The implementation of rule will be surrounded by a try block. \begin{verbatim} r : ... ; except { handler code } \end{verbatim} \subsubsection{Exception handler for an alternative} The exception handler of an alternative must be the last element of the alternative. Both exception handler blocks can be used. Every alternative that have exception block specified, will be surrounded by a §try...except/finally§ block. \begin{verbatim} r : alternative_1 ... except { handler code } | alternative_2 ... finally { handler code } ... | alternative_n ; \end{verbatim} \paragraph{Note:} It is not necessary to define exception handler for each alternative. \subsubsection{Default error handler in lexer} To skip every character that isn't recognized by any public lexer rule, specify §filter=true§ option for a lexer. That way, the parser doesn't have to deal with lexical errors and ask for another token.