Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 9997feea08f61a0a83b01b685254ad9d8e8cd771)
+++ src/Parser/ParseNode.h	(revision 1a3eab86f23dc0bb8709ff1a369ab2a3e9b1663e)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Feb 22 17:49:31 2018
-// Update Count     : 827
+// Last Modified On : Sun Apr 29 14:04:05 2018
+// Update Count     : 830
 //
 
@@ -332,5 +332,5 @@
 	bool hasEllipsis;
 	LinkageSpec::Spec linkage;
-	Expression *asmName;
+	Expression * asmName;
 	std::list< Attribute * > attributes;
 	InitializerNode * initializer;
@@ -417,4 +417,5 @@
 Statement * build_compound( StatementNode * first );
 Statement * build_asmstmt( bool voltile, Expression * instruction, ExpressionNode * output = nullptr, ExpressionNode * input = nullptr, ExpressionNode * clobber = nullptr, LabelNode * gotolabels = nullptr );
+Statement * build_dirstmt( std::string * directive );
 WaitForStmt * build_waitfor( ExpressionNode * target, StatementNode * stmt, ExpressionNode * when );
 WaitForStmt * build_waitfor( ExpressionNode * target, StatementNode * stmt, ExpressionNode * when, WaitForStmt * existing );
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 9997feea08f61a0a83b01b685254ad9d8e8cd771)
+++ src/Parser/StatementNode.cc	(revision 1a3eab86f23dc0bb8709ff1a369ab2a3e9b1663e)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:59:41 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Mar  8 14:31:32 2018
-// Update Count     : 348
+// Last Modified On : Sun Apr 29 14:21:45 2018
+// Update Count     : 353
 //
 
@@ -33,9 +33,9 @@
 
 
-StatementNode::StatementNode( DeclarationNode *decl ) {
+StatementNode::StatementNode( DeclarationNode * decl ) {
 	assert( decl );
-	DeclarationNode *agg = decl->extractAggregate();
+	DeclarationNode * agg = decl->extractAggregate();
 	if ( agg ) {
-		StatementNode *nextStmt = new StatementNode( new DeclStmt( maybeBuild< Declaration >( decl ) ) );
+		StatementNode * nextStmt = new StatementNode( new DeclStmt( maybeBuild< Declaration >( decl ) ) );
 		set_next( nextStmt );
 		if ( decl->get_next() ) {
@@ -53,14 +53,14 @@
 } // StatementNode::StatementNode
 
-StatementNode *StatementNode::append_last_case( StatementNode *stmt ) {
-	StatementNode *prev = this;
+StatementNode * StatementNode::append_last_case( StatementNode * stmt ) {
+	StatementNode * prev = this;
 	// find end of list and maintain previous pointer
 	for ( StatementNode * curr = prev; curr != nullptr; curr = (StatementNode *)curr->get_next() ) {
-		StatementNode *node = strict_dynamic_cast< StatementNode * >(curr);
+		StatementNode * node = strict_dynamic_cast< StatementNode * >(curr);
 		assert( dynamic_cast< CaseStmt * >(node->stmt.get()) );
 		prev = curr;
 	} // for
 	// convert from StatementNode list to Statement list
-	StatementNode *node = dynamic_cast< StatementNode * >(prev);
+	StatementNode * node = dynamic_cast< StatementNode * >(prev);
 	std::list< Statement * > stmts;
 	buildMoveList( stmt, stmts );
@@ -71,6 +71,6 @@
 }
 
-Statement *build_expr( ExpressionNode *ctl ) {
-	Expression *e = maybeMoveBuild< Expression >( ctl );
+Statement * build_expr( ExpressionNode * ctl ) {
+	Expression * e = maybeMoveBuild< Expression >( ctl );
 
 	if ( e )
@@ -80,6 +80,6 @@
 }
 
-Statement *build_if( IfCtl * ctl, StatementNode *then_stmt, StatementNode *else_stmt ) {
-	Statement *thenb, *elseb = 0;
+Statement * build_if( IfCtl * ctl, StatementNode * then_stmt, StatementNode * else_stmt ) {
+	Statement * thenb, * elseb = 0;
 	std::list< Statement * > branches;
 	buildMoveList< Statement, StatementNode >( then_stmt, branches );
@@ -116,5 +116,5 @@
 }
 
-Statement *build_switch( bool isSwitch, ExpressionNode *ctl, StatementNode *stmt ) {
+Statement * build_switch( bool isSwitch, ExpressionNode * ctl, StatementNode * stmt ) {
 	std::list< Statement * > branches;
 	buildMoveList< Statement, StatementNode >( stmt, branches );
@@ -131,14 +131,14 @@
 	return new SwitchStmt( maybeMoveBuild< Expression >(ctl), branches );
 }
-Statement *build_case( ExpressionNode *ctl ) {
+Statement * build_case( ExpressionNode * ctl ) {
 	std::list< Statement * > branches;
 	return new CaseStmt( maybeMoveBuild< Expression >(ctl), branches );
 }
-Statement *build_default() {
+Statement * build_default() {
 	std::list< Statement * > branches;
 	return new CaseStmt( nullptr, branches, true );
 }
 
-Statement *build_while( ExpressionNode *ctl, StatementNode *stmt, bool kind ) {
+Statement * build_while( ExpressionNode * ctl, StatementNode * stmt, bool kind ) {
 	std::list< Statement * > branches;
 	buildMoveList< Statement, StatementNode >( stmt, branches );
@@ -147,5 +147,5 @@
 }
 
-Statement *build_for( ForCtl *forctl, StatementNode *stmt ) {
+Statement * build_for( ForCtl * forctl, StatementNode * stmt ) {
 	std::list< Statement * > branches;
 	buildMoveList< Statement, StatementNode >( stmt, branches );
@@ -157,9 +157,9 @@
 	} // if
 
-	Expression *cond = 0;
+	Expression * cond = 0;
 	if ( forctl->condition != 0 )
 		cond = notZeroExpr( maybeMoveBuild< Expression >(forctl->condition) );
 
-	Expression *incr = 0;
+	Expression * incr = 0;
 	if ( forctl->change != 0 )
 		incr = maybeMoveBuild< Expression >(forctl->change);
@@ -169,18 +169,18 @@
 }
 
-Statement *build_branch( BranchStmt::Type kind ) {
+Statement * build_branch( BranchStmt::Type kind ) {
 	Statement * ret = new BranchStmt( "", kind );
 	return ret;
 }
-Statement *build_branch( std::string *identifier, BranchStmt::Type kind ) {
-	Statement * ret = new BranchStmt( *identifier, kind );
+Statement * build_branch( std::string * identifier, BranchStmt::Type kind ) {
+	Statement * ret = new BranchStmt( * identifier, kind );
 	delete identifier; 									// allocated by lexer
 	return ret;
 }
-Statement *build_computedgoto( ExpressionNode *ctl ) {
+Statement * build_computedgoto( ExpressionNode * ctl ) {
 	return new BranchStmt( maybeMoveBuild< Expression >(ctl), BranchStmt::Goto );
 }
 
-Statement *build_return( ExpressionNode *ctl ) {
+Statement * build_return( ExpressionNode * ctl ) {
 	std::list< Expression * > exps;
 	buildMoveList( ctl, exps );
@@ -188,5 +188,5 @@
 }
 
-Statement *build_throw( ExpressionNode *ctl ) {
+Statement * build_throw( ExpressionNode * ctl ) {
 	std::list< Expression * > exps;
 	buildMoveList( ctl, exps );
@@ -195,5 +195,5 @@
 }
 
-Statement *build_resume( ExpressionNode *ctl ) {
+Statement * build_resume( ExpressionNode * ctl ) {
 	std::list< Expression * > exps;
 	buildMoveList( ctl, exps );
@@ -202,5 +202,5 @@
 }
 
-Statement *build_resume_at( ExpressionNode *ctl, ExpressionNode *target ) {
+Statement * build_resume_at( ExpressionNode * ctl, ExpressionNode * target ) {
 	(void)ctl;
 	(void)target;
@@ -208,12 +208,12 @@
 }
 
-Statement *build_try( StatementNode *try_stmt, StatementNode *catch_stmt, StatementNode *finally_stmt ) {
+Statement * build_try( StatementNode * try_stmt, StatementNode * catch_stmt, StatementNode * finally_stmt ) {
 	std::list< CatchStmt * > branches;
 	buildMoveList< CatchStmt, StatementNode >( catch_stmt, branches );
-	CompoundStmt *tryBlock = strict_dynamic_cast< CompoundStmt * >(maybeMoveBuild< Statement >(try_stmt));
-	FinallyStmt *finallyBlock = dynamic_cast< FinallyStmt * >(maybeMoveBuild< Statement >(finally_stmt) );
+	CompoundStmt * tryBlock = strict_dynamic_cast< CompoundStmt * >(maybeMoveBuild< Statement >(try_stmt));
+	FinallyStmt * finallyBlock = dynamic_cast< FinallyStmt * >(maybeMoveBuild< Statement >(finally_stmt) );
 	return new TryStmt( tryBlock, branches, finallyBlock );
 }
-Statement *build_catch( CatchStmt::Kind kind, DeclarationNode *decl, ExpressionNode *cond, StatementNode *body ) {
+Statement * build_catch( CatchStmt::Kind kind, DeclarationNode * decl, ExpressionNode * cond, StatementNode * body ) {
 	std::list< Statement * > branches;
 	buildMoveList< Statement, StatementNode >( body, branches );
@@ -221,5 +221,5 @@
 	return new CatchStmt( kind, maybeMoveBuild< Declaration >(decl), maybeMoveBuild< Expression >(cond), branches.front() );
 }
-Statement *build_finally( StatementNode *stmt ) {
+Statement * build_finally( StatementNode * stmt ) {
 	std::list< Statement * > branches;
 	buildMoveList< Statement, StatementNode >( stmt, branches );
@@ -304,11 +304,11 @@
 }
 
-Statement *build_compound( StatementNode *first ) {
-	CompoundStmt *cs = new CompoundStmt();
+Statement * build_compound( StatementNode * first ) {
+	CompoundStmt * cs = new CompoundStmt();
 	buildMoveList( first, cs->get_kids() );
 	return cs;
 }
 
-Statement *build_asmstmt( bool voltile, Expression *instruction, ExpressionNode *output, ExpressionNode *input, ExpressionNode *clobber, LabelNode *gotolabels ) {
+Statement * build_asmstmt( bool voltile, Expression * instruction, ExpressionNode * output, ExpressionNode * input, ExpressionNode * clobber, LabelNode * gotolabels ) {
 	std::list< Expression * > out, in;
 	std::list< ConstantExpr * > clob;
@@ -318,4 +318,9 @@
 	buildMoveList( clobber, clob );
 	return new AsmStmt( voltile, instruction, out, in, clob, gotolabels ? gotolabels->labels : noLabels );
+}
+
+Statement * build_dirstmt( string * directive ) {
+	cout << *directive << endl;
+	return nullptr;
 }
 
Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision 9997feea08f61a0a83b01b685254ad9d8e8cd771)
+++ src/Parser/lex.ll	(revision 1a3eab86f23dc0bb8709ff1a369ab2a3e9b1663e)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Fri Apr  6 15:16:15 2018
- * Update Count     : 670
+ * Last Modified On : Sun Apr 29 14:10:49 2018
+ * Update Count     : 675
  */
 
@@ -174,6 +174,6 @@
 }
 
-				/* ignore preprocessor directives (for now) */
-^{h_white}*"#"[^\n]*"\n" ;
+				/* ignore preprocessor-style directives (for now) */
+^{h_white}*"#"[^\n]*"\n" { RETURN_VAL( DIRECTIVE ); }
 
 				/* ignore C style comments (ALSO HANDLED BY CPP) */
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 9997feea08f61a0a83b01b685254ad9d8e8cd771)
+++ src/Parser/parser.yy	(revision 1a3eab86f23dc0bb8709ff1a369ab2a3e9b1663e)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Apr 28 09:37:03 2018
-// Update Count     : 3201
+// Last Modified On : Sun Apr 29 14:20:17 2018
+// Update Count     : 3206
 //
 
@@ -208,4 +208,5 @@
 %token<tok> ATTR_IDENTIFIER		ATTR_TYPEDEFname		ATTR_TYPEGENname
 %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
 // overloading constants 0/1, e.g., x.1 is lexed as (x)(.1), where (.1) is a factional constant, but is semantically
@@ -875,4 +876,6 @@
 		{ SemanticError( yylloc, "enable/disable statement is currently unimplemented." ); $$ = nullptr; }
 	| asm_statement
+	| DIRECTIVE
+		{ $$ = new StatementNode( build_dirstmt( $1 ) ); }
 	;
 
