From 71acd811de3faa0259dc172bfb86d86485a7ae7c Mon Sep 17 00:00:00 2001 From: "James K. Lowden" <jklowden@symas.com> Date: Mon, 13 May 2024 19:51:32 -0400 Subject: [PATCH] accept extra trailing dots, generally --- gcc/cobol/UAT/testsuite.src/syn_value.at | 2 +- gcc/cobol/scan.l | 28 +++++++++++++++--------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/gcc/cobol/UAT/testsuite.src/syn_value.at b/gcc/cobol/UAT/testsuite.src/syn_value.at index cca89052644e..be9854a5b97f 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 9e053d7baf10..5290286c9095 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 -- GitLab