SAVE TRANSLATE: Make first '/' optional in syntax.
authorBen Pfaff <blp@cs.stanford.edu>
Sun, 23 Apr 2023 17:24:49 +0000 (10:24 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Sun, 23 Apr 2023 17:24:51 +0000 (10:24 -0700)
This matches SPSS behavior.

Thanks to Matthias Faeth for reporting this bug.

src/language/commands/save-translate.c
tests/language/commands/save-translate.at

index 48b5d4507a9b22e8d27ff2ed12b4160a6307afac..0bf0bcafeb051dafd609acccda26b01f648d5bd0 100644 (file)
@@ -65,11 +65,9 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
   int outfile_start = 0;
   int outfile_end = 0;
 
-  while (lex_token (lexer) != T_ENDCMD)
+  lex_match (lexer, T_SLASH);
+  for (;;)
     {
-      if (!lex_force_match (lexer, T_SLASH))
-        goto error;
-
       if (lex_match_id (lexer, "OUTFILE"))
        {
           outfile_start = lex_ofs (lexer) - 1;
@@ -215,6 +213,12 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
         }
       else if (!parse_dict_trim (lexer, dict))
         goto error;
+
+      if (lex_token (lexer) == T_ENDCMD)
+        break;
+
+      if (!lex_force_match (lexer, T_SLASH))
+        goto error;
     }
 
   if (type == 0)
index ebfca92d4c4d5c277dfb2f2aa47efd166de2fb40..9b1b5ce2c9ded9330afa330cd89e049677578985 100644 (file)
@@ -30,7 +30,7 @@ DATA LIST LIST NOTABLE FILE="data.txt"
      filter(F1.0).
 MISSING VALUES number(0) time('0 12:00') string('xyzzy').
 FILTER BY filter.
-SAVE TRANSLATE /OUTFILE="data.csv" /TYPE=m4_if([$2], [], [CSV], [$2])
+SAVE TRANSLATE OUTFILE="data.csv" /TYPE=m4_if([$2], [], [CSV], [$2])
     $1.
 ])
 AT_CHECK([pspp -O format=csv save-translate.pspp], [0])
@@ -202,9 +202,10 @@ SAVE TRANSLATE/RENAME=v1=v1.
 SAVE TRANSLATE/DROP=ALL.
 SAVE TRANSLATE/DROP=**.
 SAVE TRANSLATE/KEEP=**.
+SAVE TRANSLATE/OUTFILE='xyzzy.txt' **.
 ])
 AT_CHECK([pspp -O format=csv save-translate.sps], [1], [dnl
-"save-translate.sps:2.16-2.17: error: SAVE TRANSLATE: Syntax error expecting `/'.
+"save-translate.sps:2.16-2.17: error: SAVE TRANSLATE: Syntax error expecting MAP, DROP, KEEP, or RENAME.
     2 | SAVE TRANSLATE **.
       |                ^~"
 
@@ -357,5 +358,9 @@ save-translate.sps:26: error: SAVE TRANSLATE: Old and new variable counts do not
 "save-translate.sps:35.21-35.22: error: SAVE TRANSLATE: Syntax error expecting variable name.
    35 | SAVE TRANSLATE/KEEP=**.
       |                     ^~"
+
+"save-translate.sps:36.36-36.37: error: SAVE TRANSLATE: Syntax error expecting `/'.
+   36 | SAVE TRANSLATE/OUTFILE='xyzzy.txt' **.
+      |                                    ^~"
 ])
 AT_CLEANUP