Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revision 1d832f4bfb43313e3f83a1b5e2db90f7b3c6cf30)
+++ src/Makefile.am	(revision 192d4a57d761cf2dd41a849b96a01f9e376ba798)
@@ -20,11 +20,14 @@
 
 SRC = main.cc \
-      MakeLibCfa.cc \
-      CompilationState.cc
+			MakeLibCfa.cc \
+			CompilationState.cc
 
 MAINTAINERCLEANFILES =
-MOSTLYCLEANFILES =
+MOSTLYCLEANFILES = Parser/gcc-flags.h
 
-# Is there a way to use a variable for the directory names?
+Parser/gcc-flags.h :
+	${AM_V_GEN}$(CC) -dM -E - < /dev/null | sed 's/define /define __GCC__/' > $(@)
+
+Parser/lex.ll : Parser/gcc-flags.h
 
 include CodeGen/module.mk
@@ -59,87 +62,87 @@
 noinst_LIBRARIES = libdemangle.a
 libdemangle_a_SOURCES = SymTab/Demangle.cc SymTab/ManglerCommon.cc \
-  SynTree/Type.cc \
-  SynTree/VoidType.cc \
-  SynTree/BasicType.cc \
-  SynTree/PointerType.cc \
-  SynTree/ArrayType.cc \
-  SynTree/ReferenceType.cc \
-  SynTree/FunctionType.cc \
-  SynTree/ReferenceToType.cc \
-  SynTree/TupleType.cc \
-  SynTree/TypeofType.cc \
-  SynTree/AttrType.cc \
-  SynTree/VarArgsType.cc \
-  SynTree/ZeroOneType.cc \
-  SynTree/Constant.cc \
-  SynTree/Expression.cc \
-  SynTree/TupleExpr.cc \
-  SynTree/CommaExpr.cc \
-  SynTree/TypeExpr.cc \
-  SynTree/ApplicationExpr.cc \
-  SynTree/AddressExpr.cc \
-  SynTree/Statement.cc \
-  SynTree/CompoundStmt.cc \
-  SynTree/DeclStmt.cc \
-  SynTree/Declaration.cc \
-  SynTree/DeclarationWithType.cc \
-  SynTree/ObjectDecl.cc \
-  SynTree/FunctionDecl.cc \
-  SynTree/AggregateDecl.cc \
-  SynTree/NamedTypeDecl.cc \
-  SynTree/TypeDecl.cc \
-  SynTree/Initializer.cc \
-  SynTree/TypeSubstitution.cc \
-  SynTree/Attribute.cc \
-  SynTree/DeclReplacer.cc \
-  CompilationState.cc \
-  CodeGen/CodeGenerator.cc \
-  CodeGen/FixMain.cc \
-  CodeGen/GenType.cc \
-  CodeGen/OperatorTable.cc \
-  Common/Assert.cc \
-  Common/Eval.cc \
-  Common/SemanticError.cc \
-  Common/UniqueName.cc \
-  Concurrency/Keywords.cc \
-  ControlStruct/ForExprMutator.cc \
-  ControlStruct/LabelFixer.cc \
-  ControlStruct/LabelGenerator.cc \
-  ControlStruct/MLEMutator.cc \
-  ControlStruct/Mutate.cc \
-  GenPoly/GenPoly.cc \
-  GenPoly/Lvalue.cc \
-  InitTweak/GenInit.cc \
-  InitTweak/InitTweak.cc \
-  Parser/LinkageSpec.cc \
-  ResolvExpr/AdjustExprType.cc \
-  ResolvExpr/Alternative.cc \
-  ResolvExpr/AlternativeFinder.cc \
-  ResolvExpr/ExplodedActual.cc \
-  ResolvExpr/CastCost.cc \
-  ResolvExpr/CommonType.cc \
-  ResolvExpr/ConversionCost.cc \
-  ResolvExpr/CurrentObject.cc \
-  ResolvExpr/FindOpenVars.cc \
-  ResolvExpr/Occurs.cc \
-  ResolvExpr/PolyCost.cc \
-  ResolvExpr/PtrsAssignable.cc \
-  ResolvExpr/PtrsCastable.cc \
-  ResolvExpr/RenameVars.cc \
-  ResolvExpr/ResolveAssertions.cc \
-  ResolvExpr/Resolver.cc \
-  ResolvExpr/ResolveTypeof.cc \
-  ResolvExpr/SpecCost.cc \
-  ResolvExpr/TypeEnvironment.cc \
-  ResolvExpr/Unify.cc \
-  SymTab/Autogen.cc \
-  SymTab/FixFunction.cc \
-  SymTab/Indexer.cc \
-  SymTab/Mangler.cc \
-  SymTab/Validate.cc \
-  Tuples/Explode.cc \
-  Tuples/TupleAssignment.cc \
-  Tuples/TupleExpansion.cc \
-  Validate/HandleAttributes.cc
+	SynTree/Type.cc \
+	SynTree/VoidType.cc \
+	SynTree/BasicType.cc \
+	SynTree/PointerType.cc \
+	SynTree/ArrayType.cc \
+	SynTree/ReferenceType.cc \
+	SynTree/FunctionType.cc \
+	SynTree/ReferenceToType.cc \
+	SynTree/TupleType.cc \
+	SynTree/TypeofType.cc \
+	SynTree/AttrType.cc \
+	SynTree/VarArgsType.cc \
+	SynTree/ZeroOneType.cc \
+	SynTree/Constant.cc \
+	SynTree/Expression.cc \
+	SynTree/TupleExpr.cc \
+	SynTree/CommaExpr.cc \
+	SynTree/TypeExpr.cc \
+	SynTree/ApplicationExpr.cc \
+	SynTree/AddressExpr.cc \
+	SynTree/Statement.cc \
+	SynTree/CompoundStmt.cc \
+	SynTree/DeclStmt.cc \
+	SynTree/Declaration.cc \
+	SynTree/DeclarationWithType.cc \
+	SynTree/ObjectDecl.cc \
+	SynTree/FunctionDecl.cc \
+	SynTree/AggregateDecl.cc \
+	SynTree/NamedTypeDecl.cc \
+	SynTree/TypeDecl.cc \
+	SynTree/Initializer.cc \
+	SynTree/TypeSubstitution.cc \
+	SynTree/Attribute.cc \
+	SynTree/DeclReplacer.cc \
+	CompilationState.cc \
+	CodeGen/CodeGenerator.cc \
+	CodeGen/FixMain.cc \
+	CodeGen/GenType.cc \
+	CodeGen/OperatorTable.cc \
+	Common/Assert.cc \
+	Common/Eval.cc \
+	Common/SemanticError.cc \
+	Common/UniqueName.cc \
+	Concurrency/Keywords.cc \
+	ControlStruct/ForExprMutator.cc \
+	ControlStruct/LabelFixer.cc \
+	ControlStruct/LabelGenerator.cc \
+	ControlStruct/MLEMutator.cc \
+	ControlStruct/Mutate.cc \
+	GenPoly/GenPoly.cc \
+	GenPoly/Lvalue.cc \
+	InitTweak/GenInit.cc \
+	InitTweak/InitTweak.cc \
+	Parser/LinkageSpec.cc \
+	ResolvExpr/AdjustExprType.cc \
+	ResolvExpr/Alternative.cc \
+	ResolvExpr/AlternativeFinder.cc \
+	ResolvExpr/ExplodedActual.cc \
+	ResolvExpr/CastCost.cc \
+	ResolvExpr/CommonType.cc \
+	ResolvExpr/ConversionCost.cc \
+	ResolvExpr/CurrentObject.cc \
+	ResolvExpr/FindOpenVars.cc \
+	ResolvExpr/Occurs.cc \
+	ResolvExpr/PolyCost.cc \
+	ResolvExpr/PtrsAssignable.cc \
+	ResolvExpr/PtrsCastable.cc \
+	ResolvExpr/RenameVars.cc \
+	ResolvExpr/ResolveAssertions.cc \
+	ResolvExpr/Resolver.cc \
+	ResolvExpr/ResolveTypeof.cc \
+	ResolvExpr/SpecCost.cc \
+	ResolvExpr/TypeEnvironment.cc \
+	ResolvExpr/Unify.cc \
+	SymTab/Autogen.cc \
+	SymTab/FixFunction.cc \
+	SymTab/Indexer.cc \
+	SymTab/Mangler.cc \
+	SymTab/Validate.cc \
+	Tuples/Explode.cc \
+	Tuples/TupleAssignment.cc \
+	Tuples/TupleExpansion.cc \
+	Validate/HandleAttributes.cc
 
 MAINTAINERCLEANFILES += ${libdir}/${notdir ${cfa_cpplib_PROGRAMS}}
Index: src/Makefile.in
===================================================================
--- src/Makefile.in	(revision 1d832f4bfb43313e3f83a1b5e2db90f7b3c6cf30)
+++ src/Makefile.in	(revision 192d4a57d761cf2dd41a849b96a01f9e376ba798)
@@ -618,9 +618,8 @@
 	Virtual/ExpandCasts.cc
 MAINTAINERCLEANFILES = ${libdir}/${notdir ${cfa_cpplib_PROGRAMS}}
-MOSTLYCLEANFILES = Parser/parser.hh Parser/parser.output
+MOSTLYCLEANFILES = Parser/gcc-flags.h Parser/lex.cc Parser/parser.cc \
+	Parser/parser.hh Parser/parser.output
 BUILT_SOURCES = Parser/parser.hh
 AM_YFLAGS = -d -t -v
-
-# Is there a way to use a variable for the directory names?
 
 # put into lib for now
@@ -635,87 +634,87 @@
 noinst_LIBRARIES = libdemangle.a
 libdemangle_a_SOURCES = SymTab/Demangle.cc SymTab/ManglerCommon.cc \
-  SynTree/Type.cc \
-  SynTree/VoidType.cc \
-  SynTree/BasicType.cc \
-  SynTree/PointerType.cc \
-  SynTree/ArrayType.cc \
-  SynTree/ReferenceType.cc \
-  SynTree/FunctionType.cc \
-  SynTree/ReferenceToType.cc \
-  SynTree/TupleType.cc \
-  SynTree/TypeofType.cc \
-  SynTree/AttrType.cc \
-  SynTree/VarArgsType.cc \
-  SynTree/ZeroOneType.cc \
-  SynTree/Constant.cc \
-  SynTree/Expression.cc \
-  SynTree/TupleExpr.cc \
-  SynTree/CommaExpr.cc \
-  SynTree/TypeExpr.cc \
-  SynTree/ApplicationExpr.cc \
-  SynTree/AddressExpr.cc \
-  SynTree/Statement.cc \
-  SynTree/CompoundStmt.cc \
-  SynTree/DeclStmt.cc \
-  SynTree/Declaration.cc \
-  SynTree/DeclarationWithType.cc \
-  SynTree/ObjectDecl.cc \
-  SynTree/FunctionDecl.cc \
-  SynTree/AggregateDecl.cc \
-  SynTree/NamedTypeDecl.cc \
-  SynTree/TypeDecl.cc \
-  SynTree/Initializer.cc \
-  SynTree/TypeSubstitution.cc \
-  SynTree/Attribute.cc \
-  SynTree/DeclReplacer.cc \
-  CompilationState.cc \
-  CodeGen/CodeGenerator.cc \
-  CodeGen/FixMain.cc \
-  CodeGen/GenType.cc \
-  CodeGen/OperatorTable.cc \
-  Common/Assert.cc \
-  Common/Eval.cc \
-  Common/SemanticError.cc \
-  Common/UniqueName.cc \
-  Concurrency/Keywords.cc \
-  ControlStruct/ForExprMutator.cc \
-  ControlStruct/LabelFixer.cc \
-  ControlStruct/LabelGenerator.cc \
-  ControlStruct/MLEMutator.cc \
-  ControlStruct/Mutate.cc \
-  GenPoly/GenPoly.cc \
-  GenPoly/Lvalue.cc \
-  InitTweak/GenInit.cc \
-  InitTweak/InitTweak.cc \
-  Parser/LinkageSpec.cc \
-  ResolvExpr/AdjustExprType.cc \
-  ResolvExpr/Alternative.cc \
-  ResolvExpr/AlternativeFinder.cc \
-  ResolvExpr/ExplodedActual.cc \
-  ResolvExpr/CastCost.cc \
-  ResolvExpr/CommonType.cc \
-  ResolvExpr/ConversionCost.cc \
-  ResolvExpr/CurrentObject.cc \
-  ResolvExpr/FindOpenVars.cc \
-  ResolvExpr/Occurs.cc \
-  ResolvExpr/PolyCost.cc \
-  ResolvExpr/PtrsAssignable.cc \
-  ResolvExpr/PtrsCastable.cc \
-  ResolvExpr/RenameVars.cc \
-  ResolvExpr/ResolveAssertions.cc \
-  ResolvExpr/Resolver.cc \
-  ResolvExpr/ResolveTypeof.cc \
-  ResolvExpr/SpecCost.cc \
-  ResolvExpr/TypeEnvironment.cc \
-  ResolvExpr/Unify.cc \
-  SymTab/Autogen.cc \
-  SymTab/FixFunction.cc \
-  SymTab/Indexer.cc \
-  SymTab/Mangler.cc \
-  SymTab/Validate.cc \
-  Tuples/Explode.cc \
-  Tuples/TupleAssignment.cc \
-  Tuples/TupleExpansion.cc \
-  Validate/HandleAttributes.cc
+	SynTree/Type.cc \
+	SynTree/VoidType.cc \
+	SynTree/BasicType.cc \
+	SynTree/PointerType.cc \
+	SynTree/ArrayType.cc \
+	SynTree/ReferenceType.cc \
+	SynTree/FunctionType.cc \
+	SynTree/ReferenceToType.cc \
+	SynTree/TupleType.cc \
+	SynTree/TypeofType.cc \
+	SynTree/AttrType.cc \
+	SynTree/VarArgsType.cc \
+	SynTree/ZeroOneType.cc \
+	SynTree/Constant.cc \
+	SynTree/Expression.cc \
+	SynTree/TupleExpr.cc \
+	SynTree/CommaExpr.cc \
+	SynTree/TypeExpr.cc \
+	SynTree/ApplicationExpr.cc \
+	SynTree/AddressExpr.cc \
+	SynTree/Statement.cc \
+	SynTree/CompoundStmt.cc \
+	SynTree/DeclStmt.cc \
+	SynTree/Declaration.cc \
+	SynTree/DeclarationWithType.cc \
+	SynTree/ObjectDecl.cc \
+	SynTree/FunctionDecl.cc \
+	SynTree/AggregateDecl.cc \
+	SynTree/NamedTypeDecl.cc \
+	SynTree/TypeDecl.cc \
+	SynTree/Initializer.cc \
+	SynTree/TypeSubstitution.cc \
+	SynTree/Attribute.cc \
+	SynTree/DeclReplacer.cc \
+	CompilationState.cc \
+	CodeGen/CodeGenerator.cc \
+	CodeGen/FixMain.cc \
+	CodeGen/GenType.cc \
+	CodeGen/OperatorTable.cc \
+	Common/Assert.cc \
+	Common/Eval.cc \
+	Common/SemanticError.cc \
+	Common/UniqueName.cc \
+	Concurrency/Keywords.cc \
+	ControlStruct/ForExprMutator.cc \
+	ControlStruct/LabelFixer.cc \
+	ControlStruct/LabelGenerator.cc \
+	ControlStruct/MLEMutator.cc \
+	ControlStruct/Mutate.cc \
+	GenPoly/GenPoly.cc \
+	GenPoly/Lvalue.cc \
+	InitTweak/GenInit.cc \
+	InitTweak/InitTweak.cc \
+	Parser/LinkageSpec.cc \
+	ResolvExpr/AdjustExprType.cc \
+	ResolvExpr/Alternative.cc \
+	ResolvExpr/AlternativeFinder.cc \
+	ResolvExpr/ExplodedActual.cc \
+	ResolvExpr/CastCost.cc \
+	ResolvExpr/CommonType.cc \
+	ResolvExpr/ConversionCost.cc \
+	ResolvExpr/CurrentObject.cc \
+	ResolvExpr/FindOpenVars.cc \
+	ResolvExpr/Occurs.cc \
+	ResolvExpr/PolyCost.cc \
+	ResolvExpr/PtrsAssignable.cc \
+	ResolvExpr/PtrsCastable.cc \
+	ResolvExpr/RenameVars.cc \
+	ResolvExpr/ResolveAssertions.cc \
+	ResolvExpr/Resolver.cc \
+	ResolvExpr/ResolveTypeof.cc \
+	ResolvExpr/SpecCost.cc \
+	ResolvExpr/TypeEnvironment.cc \
+	ResolvExpr/Unify.cc \
+	SymTab/Autogen.cc \
+	SymTab/FixFunction.cc \
+	SymTab/Indexer.cc \
+	SymTab/Mangler.cc \
+	SymTab/Validate.cc \
+	Tuples/Explode.cc \
+	Tuples/TupleAssignment.cc \
+	Tuples/TupleExpansion.cc \
+	Validate/HandleAttributes.cc
 
 all: $(BUILT_SOURCES)
@@ -1559,4 +1558,9 @@
 
 
+Parser/gcc-flags.h :
+	${AM_V_GEN}$(CC) -dM -E - < /dev/null | sed 's/define /define __GCC__/' > $(@)
+
+Parser/lex.ll : Parser/gcc-flags.h
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
Index: src/Parser/module.mk
===================================================================
--- src/Parser/module.mk	(revision 1d832f4bfb43313e3f83a1b5e2db90f7b3c6cf30)
+++ src/Parser/module.mk	(revision 192d4a57d761cf2dd41a849b96a01f9e376ba798)
@@ -31,3 +31,3 @@
        Parser/parserutility.cc
 
-MOSTLYCLEANFILES += Parser/parser.hh Parser/parser.output
+MOSTLYCLEANFILES += Parser/lex.cc Parser/parser.cc Parser/parser.hh Parser/parser.output
