diff --git a/gcc/cobol/parse.y b/gcc/cobol/parse.y
index 811d12667af7e9451a8f7920ecfd24b14111649a..2b10b970531738ad5723d45dd5541e0797872876 100644
--- a/gcc/cobol/parse.y
+++ b/gcc/cobol/parse.y
@@ -9932,36 +9932,38 @@ keyword_tok( const char * text, bool include_intrinsics ) {
   }, *eokws = kws + COUNT_OF(kws);
 
 class tokenset_t {
-  std::map <std::string, size_t> tokens;
+  std::map <std::string, int> tokens;
   
  public:
   tokenset_t( const char * const *first,
 	      const char * const *last ) {
-    size_t i=255;
+    // Initialize a map of lexemes, as found in the COBOL text, to their token values.
+    int i = 3 + 255;
+
     for( auto name = first; name < last; name++ ) {
       static cbl_name_t lname;
-      
-      std::transform(*name, *name + strlen(*name) + 1, lname, tolower);
-      std::replace(lname, lname + strlen(lname), '-', '_');
-      
+
+      strcpy(lname, *name);
       auto p = std::find_if( kws, eokws,
 			     [](kw_t kw) {
-			       return 0 == strcasecmp(lname, kw.lexeme);
+			       return 0 == strcasecmp(lname, kw.name);
 			     } );
       if( p != eokws ) {
-	std::transform(p->name, p->name + strlen(p->name) + 1, lname, tolower);
+	strcpy(lname, p->lexeme);
       }
+      std::replace(lname, lname + strlen(lname), '_', '-');
+      std::transform(lname, lname + strlen(lname) + 1, lname, tolower);
       tokens[lname] = i++;
     }
   }
   
-  size_t find( const cbl_name_t name, bool include_intrinsics ) {
+  int find( const cbl_name_t name, bool include_intrinsics ) {
     cbl_name_t lname;
     std::transform(name, name + strlen(name) + 1, lname, tolower);
     auto p = tokens.find(lname);
     if( p == tokens.end() ) return 0;
-    size_t token = p->second;
-    
+    int token = p->second;
+
     if( include_intrinsics ) return token;
     
     return intrinsic_cname(token)? 0 : token;
@@ -9970,7 +9972,7 @@ class tokenset_t {
 
 int
 keyword_tok( const char * text, bool include_intrinsics ) {
-  static auto last = std::find_if(yytname, yytname + COUNT_OF(yytname),
+  static auto last = std::find_if(yytname + 3, yytname + COUNT_OF(yytname),
                                   [] ( const char *name ) {
                                     return 0 == strcmp(name, "$accept"); });
   static tokenset_t tokens( yytname + 3, last );