Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision 6a99803ef3fa4a0698294e89b800975a2e48a460)
+++ src/Parser/lex.ll	(revision a5040fe1b04eee9b39e6929877b6b62af7ec64a5)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Tue Oct  6 18:15:41 2020
- * Update Count     : 743
+ * Last Modified On : Wed Feb 17 08:38:13 2021
+ * Update Count     : 752
  */
 
@@ -221,6 +221,6 @@
 break			{ KEYWORD_RETURN(BREAK); }
 case			{ KEYWORD_RETURN(CASE); }
-catch			{ KEYWORD_RETURN(CATCH); }				// CFA
-catchResume		{ KEYWORD_RETURN(CATCHRESUME); }		// CFA
+catch			{ QKEYWORD_RETURN(CATCH); }				// CFA
+catchResume		{ QKEYWORD_RETURN(CATCHRESUME); }		// CFA
 char			{ KEYWORD_RETURN(CHAR); }
 choose			{ KEYWORD_RETURN(CHOOSE); }				// CFA
@@ -247,5 +247,6 @@
 fallthrough		{ KEYWORD_RETURN(FALLTHROUGH); }		// CFA
 fallthru		{ KEYWORD_RETURN(FALLTHRU); }			// CFA
-finally			{ KEYWORD_RETURN(FINALLY); }			// CFA
+finally			{ QKEYWORD_RETURN(FINALLY); }			// CFA
+fixup			{ QKEYWORD_RETURN(FIXUP); }				// CFA
 float			{ KEYWORD_RETURN(FLOAT); }
 __float80		{ KEYWORD_RETURN(uuFLOAT80); }			// GCC
@@ -287,5 +288,7 @@
 or				{ QKEYWORD_RETURN(WOR); }				// CFA
 otype			{ KEYWORD_RETURN(OTYPE); }				// CFA
+recover			{ QKEYWORD_RETURN(RECOVER); }			// CFA
 register		{ KEYWORD_RETURN(REGISTER); }
+report			{ KEYWORD_RETURN(THROWRESUME); }		// CFA
 restrict		{ KEYWORD_RETURN(RESTRICT); }			// C99
 __restrict		{ KEYWORD_RETURN(RESTRICT); }			// GCC
@@ -324,6 +327,6 @@
 __volatile		{ KEYWORD_RETURN(VOLATILE); }			// GCC
 __volatile__	{ KEYWORD_RETURN(VOLATILE); }			// GCC
-waitfor			{ KEYWORD_RETURN(WAITFOR); }
-when			{ KEYWORD_RETURN(WHEN); }
+waitfor			{ KEYWORD_RETURN(WAITFOR); }			// CFA
+when			{ KEYWORD_RETURN(WHEN); }				// CFA
 while			{ KEYWORD_RETURN(WHILE); }
 with			{ KEYWORD_RETURN(WITH); }				// CFA
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 6a99803ef3fa4a0698294e89b800975a2e48a460)
+++ src/Parser/parser.yy	(revision a5040fe1b04eee9b39e6929877b6b62af7ec64a5)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb  3 18:30:12 2021
-// Update Count     : 4700
+// Last Modified On : Wed Feb 17 09:03:07 2021
+// Update Count     : 4722
 //
 
@@ -282,12 +282,12 @@
 %token ATTRIBUTE EXTENSION								// GCC
 %token IF ELSE SWITCH CASE DEFAULT DO WHILE FOR BREAK CONTINUE GOTO RETURN
-%token CHOOSE DISABLE ENABLE FALLTHRU FALLTHROUGH TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT WITH WHEN WAITFOR // CFA
+%token CHOOSE DISABLE ENABLE FALLTHRU FALLTHROUGH TRY THROW THROWRESUME AT WITH WHEN WAITFOR // CFA
 %token ASM												// C99, extension ISO/IEC 9899:1999 Section J.5.10(1)
 %token ALIGNAS ALIGNOF GENERIC STATICASSERT				// C11
 
 // names and constants: lexer differentiates between identifier and typedef names
-%token<tok> IDENTIFIER			QUOTED_IDENTIFIER		TYPEDEFname				TYPEGENname
-%token<tok> TIMEOUT				WOR
-%token<tok> INTEGERconstant		CHARACTERconstant		STRINGliteral
+%token<tok> IDENTIFIER		QUOTED_IDENTIFIER	TYPEDEFname		TYPEGENname
+%token<tok> TIMEOUT			WOR					CATCH			RECOVER			CATCHRESUME		FIXUP		FINALLY		// CFA
+%token<tok> INTEGERconstant	CHARACTERconstant	STRINGliteral
 %token<tok> DIRECTIVE
 // Floating point constant is broken into three kinds of tokens because of the ambiguity with tuple indexing and
@@ -462,8 +462,14 @@
 // Order of these lines matters (low-to-high precedence). THEN is left associative over WOR/TIMEOUT/ELSE, WOR is left
 // associative over TIMEOUT/ELSE, and TIMEOUT is left associative over ELSE.
-%precedence THEN	// rule precedence for IF/WAITFOR statement
-%precedence WOR		// token precedence for start of WOR in WAITFOR statement
-%precedence TIMEOUT	// token precedence for start of TIMEOUT in WAITFOR statement
-%precedence ELSE	// token precedence for start of else clause in IF/WAITFOR statement
+%precedence THEN		// rule precedence for IF/WAITFOR statement
+%precedence WOR			// token precedence for start of WOR in WAITFOR statement
+%precedence TIMEOUT		// token precedence for start of TIMEOUT in WAITFOR statement
+%precedence CATCH		// token precedence for start of TIMEOUT in WAITFOR statement
+%precedence RECOVER		// token precedence for start of TIMEOUT in WAITFOR statement
+%precedence CATCHRESUME	// token precedence for start of TIMEOUT in WAITFOR statement
+%precedence FIXUP		// token precedence for start of TIMEOUT in WAITFOR statement
+%precedence FINALLY		// token precedence for start of TIMEOUT in WAITFOR statement
+%precedence ELSE		// token precedence for start of else clause in IF/WAITFOR statement
+
 
 // Handle shift/reduce conflict for generic type by shifting the '(' token. For example, this string is ambiguous:
@@ -544,4 +550,9 @@
 	TIMEOUT
 	| WOR
+	| CATCH
+	| RECOVER
+	| CATCHRESUME
+	| FIXUP
+	| FINALLY
 	;
 
@@ -1366,5 +1377,5 @@
 
 exception_statement:
-	TRY compound_statement handler_clause
+	TRY compound_statement handler_clause 					%prec THEN
 		{ $$ = new StatementNode( build_try( $2, $3, 0 ) ); }
 	| TRY compound_statement finally_clause
@@ -1389,5 +1400,7 @@
 handler_key:
 	CATCH										{ $$ = CatchStmt::Terminate; }
+	| RECOVER									{ $$ = CatchStmt::Terminate; }
 	| CATCHRESUME								{ $$ = CatchStmt::Resume; }
+	| FIXUP										{ $$ = CatchStmt::Resume; }
 	;
 
