Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision 2ae16219feb24b7831c256ceb22824dfcf97ebc9)
+++ src/Parser/ExpressionNode.cc	(revision 9a705dc89354e53ad54ff8ee372e6cc20c210e1e)
@@ -414,4 +414,8 @@
 } // build_cast
 
+Expression * build_keyword_cast( KeywordCastExpr::Target target, ExpressionNode * expr_node ) {
+	return new KeywordCastExpr( maybeMoveBuild< Expression >(expr_node), target );
+}
+
 Expression * build_virtual_cast( DeclarationNode * decl_node, ExpressionNode * expr_node ) {
 	return new VirtualCastExpr( maybeMoveBuild< Expression >( expr_node ), maybeMoveBuildType( decl_node ) );
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 2ae16219feb24b7831c256ceb22824dfcf97ebc9)
+++ src/Parser/ParseNode.h	(revision 9a705dc89354e53ad54ff8ee372e6cc20c210e1e)
@@ -179,4 +179,5 @@
 
 Expression * build_cast( DeclarationNode * decl_node, ExpressionNode * expr_node );
+Expression * build_keyword_cast( KeywordCastExpr::Target target, ExpressionNode * expr_node );
 Expression * build_virtual_cast( DeclarationNode * decl_node, ExpressionNode * expr_node );
 Expression * build_fieldSel( ExpressionNode * expr_node, Expression * member );
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 2ae16219feb24b7831c256ceb22824dfcf97ebc9)
+++ src/Parser/parser.yy	(revision 9a705dc89354e53ad54ff8ee372e6cc20c210e1e)
@@ -688,9 +688,9 @@
 		{ $$ = new ExpressionNode( build_cast( $2, $4 ) ); }
 	| '(' COROUTINE '&' ')' cast_expression				// CFA
-		{ SemanticError( yylloc, "coroutine cast is currently unimplemented." ); $$ = nullptr; }
+		{ $$ = new ExpressionNode( build_keyword_cast( KeywordCastExpr::Coroutine, $5 ) ); }
 	| '(' THREAD '&' ')' cast_expression				// CFA
-		{ SemanticError( yylloc, "monitor cast is currently unimplemented." ); $$ = nullptr; }
+		{ $$ = new ExpressionNode( build_keyword_cast( KeywordCastExpr::Thread, $5 ) ); }
 	| '(' MONITOR '&' ')' cast_expression				// CFA
-		{ SemanticError( yylloc, "thread cast is currently unimplemented." ); $$ = nullptr; }
+		{ $$ = new ExpressionNode( build_keyword_cast( KeywordCastExpr::Monitor, $5 ) ); }
 		// VIRTUAL cannot be opt because of look ahead issues
 	| '(' VIRTUAL ')' cast_expression					// CFA
