diff --git a/src/pl/plpgsql/src/Makefile b/src/pl/plpgsql/src/Makefile
index e3fef84b88c15af242c6af0a42be833cdce172de..0db0dc56929f6ccc8bf3612fe7a3123ee7300541 100644
--- a/src/pl/plpgsql/src/Makefile
+++ b/src/pl/plpgsql/src/Makefile
@@ -58,7 +58,7 @@ pl_gram.o pl_handler.o pl_comp.o pl_exec.o pl_funcs.o pl_scanner.o: plpgsql.h pl
 
 pl_gram.h: pl_gram.c ;
 
-pl_gram.c: gram.y
+pl_gram.c: pl_gram.y
 ifdef BISON
 	$(BISON) -d $(BISONFLAGS) -o $@ $<
 else
diff --git a/src/pl/plpgsql/src/gram.y b/src/pl/plpgsql/src/pl_gram.y
similarity index 99%
rename from src/pl/plpgsql/src/gram.y
rename to src/pl/plpgsql/src/pl_gram.y
index 9c3d254a0f7866374ead593362e7cd908247fbd2..cf164d0e4882c4a568046838ab7a8b6abaa3eaae 100644
--- a/src/pl/plpgsql/src/gram.y
+++ b/src/pl/plpgsql/src/pl_gram.y
@@ -1,14 +1,14 @@
 %{
 /*-------------------------------------------------------------------------
  *
- * gram.y				- Parser for the PL/pgSQL procedural language
+ * pl_gram.y			- Parser for the PL/pgSQL procedural language
  *
  * Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  *
  * IDENTIFICATION
- *	  src/pl/plpgsql/src/gram.y
+ *	  src/pl/plpgsql/src/pl_gram.y
  *
  *-------------------------------------------------------------------------
  */
diff --git a/src/pl/plpgsql/src/pl_scanner.c b/src/pl/plpgsql/src/pl_scanner.c
index c78527c309a1936b2ebaa8736546f9b6635dfb35..707afbad902744f182da52eaa2f9cca6722c1e28 100644
--- a/src/pl/plpgsql/src/pl_scanner.c
+++ b/src/pl/plpgsql/src/pl_scanner.c
@@ -40,7 +40,7 @@ IdentifierLookup plpgsql_IdentifierLookup = IDENTIFIER_LOOKUP_NORMAL;
  *
  * In certain contexts it is desirable to prefer recognizing an unreserved
  * keyword over recognizing a variable name.  Those cases are handled in
- * gram.y using tok_is_keyword().
+ * pl_gram.y using tok_is_keyword().
  *
  * For the most part, the reserved keywords are those that start a PL/pgSQL
  * statement (and so would conflict with an assignment to a variable of the
@@ -55,7 +55,7 @@ IdentifierLookup plpgsql_IdentifierLookup = IDENTIFIER_LOOKUP_NORMAL;
  *		 search is used to locate entries.
  *
  * Be careful not to put the same word in both lists.  Also be sure that
- * gram.y's unreserved_keyword production agrees with the second list.
+ * pl_gram.y's unreserved_keyword production agrees with the second list.
  */
 
 static const ScanKeyword reserved_keywords[] = {
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 845e36d20c27fe0dd74a03d82a46db7d0c63630d..a98cc45897fae8eff790366eb3f4755221b46aad 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -107,7 +107,7 @@ sub mkvcbuild
 
 	my $plpgsql =
 	  $solution->AddProject('plpgsql', 'dll', 'PLs', 'src\pl\plpgsql\src');
-	$plpgsql->AddFiles('src\pl\plpgsql\src', 'gram.y');
+	$plpgsql->AddFiles('src\pl\plpgsql\src', 'pl_gram.y');
 	$plpgsql->AddReference($postgres);
 
 	if ($solution->{options}->{perl})