187c22efeeb88d109b00a2c3dcb6762fdab766a3
[pspp] / tests / language / lexer / scan.at
1 dnl PSPP - a program for statistical analysis.
2 dnl Copyright (C) 2017 Free Software Foundation, Inc.
3 dnl
4 dnl This program is free software: you can redistribute it and/or modify
5 dnl it under the terms of the GNU General Public License as published by
6 dnl the Free Software Foundation, either version 3 of the License, or
7 dnl (at your option) any later version.
8 dnl
9 dnl This program is distributed in the hope that it will be useful,
10 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
11 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 dnl GNU General Public License for more details.
13 dnl
14 dnl You should have received a copy of the GNU General Public License
15 dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 dnl
17 AT_BANNER([syntax scanning])
18 m4_define([PSPP_CHECK_SCAN],
19   [sed 's/^-//' < expout-base > expout
20    AT_CHECK([scan-test $1 input], [0], [expout])
21
22    sed '/^-/d' < expout-base > expout
23    AT_CHECK([scan-test -s $1 input], [0], [expout])])
24 \f
25 AT_SETUP([identifiers])
26 AT_KEYWORDS([scan])
27 AT_DATA([input], [dnl
28 a aB i5 $x @efg @@. !abcd !* !*a #.# .x _z.
29 abcd. abcd.
30 QRSTUV./* end of line comment */
31 QrStUv./* end of line comment */ @&t@
32 WXYZ. /* unterminated end of line comment
33 �. /* U+FFFD is not valid in an identifier
34 ])
35 AT_DATA([expout-base], [dnl
36 ID "a"
37 ID "aB"
38 ID "i5"
39 ID "$x"
40 ID "@efg"
41 ID "@@."
42 MACRO_ID "!abcd"
43 MACRO_ID "!*"
44 MACRO_ID "!*"
45 ID "a"
46 ID "#.#"
47 MACRO_PUNCT "."
48 ID "x"
49 MACRO_PUNCT "_"
50 ID "z"
51 ENDCMD
52 ID "abcd."
53 ID "abcd"
54 ENDCMD
55 ID "QRSTUV"
56 ENDCMD
57 ID "QrStUv"
58 ENDCMD
59 ID "WXYZ"
60 ENDCMD
61 STOP "Bad character U+FFFD in input."
62 ENDCMD
63 STOP
64 ])
65 PSPP_CHECK_SCAN([-i])
66 AT_CLEANUP
67 \f
68 AT_SETUP([reserved words])
69 AT_KEYWORDS([scan])
70 AT_DATA([input], [dnl
71 and or not eq ge gt le lt ne all by to with
72 AND OR NOT EQ GE GT LE LT NE ALL BY TO WITH
73 andx orx notx eqx gex gtx lex ltx nex allx byx tox withx
74 and. with.
75 ])
76 AT_DATA([expout-base], [dnl
77 AND
78 OR
79 NOT
80 EQ
81 GE
82 GT
83 LE
84 LT
85 NE
86 ALL
87 BY
88 TO
89 WITH
90 AND
91 OR
92 NOT
93 EQ
94 GE
95 GT
96 LE
97 LT
98 NE
99 ALL
100 BY
101 TO
102 WITH
103 ID "andx"
104 ID "orx"
105 ID "notx"
106 ID "eqx"
107 ID "gex"
108 ID "gtx"
109 ID "lex"
110 ID "ltx"
111 ID "nex"
112 ID "allx"
113 ID "byx"
114 ID "tox"
115 ID "withx"
116 ID "and."
117 WITH
118 ENDCMD
119 STOP
120 ])
121 PSPP_CHECK_SCAN([-i])
122 AT_CLEANUP
123 \f
124 AT_SETUP([punctuation])
125 AT_KEYWORDS([scan])
126 AT_DATA([input], [dnl
127 ~ & | = >= > <= < ~= <> ( ) , - + * / [[ ]] **
128 ~&|=>=><=<~=<>(),-+*/[[]]**
129 % : ; ? _ ` { } ~
130 ])
131 AT_DATA([expout-base], [dnl
132 NOT
133 AND
134 OR
135 EQUALS
136 GE
137 GT
138 LE
139 LT
140 NE
141 NE
142 LPAREN
143 RPAREN
144 COMMA
145 DASH
146 PLUS
147 ASTERISK
148 SLASH
149 LBRACK
150 RBRACK
151 EXP
152 NOT
153 AND
154 OR
155 EQUALS
156 GE
157 GT
158 LE
159 LT
160 NE
161 NE
162 LPAREN
163 RPAREN
164 COMMA
165 DASH
166 PLUS
167 ASTERISK
168 SLASH
169 LBRACK
170 RBRACK
171 EXP
172 MACRO_PUNCT "%"
173 MACRO_PUNCT ":"
174 MACRO_PUNCT ";"
175 MACRO_PUNCT "?"
176 MACRO_PUNCT "_"
177 MACRO_PUNCT "`"
178 MACRO_PUNCT "{"
179 MACRO_PUNCT "}"
180 NOT
181 STOP
182 ])
183 PSPP_CHECK_SCAN([-i])
184 AT_CLEANUP
185 \f
186 AT_SETUP([positive numbers])
187 AT_KEYWORDS([scan])
188 AT_DATA([input], [dnl
189 0 1 01 001. 1.
190 123. /* comment 1 */ /* comment 2 */
191 .1 0.1 00.1 00.10
192 5e1 6E-1 7e+1 6E+01 6e-03
193 .3E1 .4e-1 .5E+1 .6e+01 .7E-03
194 1.23e1 45.6E-1 78.9e+1 99.9E+01 11.2e-03
195 . 1e e1 1e+ 1e-
196 ])
197 AT_DATA([expout-base], [dnl
198 POS_NUM
199 POS_NUM 1
200 POS_NUM 1
201 POS_NUM 1
202 POS_NUM 1
203 ENDCMD
204 POS_NUM 123
205 ENDCMD
206 ENDCMD
207 POS_NUM 1
208 POS_NUM 0.1
209 POS_NUM 0.1
210 POS_NUM 0.1
211 POS_NUM 50
212 POS_NUM 0.6
213 POS_NUM 70
214 POS_NUM 60
215 POS_NUM 0.006
216 ENDCMD
217 POS_NUM 30
218 POS_NUM 0.04
219 POS_NUM 5
220 POS_NUM 6
221 POS_NUM 0.0007
222 POS_NUM 12.3
223 POS_NUM 4.56
224 POS_NUM 789
225 POS_NUM 999
226 POS_NUM 0.0112
227 ENDCMD
228 STOP "Missing exponent following `1e'."
229 ID "e1"
230 STOP "Missing exponent following `1e+'."
231 STOP "Missing exponent following `1e-'."
232 STOP
233 ])
234 PSPP_CHECK_SCAN([-i])
235 AT_CLEANUP
236 \f
237 AT_SETUP([negative numbers])
238 AT_KEYWORDS([scan])
239 AT_DATA([input-base], [dnl
240  -0 -1 -01 -001. -1.
241  -123. /* comment 1 */ /* comment 2 */
242  -.1 -0.1 -00.1 -00.10
243  -5e1 -6E-1 -7e+1 -6E+01 -6e-03
244  -.3E1 -.4e-1 -.5E+1 -.6e+01 -.7E-03
245  -1.23e1 -45.6E-1 -78.9e+1 -99.9E+01 -11.2e-03
246  -/**/1
247  -. -1e -e1 -1e+ -1e- -1.
248 ])
249 AT_DATA([expout-base0], [dnl
250 NEG_NUM
251 NEG_NUM -1
252 NEG_NUM -1
253 NEG_NUM -1
254 NEG_NUM -1
255 ENDCMD
256 NEG_NUM -123
257 ENDCMD
258 NEG_NUM -0.1
259 NEG_NUM -0.1
260 NEG_NUM -0.1
261 NEG_NUM -0.1
262 NEG_NUM -50
263 NEG_NUM -0.6
264 NEG_NUM -70
265 NEG_NUM -60
266 NEG_NUM -0.006
267 NEG_NUM -3
268 NEG_NUM -0.04
269 NEG_NUM -5
270 NEG_NUM -6
271 NEG_NUM -0.0007
272 NEG_NUM -12.3
273 NEG_NUM -4.56
274 NEG_NUM -789
275 NEG_NUM -999
276 NEG_NUM -0.0112
277 NEG_NUM -1
278 DASH
279 MACRO_PUNCT "."
280 STOP "Missing exponent following `-1e'."
281 DASH
282 ID "e1"
283 STOP "Missing exponent following `-1e+'."
284 STOP "Missing exponent following `-1e-'."
285 NEG_NUM -1
286 ENDCMD
287 STOP
288 ])
289
290 cp input-base input
291 cp expout-base0 expout-base
292 PSPP_CHECK_SCAN([-i])
293
294 sed 's/ -/ - /g' < input-base > input
295 sed 's/following `-/following `- /' < expout-base0 > expout-base
296 PSPP_CHECK_SCAN([-i])
297 AT_CLEANUP
298 \f
299 AT_SETUP([strings])
300 AT_KEYWORDS([scan])
301 AT_DATA([input], [dnl
302 'x' "y" 'abc'
303 'Don''t' "Can't" 'Won''t'
304 """quoted""" '"quoted"'
305 '' "" '''' """"
306 'missing end quote
307 "missing double quote
308 'x' + "y"
309 + 'z' +
310 'a' /* abc */ + "b" /*
311 + 'c' +/* */"d"/* */+'e'
312 'foo'
313 +          /* special case: + in column 0 would ordinarily start a new command
314 'bar'
315 'foo'
316  +
317 'bar'
318 'foo'
319 +
320
321 'bar'
322
323 +
324 x"4142"+'5152'
325 "4142"+
326 x'5152'
327 x"4142"
328 +u'304a'
329 "�あいうえお"
330 "abc"+U"FFFD"+u'3048'+"xyz"
331 ])
332 AT_DATA([expout-base], [dnl
333 STRING "x"
334 STRING "y"
335 STRING "abc"
336 STRING "Don't"
337 STRING "Can't"
338 STRING "Won't"
339 STRING ""quoted""
340 STRING ""quoted""
341 STRING ""
342 STRING ""
343 STRING "'"
344 STRING """
345 STOP "Unterminated string constant."
346 STOP "Unterminated string constant."
347 STRING "xyzabcde"
348 STRING "foobar"
349 STRING "foobar"
350 STRING "foo"
351 PLUS
352 ENDCMD
353 STRING "bar"
354 ENDCMD
355 PLUS
356 STRING "AB5152"
357 STRING "4142QR"
358 STRING "ABお"
359 STRING "�あいうえお"
360 STRING "abc�えxyz"
361 STOP
362 ])
363 PSPP_CHECK_SCAN([-i])
364 AT_CLEANUP
365 \f
366 AT_SETUP([@%:@! construct])
367 AT_KEYWORDS([scan])
368 AT_DATA([input], [dnl
369 #! /usr/bin/pspp
370 #! /usr/bin/pspp
371 ])
372 AT_DATA([expout-base], [dnl
373 ID "#"
374 MACRO_ID "!"
375 SLASH
376 ID "usr"
377 SLASH
378 ID "bin"
379 SLASH
380 ID "pspp"
381 STOP
382 ])
383 PSPP_CHECK_SCAN([-i])
384 AT_CLEANUP
385 \f
386 AT_SETUP([* and COMMENT commands])
387 AT_KEYWORDS([scan])
388 AT_DATA([input], [dnl
389 * Comment commands "don't
390 have to contain valid tokens.
391
392 ** Check ambiguity with ** token.
393 ****************.
394
395 comment keyword works too.
396 COMM also.
397 com is ambiguous with COMPUTE.
398
399    * Comment need not start at left margin.
400
401 * Comment ends with blank line
402
403 next command.
404
405 ])
406 AT_DATA([expout-base], [dnl
407 ENDCMD
408 ENDCMD
409 ENDCMD
410 ENDCMD
411 ENDCMD
412 ENDCMD
413 ENDCMD
414 ID "com"
415 ID "is"
416 ID "ambiguous"
417 WITH
418 ID "COMPUTE"
419 ENDCMD
420 ENDCMD
421 ENDCMD
422 ENDCMD
423 ENDCMD
424 ID "next"
425 ID "command"
426 ENDCMD
427 -ENDCMD
428 STOP
429 ])
430 PSPP_CHECK_SCAN([-i])
431 AT_CLEANUP
432 \f
433 AT_SETUP([DOCUMENT command])
434 AT_KEYWORDS([scan])
435 AT_DATA([input], [dnl
436 DOCUMENT one line.
437 DOC more
438     than
439         one
440             line.
441 docu
442 first.paragraph
443 isn't parsed as tokens
444
445 second paragraph.
446 ])
447 AT_DATA([expout-base], [dnl
448 ID "DOCUMENT"
449 STRING "DOCUMENT one line."
450 ENDCMD
451 ENDCMD
452 ID "DOCUMENT"
453 STRING "DOC more"
454 STRING "    than"
455 STRING "        one"
456 STRING "            line."
457 ENDCMD
458 ENDCMD
459 ID "DOCUMENT"
460 STRING "docu"
461 STRING "first.paragraph"
462 STRING "isn't parsed as tokens"
463 STRING ""
464 STRING "second paragraph."
465 -ENDCMD
466 -ENDCMD
467 STOP
468 ])
469 PSPP_CHECK_SCAN([-i])
470 AT_CLEANUP
471 \f
472 AT_SETUP([FILE LABEL commands])
473 AT_KEYWORDS([scan])
474 AT_DATA([input], [dnl
475 FIL label isn't quoted.
476 FILE
477   lab 'is quoted'.
478 FILE /*
479 /**/  lab not quoted here either
480
481 ])
482 AT_DATA([expout-base], [dnl
483 ID "FIL"
484 ID "label"
485 STRING "isn't quoted"
486 ENDCMD
487 ID "FILE"
488 ID "lab"
489 STRING "is quoted"
490 ENDCMD
491 ID "FILE"
492 ID "lab"
493 STRING "not quoted here either"
494 -ENDCMD
495 STOP
496 ])
497 PSPP_CHECK_SCAN([-i])
498 AT_CLEANUP
499 \f
500 AT_SETUP([BEGIN DATA command])
501 AT_KEYWORDS([scan])
502 AT_DATA([input], [dnl
503 begin data.
504 123
505 xxx
506 end data.
507
508 BEG /**/ DAT /*
509 5 6 7 /* x
510
511 end  data
512 end data
513 .
514 ])
515 AT_DATA([expout-base], [dnl
516 ID "begin"
517 ID "data"
518 ENDCMD
519 STRING "123"
520 STRING "xxx"
521 ID "end"
522 ID "data"
523 ENDCMD
524 ENDCMD
525 ID "BEG"
526 ID "DAT"
527 STRING "5 6 7 /* x"
528 STRING ""
529 STRING "end  data"
530 ID "end"
531 ID "data"
532 ENDCMD
533 STOP
534 ])
535 PSPP_CHECK_SCAN([-i])
536 AT_CLEANUP
537 \f
538 AT_SETUP([DO REPEAT command])
539 AT_KEYWORDS([scan])
540 AT_DATA([input], [dnl
541 do repeat x=a b c
542           y=d e f.
543   do repeat a=1 thru 5.
544 another command.
545 second command
546 + third command.
547 end /* x */ /* y */ repeat print.
548 end
549  repeat.
550 ])
551 AT_DATA([expout-base], [dnl
552 ID "do"
553 ID "repeat"
554 ID "x"
555 EQUALS
556 ID "a"
557 ID "b"
558 ID "c"
559 ID "y"
560 EQUALS
561 ID "d"
562 ID "e"
563 ID "f"
564 ENDCMD
565 STRING "  do repeat a=1 thru 5."
566 STRING "another command."
567 STRING "second command"
568 STRING "+ third command."
569 STRING "end /* x */ /* y */ repeat print."
570 ID "end"
571 ID "repeat"
572 ENDCMD
573 STOP
574 ])
575 PSPP_CHECK_SCAN([-i])
576 AT_CLEANUP
577 \f
578 AT_SETUP([DO REPEAT command in batch mode])
579 AT_KEYWORDS([scan])
580 AT_DATA([input], [dnl
581 do repeat x=a b c
582           y=d e f
583 do repeat a=1 thru 5
584 another command
585 second command
586 + third command
587 end /* x */ /* y */ repeat print
588 end
589  repeat
590 do
591   repeat #a=1
592
593   inner command
594 end repeat
595 ])
596 AT_DATA([expout-base], [dnl
597 ID "do"
598 ID "repeat"
599 ID "x"
600 EQUALS
601 ID "a"
602 ID "b"
603 ID "c"
604 ID "y"
605 EQUALS
606 ID "d"
607 ID "e"
608 ID "f"
609 ENDCMD
610 STRING "do repeat a=1 thru 5"
611 STRING "another command"
612 STRING "second command"
613 STRING "+ third command"
614 STRING "end /* x */ /* y */ repeat print"
615 ID "end"
616 ID "repeat"
617 ENDCMD
618 ID "do"
619 ID "repeat"
620 ID "#a"
621 EQUALS
622 POS_NUM 1
623 ENDCMD
624 STRING "  inner command"
625 ID "end"
626 ID "repeat"
627 STOP
628 ])
629 PSPP_CHECK_SCAN([-b])
630 AT_CLEANUP
631 \f
632 AT_SETUP([DEFINE command - simple])
633 AT_KEYWORDS([scan])
634 AT_DATA([input], [dnl
635 define !macro1()
636 var1 var2 var3
637 !enddefine.
638 ])
639 AT_DATA([expout-base], [dnl
640 ID "define"
641 MACRO_ID "!macro1"
642 LPAREN
643 RPAREN
644 STRING "var1 var2 var3"
645 MACRO_ID "!enddefine"
646 ENDCMD
647 STOP
648 ])
649 PSPP_CHECK_SCAN([-i])
650 AT_CLEANUP
651 \f
652 AT_SETUP([DEFINE command - no newline after parentheses])
653 AT_KEYWORDS([scan])
654 AT_DATA([input], [dnl
655 define !macro1() var1 var2 var3
656 !enddefine.
657 ])
658 AT_DATA([expout-base], [dnl
659 ID "define"
660 MACRO_ID "!macro1"
661 LPAREN
662 RPAREN
663 STRING " var1 var2 var3"
664 MACRO_ID "!enddefine"
665 ENDCMD
666 STOP
667 ])
668 PSPP_CHECK_SCAN([-i])
669 AT_CLEANUP
670 \f
671 AT_SETUP([DEFINE command - no newline before !ENDDEFINE])
672 AT_KEYWORDS([scan ENDDEFINE])
673 AT_DATA([input], [dnl
674 define !macro1()
675 var1 var2 var3!enddefine.
676 ])
677 AT_DATA([expout-base], [dnl
678 ID "define"
679 MACRO_ID "!macro1"
680 LPAREN
681 RPAREN
682 STRING "var1 var2 var3"
683 MACRO_ID "!enddefine"
684 ENDCMD
685 STOP
686 ])
687 PSPP_CHECK_SCAN([-i])
688 AT_CLEANUP
689 \f
690 AT_SETUP([DEFINE command - all on one line])
691 AT_KEYWORDS([scan])
692 AT_DATA([input], [dnl
693 define !macro1()var1 var2 var3!enddefine.
694 ])
695 AT_DATA([expout-base], [dnl
696 ID "define"
697 MACRO_ID "!macro1"
698 LPAREN
699 RPAREN
700 STRING "var1 var2 var3"
701 MACRO_ID "!enddefine"
702 ENDCMD
703 STOP
704 ])
705 PSPP_CHECK_SCAN([-i])
706 AT_CLEANUP
707 \f
708 AT_SETUP([DEFINE command - empty])
709 AT_KEYWORDS([scan])
710 AT_DATA([input], [dnl
711 define !macro1()
712 !enddefine.
713 ])
714 AT_DATA([expout-base], [dnl
715 ID "define"
716 MACRO_ID "!macro1"
717 LPAREN
718 RPAREN
719 MACRO_ID "!enddefine"
720 ENDCMD
721 STOP
722 ])
723 PSPP_CHECK_SCAN([-i])
724 AT_CLEANUP
725 \f
726 AT_SETUP([DEFINE command - blank lines])
727 AT_KEYWORDS([scan])
728 AT_DATA([input], [dnl
729 define !macro1()
730
731
732 !enddefine.
733 ])
734 AT_DATA([expout-base], [dnl
735 ID "define"
736 MACRO_ID "!macro1"
737 LPAREN
738 RPAREN
739 STRING ""
740 STRING ""
741 MACRO_ID "!enddefine"
742 ENDCMD
743 STOP
744 ])
745 PSPP_CHECK_SCAN([-i])
746 AT_CLEANUP
747 \f
748 AT_SETUP([DEFINE command - arguments])
749 AT_KEYWORDS([scan])
750 AT_DATA([input], [dnl
751 define !macro1(a(), b(), c())
752 !enddefine.
753 ])
754 AT_DATA([expout-base], [dnl
755 ID "define"
756 MACRO_ID "!macro1"
757 LPAREN
758 ID "a"
759 LPAREN
760 RPAREN
761 COMMA
762 ID "b"
763 LPAREN
764 RPAREN
765 COMMA
766 ID "c"
767 LPAREN
768 RPAREN
769 RPAREN
770 MACRO_ID "!enddefine"
771 ENDCMD
772 STOP
773 ])
774 PSPP_CHECK_SCAN([-i])
775 AT_CLEANUP
776 \f
777 AT_SETUP([DEFINE command - multiline arguments])
778 AT_KEYWORDS([scan])
779 AT_DATA([input], [dnl
780 define !macro1(
781   a(), b(
782   ),
783   c()
784 )
785 !enddefine.
786 ])
787 AT_DATA([expout-base], [dnl
788 ID "define"
789 MACRO_ID "!macro1"
790 LPAREN
791 ID "a"
792 LPAREN
793 RPAREN
794 COMMA
795 ID "b"
796 LPAREN
797 RPAREN
798 COMMA
799 ID "c"
800 LPAREN
801 RPAREN
802 RPAREN
803 MACRO_ID "!enddefine"
804 ENDCMD
805 STOP
806 ])
807 PSPP_CHECK_SCAN([-i])
808 AT_CLEANUP
809 \f
810 AT_SETUP([DEFINE command - arguments start on second line])
811 AT_KEYWORDS([scan])
812 AT_DATA([input], [dnl
813 define !macro1
814 (x,y,z
815 )
816 content 1
817 content 2
818 !enddefine.
819 ])
820 AT_DATA([expout-base], [dnl
821 ID "define"
822 MACRO_ID "!macro1"
823 LPAREN
824 ID "x"
825 COMMA
826 ID "y"
827 COMMA
828 ID "z"
829 RPAREN
830 STRING "content 1"
831 STRING "content 2"
832 MACRO_ID "!enddefine"
833 ENDCMD
834 STOP
835 ])
836 PSPP_CHECK_SCAN([-i])
837 AT_CLEANUP
838 \f
839 AT_SETUP([DEFINE command - early end of command 1])
840 AT_KEYWORDS([scan])
841 AT_DATA([input], [dnl
842 define !macro1.
843 data list /x 1.
844 ])
845 AT_DATA([expout-base], [dnl
846 ID "define"
847 MACRO_ID "!macro1"
848 ENDCMD
849 ID "data"
850 ID "list"
851 SLASH
852 ID "x"
853 POS_NUM 1
854 ENDCMD
855 STOP
856 ])
857 PSPP_CHECK_SCAN([-i])
858 AT_CLEANUP
859 \f
860 AT_SETUP([DEFINE command - early end of command 2])
861 AT_KEYWORDS([scan])
862 AT_DATA([input], [dnl
863 define !macro1
864 x.
865 data list /x 1.
866 ])
867 AT_DATA([expout-base], [dnl
868 ID "define"
869 MACRO_ID "!macro1"
870 ID "x"
871 ENDCMD
872 ID "data"
873 ID "list"
874 SLASH
875 ID "x"
876 POS_NUM 1
877 ENDCMD
878 STOP
879 ])
880 PSPP_CHECK_SCAN([-i])
881 AT_CLEANUP
882 \f
883 AT_SETUP([DEFINE command - early end of command 3])
884 AT_KEYWORDS([scan])
885 AT_DATA([input], [dnl
886 define !macro1(.
887 x.
888 data list /x 1.
889 ])
890 AT_DATA([expout-base], [dnl
891 ID "define"
892 MACRO_ID "!macro1"
893 LPAREN
894 ENDCMD
895 ID "x"
896 ENDCMD
897 ID "data"
898 ID "list"
899 SLASH
900 ID "x"
901 POS_NUM 1
902 ENDCMD
903 STOP
904 ])
905 PSPP_CHECK_SCAN([-i])
906 AT_CLEANUP
907 \f
908 AT_SETUP([DEFINE command - early end of command 4])
909 AT_KEYWORDS([segment])
910 AT_DATA([input], [dnl
911 dnl Notice the command terminator at the end of the DEFINE command,
912 dnl which should not be there and ends it early.
913 define !macro1.
914 data list /x 1.
915 ])
916 AT_DATA([expout-base], [dnl
917 ID "define"
918 MACRO_ID "!macro1"
919 ENDCMD
920 ID "data"
921 ID "list"
922 SLASH
923 ID "x"
924 POS_NUM 1
925 ENDCMD
926 STOP
927 ])
928 PSPP_CHECK_SCAN([-i])
929 AT_CLEANUP
930 \f
931 AT_SETUP([DEFINE command - missing !ENDDEFINE])
932 AT_KEYWORDS([scan])
933 AT_DATA([input], [dnl
934 define !macro1()
935 content line 1
936 content line 2
937 ])
938 AT_DATA([expout-base], [dnl
939 ID "define"
940 MACRO_ID "!macro1"
941 LPAREN
942 RPAREN
943 STRING "content line 1"
944 STRING "content line 2"
945 STOP
946 ])
947 PSPP_CHECK_SCAN([-i])
948 AT_CLEANUP
949 \f
950 AT_SETUP([batch mode])
951 AT_KEYWORDS([scan])
952 AT_DATA([input], [dnl
953 first command
954      another line of first command
955 +  second command
956 third command
957
958 fourth command.
959    fifth command.
960 ])
961 AT_DATA([expout-base], [dnl
962 ID "first"
963 ID "command"
964 ID "another"
965 ID "line"
966 ID "of"
967 ID "first"
968 ID "command"
969 ENDCMD
970 ID "second"
971 ID "command"
972 ENDCMD
973 ID "third"
974 ID "command"
975 ENDCMD
976 ID "fourth"
977 ID "command"
978 ENDCMD
979 ID "fifth"
980 ID "command"
981 ENDCMD
982 STOP
983 ])
984 PSPP_CHECK_SCAN([-b])
985 AT_CLEANUP