6df0caae9e3f99d029e0fed43868cbe5d62b967e
[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 #.# .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 SKIP
38 ID "aB"
39 SKIP
40 ID "i5"
41 SKIP
42 ID "$x"
43 SKIP
44 ID "@efg"
45 SKIP
46 ID "@@."
47 SKIP
48 MACRO_ID "!abcd"
49 SKIP
50 ID "#.#"
51 SKIP
52 UNEXPECTED_DOT
53 ID "x"
54 SKIP
55 MACRO_PUNCT "_"
56 ID "z"
57 ENDCMD
58 SKIP
59 ID "abcd."
60 SKIP
61 ID "abcd"
62 ENDCMD
63 SKIP
64 ID "QRSTUV"
65 ENDCMD
66 SKIP
67 SKIP
68 ID "QrStUv"
69 ENDCMD
70 SKIP
71 SKIP
72 SKIP
73 ID "WXYZ"
74 ENDCMD
75 SKIP
76 SKIP
77 SKIP
78 UNEXPECTED_CHAR 65533
79 ENDCMD
80 SKIP
81 SKIP
82 -SKIP
83 STOP
84 ])
85 PSPP_CHECK_SCAN([-i])
86 AT_CLEANUP
87 \f
88 AT_SETUP([reserved words])
89 AT_KEYWORDS([scan])
90 AT_DATA([input], [dnl
91 and or not eq ge gt le lt ne all by to with
92 AND OR NOT EQ GE GT LE LT NE ALL BY TO WITH
93 andx orx notx eqx gex gtx lex ltx nex allx byx tox withx
94 and. with.
95 ])
96 AT_DATA([expout-base], [dnl
97 AND
98 SKIP
99 OR
100 SKIP
101 NOT
102 SKIP
103 EQ
104 SKIP
105 GE
106 SKIP
107 GT
108 SKIP
109 LE
110 SKIP
111 LT
112 SKIP
113 NE
114 SKIP
115 ALL
116 SKIP
117 BY
118 SKIP
119 TO
120 SKIP
121 WITH
122 SKIP
123 AND
124 SKIP
125 OR
126 SKIP
127 NOT
128 SKIP
129 EQ
130 SKIP
131 GE
132 SKIP
133 GT
134 SKIP
135 LE
136 SKIP
137 LT
138 SKIP
139 NE
140 SKIP
141 ALL
142 SKIP
143 BY
144 SKIP
145 TO
146 SKIP
147 WITH
148 SKIP
149 ID "andx"
150 SKIP
151 ID "orx"
152 SKIP
153 ID "notx"
154 SKIP
155 ID "eqx"
156 SKIP
157 ID "gex"
158 SKIP
159 ID "gtx"
160 SKIP
161 ID "lex"
162 SKIP
163 ID "ltx"
164 SKIP
165 ID "nex"
166 SKIP
167 ID "allx"
168 SKIP
169 ID "byx"
170 SKIP
171 ID "tox"
172 SKIP
173 ID "withx"
174 SKIP
175 ID "and."
176 SKIP
177 WITH
178 ENDCMD
179 -SKIP
180 STOP
181 ])
182 PSPP_CHECK_SCAN([-i])
183 AT_CLEANUP
184 \f
185 AT_SETUP([punctuation])
186 AT_KEYWORDS([scan])
187 AT_DATA([input], [dnl
188 ~ & | = >= > <= < ~= <> ( ) , - + * / [[ ]] **
189 ~&|=>=><=<~=<>(),-+*/[[]]**
190 % : ; ? _ ` { } ~
191 ])
192 AT_DATA([expout-base], [dnl
193 NOT
194 SKIP
195 AND
196 SKIP
197 OR
198 SKIP
199 EQUALS
200 SKIP
201 GE
202 SKIP
203 GT
204 SKIP
205 LE
206 SKIP
207 LT
208 SKIP
209 NE
210 SKIP
211 NE
212 SKIP
213 LPAREN
214 SKIP
215 RPAREN
216 SKIP
217 COMMA
218 SKIP
219 DASH
220 SKIP
221 PLUS
222 SKIP
223 ASTERISK
224 SKIP
225 SLASH
226 SKIP
227 LBRACK
228 SKIP
229 RBRACK
230 SKIP
231 EXP
232 SKIP
233 NOT
234 AND
235 OR
236 EQUALS
237 GE
238 GT
239 LE
240 LT
241 NE
242 NE
243 LPAREN
244 RPAREN
245 COMMA
246 DASH
247 PLUS
248 ASTERISK
249 SLASH
250 LBRACK
251 RBRACK
252 EXP
253 SKIP
254 MACRO_PUNCT "%"
255 SKIP
256 MACRO_PUNCT ":"
257 SKIP
258 MACRO_PUNCT ";"
259 SKIP
260 MACRO_PUNCT "?"
261 SKIP
262 MACRO_PUNCT "_"
263 SKIP
264 MACRO_PUNCT "`"
265 SKIP
266 MACRO_PUNCT "{"
267 SKIP
268 MACRO_PUNCT "}"
269 SKIP
270 NOT
271 -SKIP
272 STOP
273 ])
274 PSPP_CHECK_SCAN([-i])
275 AT_CLEANUP
276 \f
277 AT_SETUP([numbers])
278 AT_KEYWORDS([scan])
279 AT_DATA([input], [dnl
280 0 1 01 001. 1.
281 123. /* comment 1 */ /* comment 2 */
282 .1 0.1 00.1 00.10
283 5e1 6E-1 7e+1 6E+01 6e-03
284 .3E1 .4e-1 .5E+1 .6e+01 .7E-03
285 1.23e1 45.6E-1 78.9e+1 99.9E+01 11.2e-03
286 . 1e e1 1e+ 1e-
287 ])
288 AT_DATA([expout-base], [dnl
289 POS_NUM
290 SKIP
291 POS_NUM 1
292 SKIP
293 POS_NUM 1
294 SKIP
295 POS_NUM 1
296 SKIP
297 POS_NUM 1
298 ENDCMD
299 SKIP
300 POS_NUM 123
301 ENDCMD
302 SKIP
303 SKIP
304 SKIP
305 SKIP
306 SKIP
307 ENDCMD
308 POS_NUM 1
309 SKIP
310 POS_NUM 0.1
311 SKIP
312 POS_NUM 0.1
313 SKIP
314 POS_NUM 0.1
315 SKIP
316 POS_NUM 50
317 SKIP
318 POS_NUM 0.6
319 SKIP
320 POS_NUM 70
321 SKIP
322 POS_NUM 60
323 SKIP
324 POS_NUM 0.006
325 SKIP
326 ENDCMD
327 POS_NUM 30
328 SKIP
329 POS_NUM 0.04
330 SKIP
331 POS_NUM 5
332 SKIP
333 POS_NUM 6
334 SKIP
335 POS_NUM 0.0007
336 SKIP
337 POS_NUM 12.3
338 SKIP
339 POS_NUM 4.56
340 SKIP
341 POS_NUM 789
342 SKIP
343 POS_NUM 999
344 SKIP
345 POS_NUM 0.0112
346 SKIP
347 ENDCMD
348 SKIP
349 EXPECTED_EXPONENT "1e"
350 SKIP
351 ID "e1"
352 SKIP
353 EXPECTED_EXPONENT "1e+"
354 SKIP
355 EXPECTED_EXPONENT "1e-"
356 -SKIP
357 STOP
358 ])
359 PSPP_CHECK_SCAN([-i])
360 AT_CLEANUP
361 \f
362 AT_SETUP([strings])
363 AT_KEYWORDS([scan])
364 AT_DATA([input], [dnl
365 'x' "y" 'abc'
366 'Don''t' "Can't" 'Won''t'
367 """quoted""" '"quoted"'
368 '' "" '''' """"
369 'missing end quote
370 "missing double quote
371 'x' + "y"
372 + 'z' +
373 'a' /* abc */ + "b" /*
374 + 'c' +/* */"d"/* */+'e'
375 'foo'
376 +          /* special case: + in column 0 would ordinarily start a new command
377 'bar'
378 'foo'
379  +
380 'bar'
381 'foo'
382 +
383
384 'bar'
385
386 +
387 x"4142"+'5152'
388 "4142"+
389 x'5152'
390 x"4142"
391 +u'304a'
392 "�あいうえお"
393 "abc"+U"FFFD"+u'3048'+"xyz"
394 ])
395 AT_DATA([expout-base], [dnl
396 STRING "x"
397 SKIP
398 STRING "y"
399 SKIP
400 STRING "abc"
401 SKIP
402 STRING "Don't"
403 SKIP
404 STRING "Can't"
405 SKIP
406 STRING "Won't"
407 SKIP
408 STRING ""quoted""
409 SKIP
410 STRING ""quoted""
411 SKIP
412 STRING ""
413 SKIP
414 STRING ""
415 SKIP
416 STRING "'"
417 SKIP
418 STRING """
419 SKIP
420 EXPECTED_QUOTE
421 SKIP
422 EXPECTED_QUOTE
423 SKIP
424 STRING "xyzabcde"
425 SKIP
426 STRING "foobar"
427 SKIP
428 STRING "foobar"
429 SKIP
430 STRING "foo"
431 SKIP
432 PLUS
433 SKIP
434 ENDCMD
435 SKIP
436 STRING "bar"
437 SKIP
438 ENDCMD
439 SKIP
440 PLUS
441 SKIP
442 STRING "AB5152"
443 SKIP
444 STRING "4142QR"
445 SKIP
446 STRING "ABお"
447 SKIP
448 STRING "�あいうえお"
449 SKIP
450 STRING "abc�えxyz"
451 -SKIP
452 STOP
453 ])
454 PSPP_CHECK_SCAN([-i])
455 AT_CLEANUP
456 \f
457 AT_SETUP([@%:@! construct])
458 AT_KEYWORDS([scan])
459 AT_DATA([input], [dnl
460 #! /usr/bin/pspp
461 #! /usr/bin/pspp
462 ])
463 AT_DATA([expout-base], [dnl
464 SKIP
465 SKIP
466 ID "#"
467 MACRO_ID "!"
468 SKIP
469 SLASH
470 ID "usr"
471 SLASH
472 ID "bin"
473 SLASH
474 ID "pspp"
475 -SKIP
476 STOP
477 ])
478 PSPP_CHECK_SCAN([-i])
479 AT_CLEANUP
480 \f
481 AT_SETUP([* and COMMENT commands])
482 AT_KEYWORDS([scan])
483 AT_DATA([input], [dnl
484 * Comment commands "don't
485 have to contain valid tokens.
486
487 ** Check ambiguity with ** token.
488 ****************.
489
490 comment keyword works too.
491 COMM also.
492 com is ambiguous with COMPUTE.
493
494    * Comment need not start at left margin.
495
496 * Comment ends with blank line
497
498 next command.
499
500 ])
501 AT_DATA([expout-base], [dnl
502 SKIP
503 SKIP
504 SKIP
505 ENDCMD
506 SKIP
507 ENDCMD
508 SKIP
509 SKIP
510 ENDCMD
511 SKIP
512 SKIP
513 ENDCMD
514 SKIP
515 ENDCMD
516 SKIP
517 SKIP
518 ENDCMD
519 SKIP
520 SKIP
521 ENDCMD
522 SKIP
523 ID "com"
524 SKIP
525 ID "is"
526 SKIP
527 ID "ambiguous"
528 SKIP
529 WITH
530 SKIP
531 ID "COMPUTE"
532 ENDCMD
533 SKIP
534 ENDCMD
535 SKIP
536 SKIP
537 SKIP
538 ENDCMD
539 SKIP
540 ENDCMD
541 SKIP
542 SKIP
543 SKIP
544 ENDCMD
545 SKIP
546 ID "next"
547 SKIP
548 ID "command"
549 ENDCMD
550 SKIP
551 -ENDCMD
552 -SKIP
553 STOP
554 ])
555 PSPP_CHECK_SCAN([-i])
556 AT_CLEANUP
557 \f
558 AT_SETUP([DOCUMENT command])
559 AT_KEYWORDS([scan])
560 AT_DATA([input], [dnl
561 DOCUMENT one line.
562 DOC more
563     than
564         one
565             line.
566 docu
567 first.paragraph
568 isn't parsed as tokens
569
570 second paragraph.
571 ])
572 AT_DATA([expout-base], [dnl
573 ID "DOCUMENT"
574 STRING "DOCUMENT one line."
575 ENDCMD
576 ENDCMD
577 SKIP
578 ID "DOCUMENT"
579 STRING "DOC more"
580 SKIP
581 STRING "    than"
582 SKIP
583 STRING "        one"
584 SKIP
585 STRING "            line."
586 ENDCMD
587 ENDCMD
588 SKIP
589 ID "DOCUMENT"
590 STRING "docu"
591 SKIP
592 STRING "first.paragraph"
593 SKIP
594 STRING "isn't parsed as tokens"
595 SKIP
596 STRING ""
597 SKIP
598 STRING "second paragraph."
599 -ENDCMD
600 -ENDCMD
601 -SKIP
602 STOP
603 ])
604 PSPP_CHECK_SCAN([-i])
605 AT_CLEANUP
606 \f
607 AT_SETUP([TITLE, SUBTITLE, FILE LABEL commands])
608 AT_KEYWORDS([scan])
609 AT_DATA([input], [dnl
610 title/**/'Quoted string title'.
611 tit /*
612 "Quoted string on second line".
613 sub "Quoted string subtitle"
614  .
615
616 TITL /* Not a */ quoted string title.
617 SUBT Not a quoted string /* subtitle
618
619 FIL label isn't quoted.
620 FILE
621   lab 'is quoted'.
622 FILE /*
623 /**/  lab not quoted here either
624
625 ])
626 AT_DATA([expout-base], [dnl
627 ID "title"
628 SKIP
629 STRING "Quoted string title"
630 ENDCMD
631 SKIP
632 ID "tit"
633 SKIP
634 SKIP
635 SKIP
636 STRING "Quoted string on second line"
637 ENDCMD
638 SKIP
639 ID "sub"
640 SKIP
641 STRING "Quoted string subtitle"
642 SKIP
643 SKIP
644 ENDCMD
645 SKIP
646 ENDCMD
647 SKIP
648 ID "TITL"
649 SKIP
650 STRING "/* Not a */ quoted string title"
651 ENDCMD
652 SKIP
653 ID "SUBT"
654 SKIP
655 STRING "Not a quoted string /* subtitle"
656 SKIP
657 ENDCMD
658 SKIP
659 ID "FIL"
660 SKIP
661 ID "label"
662 SKIP
663 STRING "isn't quoted"
664 ENDCMD
665 SKIP
666 ID "FILE"
667 SKIP
668 SKIP
669 ID "lab"
670 SKIP
671 STRING "is quoted"
672 ENDCMD
673 SKIP
674 ID "FILE"
675 SKIP
676 SKIP
677 SKIP
678 SKIP
679 SKIP
680 ID "lab"
681 SKIP
682 STRING "not quoted here either"
683 SKIP
684 -ENDCMD
685 -SKIP
686 STOP
687 ])
688 PSPP_CHECK_SCAN([-i])
689 AT_CLEANUP
690 \f
691 AT_SETUP([BEGIN DATA command])
692 AT_KEYWORDS([scan])
693 AT_DATA([input], [dnl
694 begin data.
695 123
696 xxx
697 end data.
698
699 BEG /**/ DAT /*
700 5 6 7 /* x
701
702 end  data
703 end data
704 .
705 ])
706 AT_DATA([expout-base], [dnl
707 ID "begin"
708 SKIP
709 ID "data"
710 ENDCMD
711 SKIP
712 STRING "123"
713 SKIP
714 STRING "xxx"
715 SKIP
716 ID "end"
717 SKIP
718 ID "data"
719 ENDCMD
720 SKIP
721 ENDCMD
722 SKIP
723 ID "BEG"
724 SKIP
725 SKIP
726 SKIP
727 ID "DAT"
728 SKIP
729 SKIP
730 SKIP
731 STRING "5 6 7 /* x"
732 SKIP
733 STRING ""
734 SKIP
735 STRING "end  data"
736 SKIP
737 ID "end"
738 SKIP
739 ID "data"
740 SKIP
741 ENDCMD
742 -SKIP
743 STOP
744 ])
745 PSPP_CHECK_SCAN([-i])
746 AT_CLEANUP
747 \f
748 AT_SETUP([DO REPEAT command])
749 AT_KEYWORDS([scan])
750 AT_DATA([input], [dnl
751 do repeat x=a b c
752           y=d e f.
753   do repeat a=1 thru 5.
754 another command.
755 second command
756 + third command.
757 end /* x */ /* y */ repeat print.
758 end
759  repeat.
760 ])
761 AT_DATA([expout-base], [dnl
762 ID "do"
763 SKIP
764 ID "repeat"
765 SKIP
766 ID "x"
767 EQUALS
768 ID "a"
769 SKIP
770 ID "b"
771 SKIP
772 ID "c"
773 SKIP
774 SKIP
775 ID "y"
776 EQUALS
777 ID "d"
778 SKIP
779 ID "e"
780 SKIP
781 ID "f"
782 ENDCMD
783 SKIP
784 STRING "  do repeat a=1 thru 5."
785 SKIP
786 STRING "another command."
787 SKIP
788 STRING "second command"
789 SKIP
790 STRING "+ third command."
791 SKIP
792 STRING "end /* x */ /* y */ repeat print."
793 SKIP
794 ID "end"
795 SKIP
796 SKIP
797 ID "repeat"
798 ENDCMD
799 -SKIP
800 STOP
801 ])
802 PSPP_CHECK_SCAN([-i])
803 AT_CLEANUP
804 \f
805 AT_SETUP([DO REPEAT command in batch mode])
806 AT_KEYWORDS([scan])
807 AT_DATA([input], [dnl
808 do repeat x=a b c
809           y=d e f
810 do repeat a=1 thru 5
811 another command
812 second command
813 + third command
814 end /* x */ /* y */ repeat print
815 end
816  repeat
817 do
818   repeat #a=1
819
820   inner command
821 end repeat
822 ])
823 AT_DATA([expout-base], [dnl
824 ID "do"
825 SKIP
826 ID "repeat"
827 SKIP
828 ID "x"
829 EQUALS
830 ID "a"
831 SKIP
832 ID "b"
833 SKIP
834 ID "c"
835 SKIP
836 SKIP
837 ID "y"
838 EQUALS
839 ID "d"
840 SKIP
841 ID "e"
842 SKIP
843 ID "f"
844 SKIP
845 ENDCMD
846 STRING "do repeat a=1 thru 5"
847 SKIP
848 STRING "another command"
849 SKIP
850 STRING "second command"
851 SKIP
852 STRING "+ third command"
853 SKIP
854 STRING "end /* x */ /* y */ repeat print"
855 SKIP
856 ID "end"
857 SKIP
858 SKIP
859 ID "repeat"
860 SKIP
861 ENDCMD
862 ID "do"
863 SKIP
864 SKIP
865 ID "repeat"
866 SKIP
867 ID "#a"
868 EQUALS
869 POS_NUM 1
870 SKIP
871 ENDCMD
872 SKIP
873 STRING "  inner command"
874 SKIP
875 ID "end"
876 SKIP
877 ID "repeat"
878 -SKIP
879 STOP
880 ])
881 PSPP_CHECK_SCAN([-b])
882 AT_CLEANUP
883 \f
884 AT_SETUP([DEFINE command - simple])
885 AT_KEYWORDS([scan])
886 AT_DATA([input], [dnl
887 define !macro1()
888 var1 var2 var3
889 !enddefine.
890 ])
891 AT_DATA([expout-base], [dnl
892 ID "define"
893 SKIP
894 MACRO_ID "!macro1"
895 LPAREN
896 RPAREN
897 SKIP
898 STRING "var1 var2 var3"
899 SKIP
900 MACRO_ID "!enddefine"
901 ENDCMD
902 -SKIP
903 STOP
904 ])
905 PSPP_CHECK_SCAN([-i])
906 AT_CLEANUP
907 \f
908 AT_SETUP([DEFINE command - empty])
909 AT_KEYWORDS([scan])
910 AT_DATA([input], [dnl
911 define !macro1()
912 !enddefine.
913 ])
914 AT_DATA([expout-base], [dnl
915 ID "define"
916 SKIP
917 MACRO_ID "!macro1"
918 LPAREN
919 RPAREN
920 SKIP
921 MACRO_ID "!enddefine"
922 ENDCMD
923 -SKIP
924 STOP
925 ])
926 PSPP_CHECK_SCAN([-i])
927 AT_CLEANUP
928 \f
929 AT_SETUP([DEFINE command - arguments])
930 AT_KEYWORDS([scan])
931 AT_DATA([input], [dnl
932 define !macro1(a(), b(), c())
933 !enddefine.
934 ])
935 AT_DATA([expout-base], [dnl
936 ID "define"
937 SKIP
938 MACRO_ID "!macro1"
939 LPAREN
940 ID "a"
941 LPAREN
942 RPAREN
943 COMMA
944 SKIP
945 ID "b"
946 LPAREN
947 RPAREN
948 COMMA
949 SKIP
950 ID "c"
951 LPAREN
952 RPAREN
953 RPAREN
954 SKIP
955 MACRO_ID "!enddefine"
956 ENDCMD
957 -SKIP
958 STOP
959 ])
960 PSPP_CHECK_SCAN([-i])
961 AT_CLEANUP
962 \f
963 AT_SETUP([DEFINE command - multiline arguments])
964 AT_KEYWORDS([scan])
965 AT_DATA([input], [dnl
966 define !macro1(
967   a(), b(
968   ),
969   c()
970 )
971 !enddefine.
972 ])
973 AT_DATA([expout-base], [dnl
974 ID "define"
975 SKIP
976 MACRO_ID "!macro1"
977 LPAREN
978 SKIP
979 SKIP
980 ID "a"
981 LPAREN
982 RPAREN
983 COMMA
984 SKIP
985 ID "b"
986 LPAREN
987 SKIP
988 SKIP
989 RPAREN
990 COMMA
991 SKIP
992 SKIP
993 ID "c"
994 LPAREN
995 RPAREN
996 SKIP
997 RPAREN
998 SKIP
999 MACRO_ID "!enddefine"
1000 ENDCMD
1001 -SKIP
1002 STOP
1003 ])
1004 PSPP_CHECK_SCAN([-i])
1005 AT_CLEANUP
1006 \f
1007 AT_SETUP([DEFINE command - arguments start on second line])
1008 AT_KEYWORDS([scan])
1009 AT_DATA([input], [dnl
1010 define !macro1
1011 (x,y,z
1012 )
1013 content 1
1014 content 2
1015 !enddefine.
1016 ])
1017 AT_DATA([expout-base], [dnl
1018 ID "define"
1019 SKIP
1020 MACRO_ID "!macro1"
1021 SKIP
1022 LPAREN
1023 ID "x"
1024 COMMA
1025 ID "y"
1026 COMMA
1027 ID "z"
1028 SKIP
1029 RPAREN
1030 SKIP
1031 STRING "content 1"
1032 SKIP
1033 STRING "content 2"
1034 SKIP
1035 MACRO_ID "!enddefine"
1036 ENDCMD
1037 -SKIP
1038 STOP
1039 ])
1040 PSPP_CHECK_SCAN([-i])
1041 AT_CLEANUP
1042 \f
1043 AT_SETUP([DEFINE command - early end of command 1])
1044 AT_KEYWORDS([scan])
1045 AT_DATA([input], [dnl
1046 define !macro1.
1047 data list /x 1.
1048 ])
1049 AT_DATA([expout-base], [dnl
1050 ID "define"
1051 SKIP
1052 MACRO_ID "!macro1"
1053 ENDCMD
1054 SKIP
1055 ID "data"
1056 SKIP
1057 ID "list"
1058 SKIP
1059 SLASH
1060 ID "x"
1061 SKIP
1062 POS_NUM 1
1063 ENDCMD
1064 -SKIP
1065 STOP
1066 ])
1067 PSPP_CHECK_SCAN([-i])
1068 AT_CLEANUP
1069 \f
1070 AT_SETUP([DEFINE command - early end of command 2])
1071 AT_KEYWORDS([scan])
1072 AT_DATA([input], [dnl
1073 define !macro1
1074 x.
1075 data list /x 1.
1076 ])
1077 AT_DATA([expout-base], [dnl
1078 ID "define"
1079 SKIP
1080 MACRO_ID "!macro1"
1081 SKIP
1082 ID "x"
1083 ENDCMD
1084 SKIP
1085 ID "data"
1086 SKIP
1087 ID "list"
1088 SKIP
1089 SLASH
1090 ID "x"
1091 SKIP
1092 POS_NUM 1
1093 ENDCMD
1094 -SKIP
1095 STOP
1096 ])
1097 PSPP_CHECK_SCAN([-i])
1098 AT_CLEANUP
1099 \f
1100 AT_SETUP([DEFINE command - early end of command 3])
1101 AT_KEYWORDS([scan])
1102 AT_DATA([input], [dnl
1103 define !macro1(.
1104 x.
1105 data list /x 1.
1106 ])
1107 AT_DATA([expout-base], [dnl
1108 ID "define"
1109 SKIP
1110 MACRO_ID "!macro1"
1111 LPAREN
1112 ENDCMD
1113 SKIP
1114 ID "x"
1115 ENDCMD
1116 SKIP
1117 ID "data"
1118 SKIP
1119 ID "list"
1120 SKIP
1121 SLASH
1122 ID "x"
1123 SKIP
1124 POS_NUM 1
1125 ENDCMD
1126 -SKIP
1127 STOP
1128 ])
1129 PSPP_CHECK_SCAN([-i])
1130 AT_CLEANUP
1131 \f
1132 AT_SETUP([DEFINE command - early end of command 4])
1133 AT_KEYWORDS([segment])
1134 AT_DATA([input], [dnl
1135 dnl Notice the command terminator at the end of the DEFINE command,
1136 dnl which should not be there and ends it early.
1137 define !macro1.
1138 data list /x 1.
1139 ])
1140 AT_DATA([expout-base], [dnl
1141 ID "define"
1142 SKIP
1143 MACRO_ID "!macro1"
1144 ENDCMD
1145 SKIP
1146 ID "data"
1147 SKIP
1148 ID "list"
1149 SKIP
1150 SLASH
1151 ID "x"
1152 SKIP
1153 POS_NUM 1
1154 ENDCMD
1155 -SKIP
1156 STOP
1157 ])
1158 PSPP_CHECK_SCAN([-i])
1159 AT_CLEANUP
1160 \f
1161 AT_SETUP([DEFINE command - missing !ENDDEFINE])
1162 AT_KEYWORDS([scan])
1163 AT_DATA([input], [dnl
1164 define !macro1()
1165 content line 1
1166 content line 2
1167 ])
1168 AT_DATA([expout-base], [dnl
1169 ID "define"
1170 SKIP
1171 MACRO_ID "!macro1"
1172 LPAREN
1173 RPAREN
1174 SKIP
1175 STRING "content line 1"
1176 SKIP
1177 STRING "content line 2"
1178 -SKIP
1179 STOP
1180 ])
1181 PSPP_CHECK_SCAN([-i])
1182 AT_CLEANUP
1183 \f
1184 AT_SETUP([batch mode])
1185 AT_KEYWORDS([scan])
1186 AT_DATA([input], [dnl
1187 first command
1188      another line of first command
1189 +  second command
1190 third command
1191
1192 fourth command.
1193    fifth command.
1194 ])
1195 AT_DATA([expout-base], [dnl
1196 ID "first"
1197 SKIP
1198 ID "command"
1199 SKIP
1200 SKIP
1201 ID "another"
1202 SKIP
1203 ID "line"
1204 SKIP
1205 ID "of"
1206 SKIP
1207 ID "first"
1208 SKIP
1209 ID "command"
1210 SKIP
1211 ENDCMD
1212 SKIP
1213 ID "second"
1214 SKIP
1215 ID "command"
1216 SKIP
1217 ENDCMD
1218 ID "third"
1219 SKIP
1220 ID "command"
1221 SKIP
1222 ENDCMD
1223 SKIP
1224 ID "fourth"
1225 SKIP
1226 ID "command"
1227 ENDCMD
1228 SKIP
1229 SKIP
1230 ID "fifth"
1231 SKIP
1232 ID "command"
1233 ENDCMD
1234 -SKIP
1235 STOP
1236 ])
1237 PSPP_CHECK_SCAN([-b])
1238 AT_CLEANUP