diff --git a/src/cfgrammar.c b/src/cfgrammar.c
index 7cafcb07849a16730c56e443d3f7298a0790c7f1..e0086f341cf438564be6512876517ea0d4190b3c 100644
--- a/src/cfgrammar.c
+++ b/src/cfgrammar.c
@@ -741,21 +741,20 @@ void h_pprint_symbolset(FILE *file, const HCFGrammar *g, const HHashSet *set, in
 
 #define BUFSIZE 512
 
-void pprint_stringset_elems(FILE *file, char *prefix, size_t n, const HCFStringMap *set)
+void pprint_stringset_elems(FILE *file, bool first, char *prefix, size_t n, const HCFStringMap *set)
 {
   assert(n < BUFSIZE-4);
 
   if(set->epsilon_branch) {
-    if(n==0) {
+    if(!first) fputc(',', file); first=false;
+    if(n==0)
       fputs("''", file);
-    } else {
-      fputc(',', file);
+    else
       fwrite(prefix, 1, n, file);
-    }
   }
 
   if(set->end_branch) {
-    fputc(',', file);
+    if(!first) fputc(',', file); first=false;
     fwrite(prefix, 1, n, file);
     fputc('$', file);
   }
@@ -787,7 +786,7 @@ void pprint_stringset_elems(FILE *file, char *prefix, size_t n, const HCFStringM
           n_ += sprintf(prefix+n_, "\\x%.2X", c);
       }
 
-      pprint_stringset_elems(file, prefix, n_, ends);
+      pprint_stringset_elems(file, first, prefix, n_, ends);
     }
   }
 }
@@ -799,6 +798,6 @@ void h_pprint_stringset(FILE *file, const HCFGrammar *g, const HCFStringMap *set
 
   char buf[BUFSIZE];
   fputc('{', file);
-  pprint_stringset_elems(file, buf, 0, set);
+  pprint_stringset_elems(file, true, buf, 0, set);
   fputs("}\n", file);
 }