diff --git a/gcc/cobol/UAT/testsuite.src/syn_value.at b/gcc/cobol/UAT/testsuite.src/syn_value.at index cca89052644e36e1ae61ef6357811d90a93d03f6..be9854a5b97fdca7e5c9d82293bd54c75b9a9821 100644 --- a/gcc/cobol/UAT/testsuite.src/syn_value.at +++ b/gcc/cobol/UAT/testsuite.src/syn_value.at @@ -110,7 +110,7 @@ AT_DATA([prog.cob], [ STOP RUN. ]) AT_CHECK([$COMPILE_ONLY prog.cob], [1], , -[prog.cob:7: error: numeric type X-SPACE VALUE 'SPACES' requires numeric VALUE +[prog.cob:8: error: numeric type X-SPACE VALUE 'SPACES' requires numeric VALUE prog.cob:9: error: numeric type X-ABC VALUE 'abc' requires numeric VALUE prog.cob:10: error: integer type X-12-3 VALUE '12.3' requires integer VALUE prog.cob:13: error: numeric X-1234 VALUE '1234' holds only 3 digits diff --git a/gcc/cobol/scan.l b/gcc/cobol/scan.l index 9e053d7baf10e6608cc7845d25f1c17c9da0689a..5290286c9095636f8dea87ba5020abdeb81aa331 100644 --- a/gcc/cobol/scan.l +++ b/gcc/cobol/scan.l @@ -1132,7 +1132,8 @@ USE({SPC}FOR)? { return USE; } {COMMA} | [[:blank:]]*{EOL} | [[:blank:]]+{EOL}? { yy_pop_state(); /* embedded/trailing blank */ } - {DOTSEP} { yy_pop_state(); return '.'; } + {DOTSEP}[[:blank:].]+$ { yy_pop_state(); return '.'; } + {DOTSEP} { yy_pop_state(); return '.'; } [[:blank:]]+[-+]/{EDITED} { return picset(yytext[yyleng-1]); } @@ -1185,7 +1186,8 @@ USE({SPC}FOR)? { return USE; } SUPPRESS { return SUPPRESS; } REPLACING { return REPLACING; } COPY { penultimate(final_token); return COPY; } - {DOTSEP} { pop_return *yytext; } + {DOTSEP}[[:blank:].]+$ { pop_return *yytext; } + {DOTSEP} { pop_return *yytext; } [(][^().]*[)] { ydflval.string = strdup(yytext); return SUBSCRIPT; @@ -1299,15 +1301,16 @@ USE({SPC}FOR)? { return USE; } COMMON/[.]|{SPC}[[:alnum:].] { return COMMON; } INITIAL/[.]|{SPC}[[:alnum:].] { return INITIAL_kw; } - RECURSIVE { return RECURSIVE; } - PROGRAM/[.]|{SPC}[[:alnum:].] { return PROGRAM_kw; } + RECURSIVE { return RECURSIVE; } + PROGRAM/[.]|{SPC}[[:alnum:].] { return PROGRAM_kw; } INITIAL { pop_return INITIAL_kw; } COMMON { pop_return COMMON; } PROGRAM { pop_return PROGRAM; } AS/{SPC} { yyless(0); yy_pop_state(); } /* => ident_state */ - {DOTEOL} { pop_return '.'; } + [[:blank:]]*{DOTSEP}[[:blank:].]+{EOL} { pop_return '.'; } + {DOTEOL} { pop_return '.'; } } <name_state>{ @@ -1323,10 +1326,14 @@ USE({SPC}FOR)? { return USE; } yy_push_state(quoted2); } [.]/[[:blank:]]+. { return *yytext; } - {DOTEOL} { yy_pop_state(); yyless(0); } + + [[:blank:]]*{DOTSEP}[[:blank:].]+{EOL} { + yy_pop_state(); yyless(0); } + {DOTEOL} { yy_pop_state(); yyless(0); } } <dot_state>{ - [[:blank:]]*[.] { pop_return '.'; } + [[:blank:]]*[.][[:blank:].]+{EOL} { pop_return '.'; } + [[:blank:]]*[.] { pop_return '.'; } } <date_state>{ @@ -1944,9 +1951,10 @@ COPY { } -<*>OR { return OR; } -<*>AND { return AND; } -<*>[().=*/+&-] { return *yytext; } +<*>OR { return OR; } +<*>AND { return AND; } +<*>{DOTSEP}[[:blank:].]+$ { return '.'; } +<*>[().=*/+&-] { return *yytext; } <*>[[:blank:]]+ <*>\r?\n