From af5c2360d8049b31b8d1b4323930c35e03ef6385 Mon Sep 17 00:00:00 2001 From: "James K. Lowden" <jklowden@symas.com> Date: Fri, 31 Jan 2025 04:28:11 -0500 Subject: [PATCH] eliminate use of Bison yytname --- gcc/cobol/cdf.y | 109 ++- gcc/cobol/cdftok.awk | 12 +- gcc/cobol/parse.y | 627 +++++++++++----- gcc/cobol/parse_ante.h | 15 +- gcc/cobol/scan.l | 4 +- gcc/cobol/scan_ante.h | 1 - gcc/cobol/token_names.h | 1373 +++++++++++++++++++++++++++++++++++ gcc/cobol/token_names.h.gen | 67 ++ gcc/cobol/util.cc | 81 --- 9 files changed, 1973 insertions(+), 316 deletions(-) create mode 100644 gcc/cobol/token_names.h create mode 100755 gcc/cobol/token_names.h.gen diff --git a/gcc/cobol/cdf.y b/gcc/cobol/cdf.y index 3f72dd7f70aa..78870b544940 100644 --- a/gcc/cobol/cdf.y +++ b/gcc/cobol/cdf.y @@ -57,8 +57,6 @@ integer_literal( const char input[] ) { return std::make_pair(v, fOK); } -const char * cdf_token_str( int token ); - /* "The renamed symbols include 'yyparse', 'yylex', 'yyerror', 'yynerrs', 'yylval', 'yylloc', 'yychar' and 'yydebug'. [...] The renamed macros include 'YYSTYPE', 'YYLTYPE', and 'YYDEBUG'" */ @@ -227,7 +225,7 @@ apply_cdf_turn( exception_turns_t& turns ) { } if( getenv("SHOW_PARSE") ) enabled_exceptions.dump(); return true; -} +} %} %union { @@ -251,8 +249,8 @@ apply_cdf_turn( exception_turns_t& turns ) { %type <string> LSUB RSUB SUBSCRIPT %type <cdfarg> namelit name_any name_one %type <string> name subscript subscripts inof -%token <boolean> BOOL -%token <number> FEATURE 365 NUMBER 304 EXCEPTION_NAME 282 +%token <boolean> BOOL +%token <number> FEATURE 363 NUMBER 302 EXCEPTION_NAME 280 "EXCEPTION NAME" %type <cdfval> cdf_expr %type <cdfval> cdf_relexpr cdf_reloper cdf_and cdf_bool_expr @@ -262,41 +260,48 @@ apply_cdf_turn( exception_turns_t& turns ) { %type <file> filename %type <files> filenames -%token BY 479 -%token COPY 362 -%token CDF_DISPLAY 384 -%token IN 598 -%token NAME 288 -%token NUMSTR 306 -%token OF 679 -%token PSEUDOTEXT 714 -%token REPLACING 737 -%token LITERAL 299 -%token SUPPRESS 376 - -%token LSUB 367 SUBSCRIPT 375 RSUB 372 - -%token CDF_DEFINE 383 -%token CDF_IF 385 CDF_ELSE 386 CDF_END_IF 387 -%token CDF_EVALUATE 388 CDF_WHEN 389 CDF_END_EVALUATE 390 - -%token AS 461 CONSTANT 361 DEFINED 363 +%token BY 476 +%token COPY 360 +%token CDF_DISPLAY 382 ">>DISPLAY" +%token IN 595 +%token NAME 286 +%token NUMSTR 304 "numeric literal" +%token OF 676 +%token PSEUDOTEXT 711 +%token REPLACING 734 +%token LITERAL 297 +%token SUPPRESS 374 + +%token LSUB 365 "(" +%token SUBSCRIPT 373 RSUB 370 ")" + +%token CDF_DEFINE 381 ">>DEFINE" +%token CDF_IF 383 ">>IF" +%token CDF_ELSE 384 ">>ELSE" +%token CDF_END_IF 385 ">>END-IF" +%token CDF_EVALUATE 386 ">>EVALUATE" +%token CDF_WHEN 387 ">>WHEN" +%token CDF_END_EVALUATE 388 ">>END-EVALUATE" + +%token AS 458 CONSTANT 359 DEFINED 361 %type <boolean> DEFINED -%token OTHER 691 PARAMETER_kw 368 OFF 680 OVERRIDE 369 -%token THRU 931 -%token TRUE_kw 807 +%token OTHER 688 PARAMETER_kw 366 "PARAMETER" +%token OFF 677 OVERRIDE 367 +%token THRU 930 +%token TRUE_kw 804 "True" -%token CALL_COBOL 391 CALL_VERBATIM 392 +%token CALL_COBOL 389 "CALL" +%token CALL_VERBATIM 390 "CALL (as C)" -%token TURN 809 CHECKING 489 LOCATION 642 ON 682 WITH 835 +%token TURN 806 CHECKING 486 LOCATION 639 ON 679 WITH 832 -%left OR 932 -%left AND 933 -%right NOT 934 -%left '<' '>' '=' NE 935 LE 936 GE 937 -%left '-' '+' -%left '*' '/' -%right NEG 939 +%left OR 931 +%left AND 932 +%right NOT 933 +%left '<' '>' '=' NE 934 LE 935 GE 936 +%left '-' '+' +%left '*' '/' +%right NEG 938 %define api.prefix {ydf} %define api.token.prefix{YDF_} @@ -344,7 +349,7 @@ cdf_display: CDF_DISPLAY strings { } } ; -strings: LITERAL { +strings: LITERAL { display_msg = xstrdup($1); } | strings LITERAL { @@ -356,11 +361,11 @@ strings: LITERAL { partials: partial { - if( ! scanner_parsing() ) YYACCEPT; + if( ! scanner_parsing() ) YYACCEPT; } | partials partial { - if( ! scanner_parsing() ) YYACCEPT; + if( ! scanner_parsing() ) YYACCEPT; } ; partial: cdf_if /* text */ @@ -505,7 +510,7 @@ cdf_if: CDF_IF cdf_cond_expr { ////if( scanner_parsing() ) yyerrok; } CDF_END_IF { // not pushed, don't pop if( ! scanner_parsing() ) YYACCEPT; - } + } ; cdf_evaluate: CDF_EVALUATE cdf_expr @@ -567,13 +572,13 @@ cdf_relexpr: cdf_relexpr '<' cdf_expr { $$ = $1(@1) < $3(@3); } { $$ = $1 == $3; } else { - const char *msg = $1.string? + const char *msg = $1.string? "incommensurate comparison is FALSE: '%s' = %ld" : "incommensurate comparison is FALSE: %ld = '%s'" ; error_msg(@1, msg); } } - | cdf_relexpr NE cdf_expr + | cdf_relexpr NE cdf_expr { $$ = cdfval_t(false); if( ( $1.string && $3.string) || @@ -581,7 +586,7 @@ cdf_relexpr: cdf_relexpr '<' cdf_expr { $$ = $1(@1) < $3(@3); } { $$ = $1 != $3; } else { - const char *msg = $1.string? + const char *msg = $1.string? "incommensurate comparison is FALSE: '%s' = %ld" : "incommensurate comparison is FALSE: %ld = '%s'" ; error_msg(@1, msg); @@ -807,13 +812,13 @@ defined_cmd( const char arg[] ) value = cdfval_t(p); // it's a string } } - + dictionary[name] = value; auto cdf_name = dictionary.find(name); assert(cdf_name != dictionary.end()); assert(cdf_name->second.is_numeric() || cdf_name->second.string != NULL); - + if( yydebug ) { if( cdf_name->second.is_numeric() ) { dbgmsg("%s: added -D %s = %ld", __func__, name, cdf_name->second.as_number()); @@ -824,17 +829,6 @@ defined_cmd( const char arg[] ) return true; } -const char * -cdf_token_str( int token ) { - if( token < 255 ) { - static char ascii[2]; - ascii[0] = token; - return ascii; - } - size_t i = token - 255; - return i < COUNT_OF(yytname)? yytname[i] : NULL; -} - bool operator==( const cdfval_base_t& lhs, int rhs ) { gcc_assert( !lhs.string ); return lhs.number == rhs; @@ -957,5 +951,4 @@ cdfval_base_t& cdfval_base_t::operator()( const YDFLTYPE& loc ) { static cdfval_t zero(0); return verify_integer(loc, *this) ? *this : zero; -} - +} diff --git a/gcc/cobol/cdftok.awk b/gcc/cobol/cdftok.awk index 8ebfedcc9242..30bb1ef0e03e 100755 --- a/gcc/cobol/cdftok.awk +++ b/gcc/cobol/cdftok.awk @@ -27,15 +27,22 @@ BEGIN { # match later are used. finding_tokens && /^ +[[:alnum:]_]+ =/ { gsub(/^ +/, "") - tokens[$1] = $3 + value = $3 + if( match($0, /".+"/) ) { + alias = substr($0, RSTART, RLENGTH) + value = value " " alias + } + tokens[$1] = value + #rint "found:", $1, tokens[$1] > "/dev/stderr" } finding_tokens { next } /%(token|left|right)/ { sub(/ +$/, "") + sub(/["].+/, "") # delete any string value (must be only one on the line) for( i=2; i <= NF; i++ ) { - #rint i, "of", NF, "token:", $i, tokens[$i], "{" $0 "}" + #rint $i, "becomes", $i " " tokens[$i] >> "/dev/stderr" $i = $i " " tokens[$i] # assign value from parse.h to token # delete next field if it holds the token's prior value if( i < NF && $(i+1) ~ /^[0-9]+$/ ) { @@ -43,6 +50,7 @@ finding_tokens { next } $i = "" } } + sub(/ +$/, "") } { print } diff --git a/gcc/cobol/parse.y b/gcc/cobol/parse.y index 009fb4e42139..f87b935e932c 100644 --- a/gcc/cobol/parse.y +++ b/gcc/cobol/parse.y @@ -314,19 +314,16 @@ END_PROGRAM "END PROGRAM" END_SUBPROGRAM "END PROGRAM <contained program>" -%token HIGH_ORDER_LEFT "HIGH-ORDER-LEFT" - HIGH_ORDER_RIGHT "HIGH-ORDER-RIGHT" - %token JUSTIFIED RETURNING NO_CONDITION "invalid token" %token <string> ALNUM ALPHED -%token <number> ERROR EXCEPTION SIZE_ERROR -%token <ec_type> EXCEPTION_NAME -%token <number> LEVEL LEVEL66 LEVEL78 LEVEL88 +%token <number> ERROR EXCEPTION SIZE_ERROR "SIZE ERROR" +%token <ec_type> EXCEPTION_NAME "EXCEPTION NAME" +%token <number> LEVEL LEVEL66 "66" LEVEL78 "78" LEVEL88 "88" %token <string> CLASS_NAME "class name" NAME NAME88 "Level 88 NAME" - NUME "NAME" + NUME "Name" NUMED "NUMERIC-EDITED picture" NUMED_CR "NUMERIC-EDITED CR picture" NUMED_DB "NUMERIC-EDITED DB picture" @@ -337,7 +334,7 @@ %token <string> FILENAME %token <number> INVALID %token <number> NUMBER NEGATIVE -%token <numstr> NUMSTR +%token <numstr> NUMSTR "numeric literal" %token <number> OVERFLOW %token <computational> COMPUTATIONAL @@ -366,6 +363,289 @@ TIME_FMT "time format" DATETIME_FMT "datetime format" + /* tokens without semantic value */ + /* CDF (COPY and >> defined here but used in cdf.y) */ +%token BASIS CBL CONSTANT COPY + DEFINED ENTER FEATURE INSERTT + LSUB "(" + PARAMETER_kw "PARAMETER" + OVERRIDE READY RESET + RSUB ")" + SERVICE_RELOAD "SERVICE RELOAD" STAR_CBL "*CBL" + SUBSCRIPT SUPPRESS TITLE TRACE USE + + COBOL_WORDS ">>COBOL-WORDS" EQUATE UNDEFINE + CDF_DEFINE ">>DEFINE" CDF_DISPLAY ">>DISPLAY" + CDF_IF ">>IF" CDF_ELSE ">>ELSE" CDF_END_IF ">>END-IF" + CDF_EVALUATE ">>EVALUATE" + CDF_WHEN ">>WHEN" + CDF_END_EVALUATE ">>END-EVALUATE" + CALL_COBOL "CALL" CALL_VERBATIM "CALL (as C)" + + IF THEN ELSE + SENTENCE + ACCEPT ADD ALTER CALL CANCEL CLOSE COMPUTE CONTINUE + DELETE DISPLAY DIVIDE EVALUATE EXIT FILLER_kw "FILLER" + GOBACK GOTO + INITIALIZE INSPECT + MERGE MOVE MULTIPLY OPEN PARAGRAPH + READ RELEASE RETURN REWRITE + SEARCH SET SELECT SORT SORT_MERGE "SORT-MERGE" + STRING_kw "STRING" STOP SUBTRACT START + UNSTRING WRITE WHEN + + ABS ACCESS ACOS ACTUAL ADVANCING AFTER ALL + ALLOCATE + ALPHABET ALPHABETIC ALPHABETIC_LOWER "ALPHABETIC-LOWER" + ALPHABETIC_UPPER "ALPHABETIC-UPPER" + ALPHANUMERIC + ALPHANUMERIC_EDITED "ALPHANUMERIC-EDITED" + ALSO ALTERNATE ANNUITY ANUM ANY ANYCASE APPLY ARE + AREA AREAS AS + ASCENDING ACTIVATING ASIN ASSIGN AT ATAN + + BASED BASECONVERT + BEFORE BINARY BIT BIT_OF "BIT-OF" BIT_TO_CHAR "BIT-TO-CHAR" + BLANK BLOCK + BOOLEAN_OF_INTEGER "BOOLEAN-OF-INTEGER" + BOTTOM BY + BYTE BYTE_LENGTH "BYTE-LENGTH" + + CF CH + CHANGED CHAR CHAR_NATIONAL "CHAR-NATIONAL" + CHARACTER CHARACTERS CHECKING CLASS + COBOL CODE CODESET COLLATING + COLUMN COMBINED_DATETIME "COMBINED-DATETIME" + COMMA COMMAND_LINE "COMMAND-LINE" + COMMAND_LINE_COUNT "COMMAND-LINE-COUNT" + COMMIT COMMON + + CONCAT CONDITION CONFIGURATION_SECT "CONFIGURATION SECTION" + CONTAINS + CONTENT CONTROL CONTROLS CONVERT CONVERTING CORRESPONDING COS + COUNT CURRENCY CURRENT CURRENT_DATE + + DATA DATE DATE_COMPILED + DATE_OF_INTEGER "DATE-OF-INTEGER" + DATE_TO_YYYYMMDD "DATE-TO-YYYYMMDD" + DATE_WRITTEN "DATE-WRITTEN" + DAY DAY_OF_INTEGER "DAY-OF-INTEGER" + DAY_OF_WEEK "DAY-OF-WEEK" + DAY_TO_YYYYDDD "DAY-TO-YYYYDDD" + DBCS DE DEBUGGING DECIMAL_POINT + DECLARATIVES DEFAULT DELIMITED DELIMITER DEPENDING + DESCENDING DETAIL DIRECT + DIRECT_ACCESS "DIRECT-ACCESS" + DOWN DUPLICATES + DYNAMIC + + E EBCDIC EC EGCS ENTRY ENVIRONMENT EQUAL EVERY + EXAMINE EXHIBIT EXP EXP10 EXTEND EXTERNAL + + EXCEPTION_FILE "EXCEPTION-FILE" + EXCEPTION_FILE_N "EXCEPTION-FILE-N" + EXCEPTION_LOCATION "EXCEPTION-LOCATION" + EXCEPTION_LOCATION_N "EXCEPTION-LOCATION-N" + EXCEPTION_STATEMENT "EXCEPTION-STATEMENT" + EXCEPTION_STATUS "EXCEPTION-STATUS" + + FACTORIAL FALSE_kw "False" FD + FILE_CONTROL "FILE-CONTROL" + FILE_KW "File" + FILE_LIMIT "FILE-LIMIT" + FINAL FINALLY + FIND_STRING "FIND-STRING" + FIRST FIXED FOOTING FOR + FORMATTED_CURRENT_DATE "FORMATTED-CURRENT-DATE" + FORMATTED_DATE "FORMATTED-DATE" + FORMATTED_DATETIME "FORMATTED-DATETIME" + FORMATTED_TIME "FORMATTED-TIME" + FORM_OVERFLOW "FORM-OVERFLOW" + FREE + FRACTION_PART "FRACTION-PART" + FROM FUNCTION + + GENERATE GIVING GLOBAL GO GROUP + + HEADING HEX + HEX_OF "HEX-OF" + HEX_TO_CHAR "HEX-TO-CHAR" + HIGH_VALUES "HIGH-VALUES" + HIGHEST_ALGEBRAIC "HIGHEST-ALGEBRAIC" + HOLD + + IBM_360 IN INCLUDE INDEX INDEXED INDICATE INITIAL_kw "INITIAL" + INITIATE INPUT INSTALLATION INTERFACE + INTEGER + INTEGER_OF_BOOLEAN "INTEGER-OF-BOOLEAN" + INTEGER_OF_DATE "INTEGER-OF-DATE" + INTEGER_OF_DAY "INTEGER-OF-DAY" + INTEGER_OF_FORMATTED_DATE "INTEGER-OF-FORMATTED-DATE" + INTEGER_PART "INTEGER-PART" + INTO INTRINSIC INVOKE IO IO_CONTROL "IO-CONTROL" + IS ISNT "IS NOT" + + KANJI KEY + + LABEL LAST LEADING LEFT LENGTH + LENGTH_OF "LENGTH-OF" + LIMIT LIMITS LINE LINES + LINE_COUNTER "LINE-COUNTER" + LINAGE LINKAGE LOCALE LOCALE_COMPARE "LOCALE-COMPARE" + LOCALE_DATE "LOCALE-DATE" + LOCALE_TIME "LOCALE-TIME" + LOCALE_TIME_FROM_SECONDS "LOCALE-TIME-FROM-SECONDS" + LOCAL_STORAGE "LOCAL-STORAGE" + LOCATION + LOCK LOCK_ON LOG LOG10 + LOWER_CASE "LOWER-CASE" + LOW_VALUES "LOW-VALUES" + LOWEST_ALGEBRAIC "LOWEST-ALGEBRAIC" + LPAREN " )" + + MANUAL MAXX "Max" MEAN MEDIAN MIDRANGE + MINN "Min" MULTIPLE MOD MODE + MODULE_NAME "MODULE-NAME " + + NAMED NAT NATIONAL + NATIONAL_EDITED "NATIONAL-EDITED" + NATIONAL_OF "NATIONAL-OF" + NATIVE NESTED NEXT + NO NOTE + NULLS NULLPTR + NUMERIC + NUMERIC_EDITED NUMVAL + NUMVAL_C "NUMVAL-C" + NUMVAL_F "NUMVAL-F" + + OCCURS OF OFF OMITTED ON ONLY OPTIONAL OPTIONS ORD ORDER + ORD_MAX "ORD-MAX" + ORD_MIN "ORD-MIN" + ORGANIZATION OTHER OTHERWISE OUTPUT + + PACKED_DECIMAL PADDING PAGE + PAGE_COUNTER "PAGE-COUNTER" + PF PH PI PIC PICTURE + PLUS PRESENT_VALUE PRINT_SWITCH + PROCEDURE PROCEDURES PROCEED PROCESS + PROGRAM_ID "PROGRAM-ID" + PROGRAM_kw "Program" PROPERTY PROTOTYPE PSEUDOTEXT + + QUOTE QUOTES + + RANDOM RANDOM_SEED RANGE RAISE RAISING + RD RECORD RECORDING RECORDS RECURSIVE + REDEFINES REEL REFERENCE RELATIVE REM REMAINDER REMARKS + REMOVAL RENAMES REPLACE REPLACING REPORT REPORTING REPORTS + REPOSITORY RERUN RESERVE RESTRICTED RESUME + REVERSE REVERSED REWIND RF RH RIGHT ROUNDED RUN + + SAME SCREEN SD + SECONDS_FROM_FORMATTED_TIME "SECONDS-FROM-FORMATTED-TIME" + SECONDS_PAST_MIDNIGHT "SECONDS-PAST-MIDNIGHT" + SECURITY + SEPARATE SEQUENCE SEQUENTIAL SHARING + SIMPLE_EXIT "(simple) EXIT" + SIGN SIN SIZE + SMALLEST_ALGEBRAIC "SMALLEST-ALGEBRAIC" + SOURCE + SOURCE_COMPUTER "SOURCE-COMPUTER" + SPECIAL_NAMES SQRT STACK + STANDARD + STANDARD_1 "STANDARD-1" + STANDARD_DEVIATION "STANDARD-DEVIATION " + STANDARD_COMPARE "STANDARD-COMPARE" + STATUS STRONG + SUBSTITUTE SUM SYMBOL SYMBOLIC SYNCHRONIZED + + TALLY TALLYING TAN TERMINATE TEST + TEST_DATE_YYYYMMDD "TEST-DATE-YYYYMMDD" + TEST_DAY_YYYYDDD "TEST-DAY-YYYYDDD" + TEST_FORMATTED_DATETIME "TEST-FORMATTED-DATETIME" + TEST_NUMVAL "TEST-NUMVAL" + TEST_NUMVAL_C "TEST-NUMVAL-C" + TEST_NUMVAL_F "TEST-NUMVAL-F" + THAN TIME TIMES + TO TOP + TOP_LEVEL + TRACKS TRACK_AREA TRAILING TRANSFORM TRIM TRUE_kw "True" TRY + TURN TYPE TYPEDEF + + ULENGTH UNBOUNDED UNIT UNITS UNIT_RECORD UNTIL UP UPON + UPOS UPPER_CASE USAGE USING USUBSTR USUPPLEMENTARY + UTILITY UUID4 UVALID UWIDTH + + VALUE VARIANCE VARYING VOLATILE + + WHEN_COMPILED WITH WORKING_STORAGE + XML XMLGENERATE XMLPARSE + YEAR_TO_YYYY YYYYDDD YYYYMMDD + + /* unused Context Words */ + ARITHMETIC ATTRIBUTE AUTO AUTOMATIC + AWAY_FROM_ZERO "AWAY-FROM-ZERO" + BACKGROUND_COLOR "BACKGROUND-COLOR" + BELL + BINARY_ENCODING "BINARY-ENCODING" + BLINK + CAPACITY CENTER CLASSIFICATION CYCLE + DECIMAL_ENCODING "DECIMAL-ENCODING" + ENTRY_CONVENTION EOL EOS ERASE EXPANDS + FLOAT_BINARY "FLOAT-BINARY" + FLOAT_DECIMAL "FLOAT-DECIMAL" + FOREGROUND_COLOR FOREVER FULL + HIGHLIGHT + HIGH_ORDER_LEFT "HIGH-ORDER-LEFT" + HIGH_ORDER_RIGHT "HIGH-ORDER-RIGHT" + IGNORING IMPLEMENTS INITIALIZED INTERMEDIATE + LC_ALL_kw "LC-ALL" + LC_COLLATE_kw "LC-COLLATE" + LC_CTYPE_kw "LC-CTYPE" + LC_MESSAGES_kw "LC-MESSAGES" + LC_MONETARY_kw "LC-MONETARY" + LC_NUMERIC_kw "LC-NUMERIC" + LC_TIME_kw "LC-TIME" + LOWLIGHT + NEAREST_AWAY_FROM_ZERO "NEAREST-AWAY-FROM-ZERO" + NEAREST_EVEN NEAREST_TOWARD_ZERO "NEAREST-EVEN NEAREST-TOWARD-ZERO" + NONE NORMAL NUMBERS + PREFIXED PREVIOUS PROHIBITED RELATION REQUIRED + REVERSE_VIDEO ROUNDING + SECONDS SECURE SHORT SIGNED + STANDARD_BINARY "STANDARD-BINARY" + STANDARD_DECIMAL "STANDARD-DECIMAL" + STATEMENT STEP STRUCTURE + TOWARD_GREATER "TOWARD-GREATER" + TOWARD_LESSER "TOWARD-LESSER" + TRUNCATION + UCS_4 "UCS-4" + UNDERLINE UNSIGNED + UTF_16 "UTF-16" + UTF_8 "UTF-8" + + ADDRESS + END_ACCEPT "END-ACCEPT" + END_ADD "END-ADD" + END_CALL "END-CALL" + END_COMPUTE "END-COMPUTE" + END_DELETE "END-DELETE" + END_DISPLAY "END-DISPLAY" + END_DIVIDE "END-DIVIDE" + END_EVALUATE "END-EVALUATE" + END_MULTIPLY "END-MULTIPLY" + END_PERFORM "END-PERFORM" + END_READ "END-READ" + END_RETURN "END-RETURN" + END_REWRITE "END-REWRITE" + END_SEARCH "END-SEARCH" + END_START "END-START" + END_STRING "END-STRING" + END_SUBTRACT "END-SUBTRACT" + END_UNSTRING "END-UNSTRING" + END_WRITE "END-WRITE" + END_IF "END-IF" + /* end tokens without semantic value */ + // YYEOF added for compatibility with Bison 3.5 // https://savannah.gnu.org/forum/forum.php?forum_id=9735 %token YYEOF 0 "end of file" @@ -703,7 +983,9 @@ CDF_DEFINE CDF_DISPLAY CDF_IF CDF_ELSE CDF_END_IF - CDF_EVALUATE CDF_WHEN CDF_END_EVALUATE + CDF_EVALUATE + CDF_WHEN + CDF_END_EVALUATE CALL_COBOL CALL_VERBATIM %right IF THEN ELSE @@ -714,7 +996,6 @@ INITIALIZE INSPECT MERGE MOVE MULTIPLY OPEN OVERFLOW PARAGRAPH PERFORM READ RELEASE RETURN REWRITE - SECTION_NAME SEARCH SET SELECT SORT SORT_MERGE STRING_kw STOP SUBTRACT START UNSTRING WRITE WHEN INVALID @@ -722,86 +1003,145 @@ %left ABS ACCESS ACOS ACTUAL ADVANCING AFP_5A AFTER ALL ALLOCATE ALPHABET ALPHABETIC ALPHABETIC_LOWER - ALPHABETIC_UPPER ALPHANUMERIC ALPHANUMERIC_EDITED + ALPHABETIC_UPPER + ALPHANUMERIC + ALPHANUMERIC_EDITED ALPHED ALSO ALTERNATE ANNUITY ANUM ANY ANYCASE APPLY ARE AREA AREAS AS ASCENDING ACTIVATING ASIN ASSIGN AT ATAN BACKWARD BASED BASECONVERT BEFORE BINARY BIT BIT_OF BIT_TO_CHAR - BLANK BLOCK BOOLEAN_OF_INTEGER BOTTOM BY BYTE BYTE_LENGTH + BLANK BLOCK + BOOLEAN_OF_INTEGER + BOTTOM BY + BYTE BYTE_LENGTH C01 C02 C03 C04 C05 C06 C07 C08 C09 C10 C11 C12 CF CH - CHANGED CHAR CHAR_NATIONAL CHARACTER CHARACTERS CHECKING CLASS + CHANGED CHAR CHAR_NATIONAL + CHARACTER CHARACTERS CHECKING CLASS COBOL CODE CODESET COLLATING - COLUMN COMBINED_DATETIME COMMA COMMAND_LINE - COMMAND_LINE_COUNT COMMIT COMMON COMPUTATIONAL + COLUMN COMBINED_DATETIME + COMMA COMMAND_LINE + COMMAND_LINE_COUNT + COMMIT COMMON COMPUTATIONAL - CONCAT CONDITION CONFIGURATION_SECT CONSOLE CONTAINS + CONCAT CONDITION CONFIGURATION_SECT + CONSOLE CONTAINS CONTENT CONTROL CONTROLS CONVERT CONVERTING CORRESPONDING COS COUNT CSP CURRENCY CURRENT CURRENT_DATE - DATA DATE DATE_COMPILED DATE_OF_INTEGER DATE_TO_YYYYMMDD - DATE_FMT TIME_FMT DATETIME_FMT - DATE_WRITTEN DAY DAY_OF_INTEGER DAY_OF_WEEK - DAY_TO_YYYYDDD DBCS DE DEBUGGING DECIMAL_POINT + DATA DATE DATE_COMPILED + DATE_OF_INTEGER + DATE_TO_YYYYMMDD + DATE_FMT + TIME_FMT + DATETIME_FMT + DATE_WRITTEN + DAY DAY_OF_INTEGER + DAY_OF_WEEK + DAY_TO_YYYYDDD + DBCS DE DEBUGGING DECIMAL_POINT DECLARATIVES DEFAULT DELIMITED DELIMITER DEPENDING - DESCENDING DETAIL DIRECT DIRECT_ACCESS DOWN DUPLICATES + DESCENDING DETAIL DIRECT + DIRECT_ACCESS + DOWN DUPLICATES DYNAMIC E EBCDIC EC EGCS ENTRY ENVIRONMENT EQUAL ERROR EVERY EXAMINE EXCEPTION EXHIBIT EXP EXP10 EXTEND EXTERNAL - EXCEPTION_FILE EXCEPTION_FILE_N - EXCEPTION_LOCATION EXCEPTION_LOCATION_N - EXCEPTION_NAME - EXCEPTION_STATEMENT EXCEPTION_STATUS - - FACTORIAL FALSE_kw FD FILENAME FILE_CONTROL FILE_KW - FILE_LIMIT FINAL FINALLY FIND_STRING FIRST FIXED FOOTING FOR - FORMATTED_CURRENT_DATE FORMATTED_DATE FORMATTED_DATETIME - FORMATTED_TIME FORM_OVERFLOW FREE - FRACTION_PART FROM FUNCTION FUNCTION_UDF + EXCEPTION_FILE + EXCEPTION_FILE_N + EXCEPTION_LOCATION + EXCEPTION_LOCATION_N + EXCEPTION_NAME + EXCEPTION_STATEMENT + EXCEPTION_STATUS + + FACTORIAL FALSE_kw FD FILENAME + FILE_CONTROL + FILE_KW + FILE_LIMIT + FINAL FINALLY + FIND_STRING + FIRST FIXED FOOTING FOR + FORMATTED_CURRENT_DATE + FORMATTED_DATE + FORMATTED_DATETIME + FORMATTED_TIME + FORM_OVERFLOW + FREE + FRACTION_PART + FROM FUNCTION + FUNCTION_UDF GENERATE GIVING GLOBAL GO GROUP - HEADING HEX HEX_OF HEX_TO_CHAR - HIGH_VALUES HIGHEST_ALGEBRAIC HOLD + HEADING HEX + HEX_OF + HEX_TO_CHAR + HIGH_VALUES + HIGHEST_ALGEBRAIC + HOLD IBM_360 IN INCLUDE INDEX INDEXED INDICATE INITIAL_kw INITIATE INPUT INSTALLATION INTERFACE - INTEGER INTEGER_OF_BOOLEAN INTEGER_OF_DATE - INTEGER_OF_DAY INTEGER_OF_FORMATTED_DATE INTEGER_PART - INTO INTRINSIC INVOKE IO IO_CONTROL IS ISNT + INTEGER + INTEGER_OF_BOOLEAN + INTEGER_OF_DATE + INTEGER_OF_DAY + INTEGER_OF_FORMATTED_DATE + INTEGER_PART + INTO INTRINSIC INVOKE IO IO_CONTROL + IS ISNT KANJI KEY - LABEL LAST LEADING LEFT LENGTH LENGTH_OF LEVEL LEVEL66 - LEVEL88 LIMIT LIMITS LINE LINES LINE_COUNTER + LABEL LAST LEADING LEFT LENGTH + LENGTH_OF + LEVEL LEVEL66 + LEVEL88 LIMIT LIMITS LINE LINES + LINE_COUNTER LINAGE LINKAGE LOCALE LOCALE_COMPARE - LOCALE_DATE LOCALE_TIME LOCALE_TIME_FROM_SECONDS - LOCAL_STORAGE LOCATION - LOCK LOCK_ON LOG LOG10 LOWER_CASE LOW_VALUES - LOWEST_ALGEBRAIC LPAREN + LOCALE_DATE + LOCALE_TIME + LOCALE_TIME_FROM_SECONDS + LOCAL_STORAGE + LOCATION + LOCK LOCK_ON LOG LOG10 + LOWER_CASE + LOW_VALUES + LOWEST_ALGEBRAIC + LPAREN MANUAL MAXX MEAN MEDIAN MIDRANGE - MIGHT_BE MINN MULTIPLE MOD MODE MODULE_NAME + MIGHT_BE MINN MULTIPLE MOD MODE + MODULE_NAME - NAMED NAT NATIONAL NATIONAL_EDITED NATIONAL_OF + NAMED NAT NATIONAL + NATIONAL_EDITED + NATIONAL_OF NATIVE NEGATIVE NESTED NEXT NINEDOT NINES NINEV NO NOTE NO_CONDITION NULLS NULLPTR NUMBER NUME NUMED NUMED_CR NUMED_DB NUMERIC - NUMERIC_EDITED NUMSTR NUMVAL NUMVAL_C NUMVAL_F + NUMERIC_EDITED NUMSTR NUMVAL + NUMVAL_C + NUMVAL_F OCCURS OF OFF OMITTED ON ONLY OPTIONAL OPTIONS ORD ORDER - ORD_MAX ORD_MIN ORGANIZATION OTHER OTHERWISE OUTPUT + ORD_MAX + ORD_MIN + ORGANIZATION OTHER OTHERWISE OUTPUT - PACKED_DECIMAL PADDING PAGE PAGE_COUNTER + PACKED_DECIMAL PADDING PAGE + PAGE_COUNTER PF PH PI PIC PICTURE PIC_P PLUS POINTER POSITIVE PRESENT_VALUE PRINT_SWITCH PROCEDURE PROCEDURES PROCEED PROCESS - PROGRAM_ID PROGRAM_kw PROPERTY PROTOTYPE PSEUDOTEXT + PROGRAM_ID + PROGRAM_kw PROPERTY PROTOTYPE PSEUDOTEXT QUOTE QUOTES @@ -812,20 +1152,36 @@ REPOSITORY RERUN RESERVE RESTRICTED RESUME REVERSE REVERSED REWIND RF RH RIGHT ROUNDED RUN - S01 S02 S03 S04 S05 SAME SCREEN SD SECONDS_FROM_FORMATTED_TIME - SECONDS_PAST_MIDNIGHT SECTION SECURITY - SEPARATE SEQUENCE SEQUENTIAL SHARING SIMPLE_EXIT - SIGN SIN SIZE SIZE_ERROR SMALLEST_ALGEBRAIC SOURCE SOURCE_COMPUTER + S01 S02 S03 S04 S05 SAME SCREEN SD + SECONDS_FROM_FORMATTED_TIME + SECONDS_PAST_MIDNIGHT + SECTION SECURITY + SEPARATE SEQUENCE SEQUENTIAL SHARING + SIMPLE_EXIT + SIGN SIN SIZE SIZE_ERROR + SMALLEST_ALGEBRAIC + SOURCE + SOURCE_COMPUTER SPACES SPECIAL_NAMES SQRT STACK - STANDARD STANDARD_ALPHABET STANDARD_1 STANDARD_DEVIATION - STANDARD_COMPARE STATUS STRONG STDERR STDIN STDOUT + STANDARD + STANDARD_ALPHABET + STANDARD_1 + STANDARD_DEVIATION + STANDARD_COMPARE + STATUS STRONG STDERR STDIN STDOUT LITERAL SUBSTITUTE SUM SWITCH SYMBOL SYMBOLIC SYNCHRONIZED SYSIN SYSIPT SYSLST SYSOUT SYSPCH SYSPUNCH - TALLY TALLYING TAN TERMINATE TEST TEST_DATE_YYYYMMDD - TEST_DAY_YYYYDDD TEST_FORMATTED_DATETIME TEST_NUMVAL - TEST_NUMVAL_C TEST_NUMVAL_F THAN TIME TIMES - TO TOP TOP_LEVEL + TALLY TALLYING TAN TERMINATE TEST + TEST_DATE_YYYYMMDD + TEST_DAY_YYYYDDD + TEST_FORMATTED_DATETIME + TEST_NUMVAL + TEST_NUMVAL_C + TEST_NUMVAL_F + THAN TIME TIMES + TO TOP + TOP_LEVEL TRACKS TRACK_AREA TRAILING TRANSFORM TRIM TRUE_kw TRY TURN TYPE TYPEDEF @@ -841,35 +1197,57 @@ ZERO /* unused Context Words */ - ARITHMETIC ATTRIBUTE AUTO AUTOMATIC AWAY_FROM_ZERO - BACKGROUND_COLOR BELL BINARY_ENCODING BLINK + ARITHMETIC ATTRIBUTE AUTO AUTOMATIC + AWAY_FROM_ZERO + BACKGROUND_COLOR + BELL + BINARY_ENCODING + BLINK CAPACITY CENTER CLASSIFICATION CYCLE - DECIMAL_ENCODING ENTRY_CONVENTION EOL EOS ERASE EXPANDS - FLOAT_BINARY FLOAT_DECIMAL FOREGROUND_COLOR FOREVER FULL - HIGHLIGHT HIGH_ORDER_LEFT HIGH_ORDER_RIGHT + DECIMAL_ENCODING + ENTRY_CONVENTION EOL EOS ERASE EXPANDS + FLOAT_BINARY + FLOAT_DECIMAL + FOREGROUND_COLOR FOREVER FULL + HIGHLIGHT + HIGH_ORDER_LEFT + HIGH_ORDER_RIGHT IGNORING IMPLEMENTS INITIALIZED INTERMEDIATE - LC_ALL_kw LC_COLLATE_kw LC_CTYPE_kw LC_MESSAGES_kw - LC_MONETARY_kw LC_NUMERIC_kw LC_TIME_kw + LC_ALL_kw + LC_COLLATE_kw + LC_CTYPE_kw + LC_MESSAGES_kw + LC_MONETARY_kw + LC_NUMERIC_kw + LC_TIME_kw LOWLIGHT - NEAREST_AWAY_FROM_ZERO NEAREST_EVEN NEAREST_TOWARD_ZERO + NEAREST_AWAY_FROM_ZERO + NEAREST_EVEN NEAREST_TOWARD_ZERO NONE NORMAL NUMBERS PREFIXED PREVIOUS PROHIBITED RELATION REQUIRED REVERSE_VIDEO ROUNDING - SECONDS SECURE SHORT SIGNED STANDARD_BINARY - STANDARD_DECIMAL STATEMENT STEP STRUCTURE - TOWARD_GREATER TOWARD_LESSER TRUNCATION - UCS_4 UNDERLINE UNSIGNED UTF_16 UTF_8 + SECONDS SECURE SHORT SIGNED + STANDARD_BINARY + STANDARD_DECIMAL + STATEMENT STEP STRUCTURE + TOWARD_GREATER + TOWARD_LESSER + TRUNCATION + UCS_4 + UNDERLINE UNSIGNED + UTF_16 + UTF_8 %left CLASS_NAME NAME NAME88 %left ADDRESS %left END_ACCEPT END_ADD END_CALL END_COMPUTE - END_DELETE END_DISPLAY END_DIVIDE - END_EVALUATE END_MULTIPLY END_PERFORM - END_READ END_RETURN END_REWRITE - END_SEARCH END_STRING END_SUBTRACT END_START - END_UNSTRING END_WRITE + END_DELETE END_DISPLAY END_DIVIDE + END_EVALUATE END_MULTIPLY END_PERFORM + END_READ END_RETURN END_REWRITE + END_SEARCH END_START END_STRING END_SUBTRACT + END_UNSTRING END_WRITE error - END_IF + END_IF %left THRU %left OR @@ -10743,38 +11121,18 @@ struct string_match { } }; -int -keyword_of( const char name[] ) { - auto eotname = yytname + COUNT_OF(yytname); - auto p = std::find_if( yytname, eotname, string_match(name) ); - return p == eotname? 0 : 255 + int(eotname - p); -} - const char * keyword_str( int token ) { if( token == YYEOF ) return "YYEOF"; if( token == YYEMPTY ) return "YYEMPTY"; - if( token < 255 ) { + if( token < 256 ) { static char ascii[2]; ascii[0] = token; return ascii; } - static const std::map<int, const char*> misaligned = { - {NE, "NE"}, - {LE, "LE"}, - {GE, "GE"}, - {NEG, "NEG"}, - {POW, "POW"}, - }; - - auto p = misaligned.find(token); - if( p != misaligned.end() ) return p->second; - - int i = token - 255; - assert( i < int(COUNT_OF(yytname)) ); - return yytname[i]; + return tokens.name_of(token); } /* @@ -10785,67 +11143,10 @@ keyword_str( int token ) { * All function names are rejected here; the lexer uses typed_name to check * REPOSITORY names. */ -static struct kw_t { const char *lexeme, *name; } kws[] = { - { "CODE_SET", "CODESET" }, - { "DATA", "DATA_DIV" }, - { "ENVIRONMENT", "ENVIRONMENT_DIV" }, - { "FALSE", "FALSE_kw" }, - { "FILE", "FILE_KW" }, - { "FILLER", "FILLER_kw" }, - { "IDENTIFICATION", "IDENTIFICATION_DIV" }, - { "I_O", "IO" }, - { "INITIAL", "INITIAL_kw" }, - { "PIC", "PICTURE" }, - { "PROCEDURE", "PROCEDURE_DIV" }, - { "PROGRAM", "PROGRAM_kw" }, - { "QUOTE", "QUOTES" }, - { "STRING", "STRING_kw" }, - { "THROUGH", "THRU" }, - { "TRUE", "TRUE_kw" }, -}, *eokws = kws + COUNT_OF(kws); - -tokenset_t::tokenset_t( const char * const *first, - const char * const *last ) { - // Initialize a map of lexemes, as found in the COBOL text, to their token values. - int i = 3 + 255; - - for( auto name = first; name < last; name++ ) { - static cbl_name_t lname; - - strcpy(lname, *name); - // Correct for names in parse.c::yytname that do not match the string - // provided in the COBOL text. - auto p = std::find_if( kws, eokws, - [](kw_t kw) { - return 0 == strcasecmp(lname, kw.name); - } ); - if( p != eokws ) { - strcpy(lname, p->lexeme); - } - - if( 0 == strcasecmp(lname, "THROUGH") ) tokens["thru"] = i; - - std::replace(lname, lname + strlen(lname), '_', '-'); - std::transform(lname, lname + strlen(lname) + 1, lname, tolower); - tokens[lname] = i++; - } - // Insert token aliases into the token map. - static struct kw_t aliases[] = { - { "null", "nulls" }, - { "space", "spaces" }, - { "through", "thru" }, - { "zeroes", "zero" }, - { "zeros", "zero" }, - }, *eoaliases = aliases + COUNT_OF(aliases); - - std::transform( aliases, eoaliases, std::inserter(tokens, tokens.begin()), - [this]( const kw_t& kw ) { - auto p = tokens.find(kw.name); - assert(p != tokens.end()); - int token = p->second; - return std::make_pair(kw.lexeme, token); - } ); +// tokens.h is generated as needed from parse.h with tokens.h.gen +tokenset_t::tokenset_t() { +#include "token_names.h" } // Look up the lowercase form of a keyword, excluding some CDF names. @@ -10890,16 +11191,6 @@ tokenset_t::find( const cbl_name_t name, bool include_intrinsics ) { return intrinsic_cname(token)? 0 : token; } -const char * const * -current_tokens_t::last_terminal() { - auto last = std::find_if(yytname + 3, yytname + COUNT_OF(yytname), - [] ( const char *name ) { - return 0 == strcmp(name, "$accept"); }); - return last; -} - -current_tokens_t::current_tokens_t() : tokens( yytname + 3, last_terminal() ) {} - int keyword_tok( const char * text, bool include_intrinsics ) { return tokens.find(text, include_intrinsics); diff --git a/gcc/cobol/parse_ante.h b/gcc/cobol/parse_ante.h index db9333b0d76e..e3f125489847 100644 --- a/gcc/cobol/parse_ante.h +++ b/gcc/cobol/parse_ante.h @@ -906,6 +906,7 @@ teed_up_names() { } class tokenset_t { + std::vector<const char *>token_names; std::map <std::string, int> tokens; std::set<std::string> cobol_words; @@ -917,8 +918,7 @@ class tokenset_t { } public: - tokenset_t( const char * const *first, - const char * const *last ); + tokenset_t(); int find( const cbl_name_t name, bool include_intrinsics ); bool equate( const YYLTYPE& loc, int token, const cbl_name_t name ) { @@ -976,13 +976,17 @@ class tokenset_t { } return 0; } + const char * name_of( int tok ) const { + tok -= (255 + 3); + gcc_assert(0 <= tok && size_t(tok) < token_names.size()); + return token_names[tok]; + } }; class current_tokens_t { tokenset_t tokens; - static const char * const *last_terminal(); public: - current_tokens_t(); + current_tokens_t() {} int find( const cbl_name_t name, bool include_intrinsics ) { return tokens.find(name, include_intrinsics); } @@ -1011,6 +1015,9 @@ class current_tokens_t { int redefined_as( const cbl_name_t name ) { return tokens.redefined_as(name); } + const char * name_of( int tok ) const { + return tokens.name_of(tok); + } } tokens; int diff --git a/gcc/cobol/scan.l b/gcc/cobol/scan.l index be2f630ced10..bebb80cc2b67 100644 --- a/gcc/cobol/scan.l +++ b/gcc/cobol/scan.l @@ -2233,7 +2233,7 @@ BASIS { yy_push_state(basis); return BASIS; } EXIT { return EXIT; } EXTEND { return EXTEND; } EXTERNAL { return EXTERNAL; } - FALSE { return FALSE; } + FD { return FD; } FINAL { return FINAL; } FINALLY { return FINALLY; } @@ -2402,7 +2402,7 @@ BASIS { yy_push_state(basis); return BASIS; } TO { return TO; } TOP { return TOP; } TRAILING { return TRAILING; } - TRUE { return TRUE; } + TYPE { return TYPE; } TYPEDEF { return TYPEDEF; } UNIT { return UNIT; } diff --git a/gcc/cobol/scan_ante.h b/gcc/cobol/scan_ante.h index 74945a97a169..0ab41d3734a2 100644 --- a/gcc/cobol/scan_ante.h +++ b/gcc/cobol/scan_ante.h @@ -53,7 +53,6 @@ bool include_debug(); int lexer_input( char buf[], int max_size, FILE *input ); const char * keyword_str( int token ); -const char * cdf_token_str( int token ); int repository_function_tok( const char name[] ); diff --git a/gcc/cobol/token_names.h b/gcc/cobol/token_names.h new file mode 100644 index 000000000000..13f17c2f21d0 --- /dev/null +++ b/gcc/cobol/token_names.h @@ -0,0 +1,1373 @@ +// generated by ./token_names.h.gen ../../build/gcc/cobol/parse.h +// Fri Jan 31 04:26:41 EST 2025 +tokens = { + { "identification", IDENTIFICATION_DIV }, // 258 + { "environment", ENVIRONMENT_DIV }, // 259 + { "procedure", PROCEDURE_DIV }, // 260 + { "data", DATA_DIV }, // 261 + { "file", FILE_SECT }, // 262 + { "input-output", INPUT_OUTPUT_SECT }, // 263 + { "linkage", LINKAGE_SECT }, // 264 + { "local-storage", LOCAL_STORAGE_SECT }, // 265 + { "working-storage", WORKING_STORAGE_SECT }, // 266 + { "object-computer", OBJECT_COMPUTER }, // 267 + { "display-of", DISPLAY_OF }, // 268 + { "end-function", END_FUNCTION }, // 269 + { "end-program", END_PROGRAM }, // 270 + { "end-subprogram", END_SUBPROGRAM }, // 271 + { "justified", JUSTIFIED }, // 272 + { "returning", RETURNING }, // 273 + { "no-condition", NO_CONDITION }, // 274 + { "alnum", ALNUM }, // 275 + { "alphed", ALPHED }, // 276 + { "error", ERROR }, // 277 + { "exception", EXCEPTION }, // 278 + { "size-error", SIZE_ERROR }, // 279 + { "exception-name", EXCEPTION_NAME }, // 280 + { "level", LEVEL }, // 281 + { "level66", LEVEL66 }, // 282 + { "level78", LEVEL78 }, // 283 + { "level88", LEVEL88 }, // 284 + { "class-name", CLASS_NAME }, // 285 + { "name", NAME }, // 286 + { "name88", NAME88 }, // 287 + { "nume", NUME }, // 288 + { "numed", NUMED }, // 289 + { "numed-cr", NUMED_CR }, // 290 + { "numed-db", NUMED_DB }, // 291 + { "ninedot", NINEDOT }, // 292 + { "nines", NINES }, // 293 + { "ninev", NINEV }, // 294 + { "pic-p", PIC_P }, // 295 + { "spaces", SPACES }, // 296 + { "space", SPACES }, // 296 + { "literal", LITERAL }, // 297 + { "end", END }, // 298 + { "eop", EOP }, // 299 + { "filename", FILENAME }, // 300 + { "invalid", INVALID }, // 301 + { "number", NUMBER }, // 302 + { "negative", NEGATIVE }, // 303 + { "numstr", NUMSTR }, // 304 + { "overflow", OVERFLOW }, // 305 + { "computational", COMPUTATIONAL }, // 306 + { "perform", PERFORM }, // 307 + { "backward", BACKWARD }, // 308 + { "positive", POSITIVE }, // 309 + { "pointer", POINTER }, // 310 + { "section", SECTION }, // 311 + { "standard-alphabet", STANDARD_ALPHABET }, // 312 + { "switch", SWITCH }, // 313 + { "upsi", UPSI }, // 314 + { "zero", ZERO }, // 315 + { "zeros", ZERO }, // 315 + { "zeroeo", ZERO }, // 315 + { "sysin", SYSIN }, // 316 + { "sysipt", SYSIPT }, // 317 + { "sysout", SYSOUT }, // 318 + { "syslist", SYSLIST }, // 319 + { "syslst", SYSLST }, // 320 + { "syspunch", SYSPUNCH }, // 321 + { "syspch", SYSPCH }, // 322 + { "console", CONSOLE }, // 323 + { "c01", C01 }, // 324 + { "c02", C02 }, // 325 + { "c03", C03 }, // 326 + { "c04", C04 }, // 327 + { "c05", C05 }, // 328 + { "c06", C06 }, // 329 + { "c07", C07 }, // 330 + { "c08", C08 }, // 331 + { "c09", C09 }, // 332 + { "c10", C10 }, // 333 + { "c11", C11 }, // 334 + { "c12", C12 }, // 335 + { "csp", CSP }, // 336 + { "s01", S01 }, // 337 + { "s02", S02 }, // 338 + { "s03", S03 }, // 339 + { "s04", S04 }, // 340 + { "s05", S05 }, // 341 + { "afp-5a", AFP_5A }, // 342 + { "stdin", STDIN }, // 343 + { "stdout", STDOUT }, // 344 + { "stderr", STDERR }, // 345 + { "list", LIST }, // 346 + { "map", MAP }, // 347 + { "nolist", NOLIST }, // 348 + { "nomap", NOMAP }, // 349 + { "nosource", NOSOURCE }, // 350 + { "might-be", MIGHT_BE }, // 351 + { "function-udf", FUNCTION_UDF }, // 352 + { "function-udf-0", FUNCTION_UDF_0 }, // 353 + { "date-fmt", DATE_FMT }, // 354 + { "time-fmt", TIME_FMT }, // 355 + { "datetime-fmt", DATETIME_FMT }, // 356 + { "basis", BASIS }, // 357 + { "cbl", CBL }, // 358 + { "constant", CONSTANT }, // 359 + { "copy", COPY }, // 360 + { "defined", DEFINED }, // 361 + { "enter", ENTER }, // 362 + { "feature", FEATURE }, // 363 + { "insertt", INSERTT }, // 364 + { "lsub", LSUB }, // 365 + { "parameter", PARAMETER_kw }, // 366 + { "override", OVERRIDE }, // 367 + { "ready", READY }, // 368 + { "reset", RESET }, // 369 + { "rsub", RSUB }, // 370 + { "service-reload", SERVICE_RELOAD }, // 371 + { "star-cbl", STAR_CBL }, // 372 + { "subscript", SUBSCRIPT }, // 373 + { "suppress", SUPPRESS }, // 374 + { "title", TITLE }, // 375 + { "trace", TRACE }, // 376 + { "use", USE }, // 377 + { "cobol-words", COBOL_WORDS }, // 378 + { "equate", EQUATE }, // 379 + { "undefine", UNDEFINE }, // 380 + { "cdf-define", CDF_DEFINE }, // 381 + { "cdf-display", CDF_DISPLAY }, // 382 + { "cdf-if", CDF_IF }, // 383 + { "cdf-else", CDF_ELSE }, // 384 + { "cdf-end-if", CDF_END_IF }, // 385 + { "cdf-evaluate", CDF_EVALUATE }, // 386 + { "cdf-when", CDF_WHEN }, // 387 + { "cdf-end-evaluate", CDF_END_EVALUATE }, // 388 + { "call-cobol", CALL_COBOL }, // 389 + { "call-verbatim", CALL_VERBATIM }, // 390 + { "if", IF }, // 391 + { "then", THEN }, // 392 + { "else", ELSE }, // 393 + { "sentence", SENTENCE }, // 394 + { "accept", ACCEPT }, // 395 + { "add", ADD }, // 396 + { "alter", ALTER }, // 397 + { "call", CALL }, // 398 + { "cancel", CANCEL }, // 399 + { "close", CLOSE }, // 400 + { "compute", COMPUTE }, // 401 + { "continue", CONTINUE }, // 402 + { "delete", DELETE }, // 403 + { "display", DISPLAY }, // 404 + { "divide", DIVIDE }, // 405 + { "evaluate", EVALUATE }, // 406 + { "exit", EXIT }, // 407 + { "filler", FILLER_kw }, // 408 + { "goback", GOBACK }, // 409 + { "goto", GOTO }, // 410 + { "initialize", INITIALIZE }, // 411 + { "inspect", INSPECT }, // 412 + { "merge", MERGE }, // 413 + { "move", MOVE }, // 414 + { "multiply", MULTIPLY }, // 415 + { "open", OPEN }, // 416 + { "paragraph", PARAGRAPH }, // 417 + { "read", READ }, // 418 + { "release", RELEASE }, // 419 + { "return", RETURN }, // 420 + { "rewrite", REWRITE }, // 421 + { "search", SEARCH }, // 422 + { "set", SET }, // 423 + { "select", SELECT }, // 424 + { "sort", SORT }, // 425 + { "sort-merge", SORT_MERGE }, // 426 + { "string", STRING_kw }, // 427 + { "stop", STOP }, // 428 + { "subtract", SUBTRACT }, // 429 + { "start", START }, // 430 + { "unstring", UNSTRING }, // 431 + { "write", WRITE }, // 432 + { "when", WHEN }, // 433 + { "abs", ABS }, // 434 + { "access", ACCESS }, // 435 + { "acos", ACOS }, // 436 + { "actual", ACTUAL }, // 437 + { "advancing", ADVANCING }, // 438 + { "after", AFTER }, // 439 + { "all", ALL }, // 440 + { "allocate", ALLOCATE }, // 441 + { "alphabet", ALPHABET }, // 442 + { "alphabetic", ALPHABETIC }, // 443 + { "alphabetic-lower", ALPHABETIC_LOWER }, // 444 + { "alphabetic-upper", ALPHABETIC_UPPER }, // 445 + { "alphanumeric", ALPHANUMERIC }, // 446 + { "alphanumeric-edited", ALPHANUMERIC_EDITED }, // 447 + { "also", ALSO }, // 448 + { "alternate", ALTERNATE }, // 449 + { "annuity", ANNUITY }, // 450 + { "anum", ANUM }, // 451 + { "any", ANY }, // 452 + { "anycase", ANYCASE }, // 453 + { "apply", APPLY }, // 454 + { "are", ARE }, // 455 + { "area", AREA }, // 456 + { "areas", AREAS }, // 457 + { "as", AS }, // 458 + { "ascending", ASCENDING }, // 459 + { "activating", ACTIVATING }, // 460 + { "asin", ASIN }, // 461 + { "assign", ASSIGN }, // 462 + { "at", AT }, // 463 + { "atan", ATAN }, // 464 + { "based", BASED }, // 465 + { "baseconvert", BASECONVERT }, // 466 + { "before", BEFORE }, // 467 + { "binary", BINARY }, // 468 + { "bit", BIT }, // 469 + { "bit-of", BIT_OF }, // 470 + { "bit-to-char", BIT_TO_CHAR }, // 471 + { "blank", BLANK }, // 472 + { "block", BLOCK }, // 473 + { "boolean-of-integer", BOOLEAN_OF_INTEGER }, // 474 + { "bottom", BOTTOM }, // 475 + { "by", BY }, // 476 + { "byte", BYTE }, // 477 + { "byte-length", BYTE_LENGTH }, // 478 + { "cf", CF }, // 479 + { "ch", CH }, // 480 + { "changed", CHANGED }, // 481 + { "char", CHAR }, // 482 + { "char-national", CHAR_NATIONAL }, // 483 + { "character", CHARACTER }, // 484 + { "characters", CHARACTERS }, // 485 + { "checking", CHECKING }, // 486 + { "class", CLASS }, // 487 + { "cobol", COBOL }, // 488 + { "code", CODE }, // 489 + { "code-set", CODESET }, // 490 + { "collating", COLLATING }, // 491 + { "column", COLUMN }, // 492 + { "combined-datetime", COMBINED_DATETIME }, // 493 + { "comma", COMMA }, // 494 + { "command-line", COMMAND_LINE }, // 495 + { "command-line-count", COMMAND_LINE_COUNT }, // 496 + { "commit", COMMIT }, // 497 + { "common", COMMON }, // 498 + { "concat", CONCAT }, // 499 + { "condition", CONDITION }, // 500 + { "configuration", CONFIGURATION_SECT }, // 501 + { "contains", CONTAINS }, // 502 + { "content", CONTENT }, // 503 + { "control", CONTROL }, // 504 + { "controls", CONTROLS }, // 505 + { "convert", CONVERT }, // 506 + { "converting", CONVERTING }, // 507 + { "corresponding", CORRESPONDING }, // 508 + { "cos", COS }, // 509 + { "count", COUNT }, // 510 + { "currency", CURRENCY }, // 511 + { "current", CURRENT }, // 512 + { "current-date", CURRENT_DATE }, // 513 + { "data", DATA }, // 514 + { "date", DATE }, // 515 + { "date-compiled", DATE_COMPILED }, // 516 + { "date-of-integer", DATE_OF_INTEGER }, // 517 + { "date-to-yyyymmdd", DATE_TO_YYYYMMDD }, // 518 + { "date-written", DATE_WRITTEN }, // 519 + { "day", DAY }, // 520 + { "day-of-integer", DAY_OF_INTEGER }, // 521 + { "day-of-week", DAY_OF_WEEK }, // 522 + { "day-to-yyyyddd", DAY_TO_YYYYDDD }, // 523 + { "dbcs", DBCS }, // 524 + { "de", DE }, // 525 + { "debugging", DEBUGGING }, // 526 + { "decimal-point", DECIMAL_POINT }, // 527 + { "declaratives", DECLARATIVES }, // 528 + { "default", DEFAULT }, // 529 + { "delimited", DELIMITED }, // 530 + { "delimiter", DELIMITER }, // 531 + { "depending", DEPENDING }, // 532 + { "descending", DESCENDING }, // 533 + { "detail", DETAIL }, // 534 + { "direct", DIRECT }, // 535 + { "direct-access", DIRECT_ACCESS }, // 536 + { "down", DOWN }, // 537 + { "duplicates", DUPLICATES }, // 538 + { "dynamic", DYNAMIC }, // 539 + { "e", E }, // 540 + { "ebcdic", EBCDIC }, // 541 + { "ec", EC }, // 542 + { "egcs", EGCS }, // 543 + { "entry", ENTRY }, // 544 + { "environment", ENVIRONMENT }, // 545 + { "equal", EQUAL }, // 546 + { "every", EVERY }, // 547 + { "examine", EXAMINE }, // 548 + { "exhibit", EXHIBIT }, // 549 + { "exp", EXP }, // 550 + { "exp10", EXP10 }, // 551 + { "extend", EXTEND }, // 552 + { "external", EXTERNAL }, // 553 + { "exception-file", EXCEPTION_FILE }, // 554 + { "exception-file-n", EXCEPTION_FILE_N }, // 555 + { "exception-location", EXCEPTION_LOCATION }, // 556 + { "exception-location-n", EXCEPTION_LOCATION_N }, // 557 + { "exception-statement", EXCEPTION_STATEMENT }, // 558 + { "exception-status", EXCEPTION_STATUS }, // 559 + { "factorial", FACTORIAL }, // 560 + { "false", FALSE_kw }, // 561 + { "fd", FD }, // 562 + { "file-control", FILE_CONTROL }, // 563 + { "file", FILE_KW }, // 564 + { "file-limit", FILE_LIMIT }, // 565 + { "final", FINAL }, // 566 + { "finally", FINALLY }, // 567 + { "find-string", FIND_STRING }, // 568 + { "first", FIRST }, // 569 + { "fixed", FIXED }, // 570 + { "footing", FOOTING }, // 571 + { "for", FOR }, // 572 + { "formatted-current-date", FORMATTED_CURRENT_DATE }, // 573 + { "formatted-date", FORMATTED_DATE }, // 574 + { "formatted-datetime", FORMATTED_DATETIME }, // 575 + { "formatted-time", FORMATTED_TIME }, // 576 + { "form-overflow", FORM_OVERFLOW }, // 577 + { "free", FREE }, // 578 + { "fraction-part", FRACTION_PART }, // 579 + { "from", FROM }, // 580 + { "function", FUNCTION }, // 581 + { "generate", GENERATE }, // 582 + { "giving", GIVING }, // 583 + { "global", GLOBAL }, // 584 + { "go", GO }, // 585 + { "group", GROUP }, // 586 + { "heading", HEADING }, // 587 + { "hex", HEX }, // 588 + { "hex-of", HEX_OF }, // 589 + { "hex-to-char", HEX_TO_CHAR }, // 590 + { "high-values", HIGH_VALUES }, // 591 + { "highest-algebraic", HIGHEST_ALGEBRAIC }, // 592 + { "hold", HOLD }, // 593 + { "ibm-360", IBM_360 }, // 594 + { "in", IN }, // 595 + { "include", INCLUDE }, // 596 + { "index", INDEX }, // 597 + { "indexed", INDEXED }, // 598 + { "indicate", INDICATE }, // 599 + { "initial", INITIAL_kw }, // 600 + { "initiate", INITIATE }, // 601 + { "input", INPUT }, // 602 + { "installation", INSTALLATION }, // 603 + { "interface", INTERFACE }, // 604 + { "integer", INTEGER }, // 605 + { "integer-of-boolean", INTEGER_OF_BOOLEAN }, // 606 + { "integer-of-date", INTEGER_OF_DATE }, // 607 + { "integer-of-day", INTEGER_OF_DAY }, // 608 + { "integer-of-formatted-date", INTEGER_OF_FORMATTED_DATE }, // 609 + { "integer-part", INTEGER_PART }, // 610 + { "into", INTO }, // 611 + { "intrinsic", INTRINSIC }, // 612 + { "invoke", INVOKE }, // 613 + { "i-o", IO }, // 614 + { "i-o-control", IO_CONTROL }, // 615 + { "is", IS }, // 616 + { "isnt", ISNT }, // 617 + { "kanji", KANJI }, // 618 + { "key", KEY }, // 619 + { "label", LABEL }, // 620 + { "last", LAST }, // 621 + { "leading", LEADING }, // 622 + { "left", LEFT }, // 623 + { "length", LENGTH }, // 624 + { "length-of", LENGTH_OF }, // 625 + { "limit", LIMIT }, // 626 + { "limits", LIMITS }, // 627 + { "line", LINE }, // 628 + { "lines", LINES }, // 629 + { "line-counter", LINE_COUNTER }, // 630 + { "linage", LINAGE }, // 631 + { "linkage", LINKAGE }, // 632 + { "locale", LOCALE }, // 633 + { "locale-compare", LOCALE_COMPARE }, // 634 + { "locale-date", LOCALE_DATE }, // 635 + { "locale-time", LOCALE_TIME }, // 636 + { "locale-time-from-seconds", LOCALE_TIME_FROM_SECONDS }, // 637 + { "local-storage", LOCAL_STORAGE }, // 638 + { "location", LOCATION }, // 639 + { "lock", LOCK }, // 640 + { "lock-on", LOCK_ON }, // 641 + { "log", LOG }, // 642 + { "log10", LOG10 }, // 643 + { "lower-case", LOWER_CASE }, // 644 + { "low-values", LOW_VALUES }, // 645 + { "lowest-algebraic", LOWEST_ALGEBRAIC }, // 646 + { "lparen", LPAREN }, // 647 + { "manual", MANUAL }, // 648 + { "maxx", MAXX }, // 649 + { "mean", MEAN }, // 650 + { "median", MEDIAN }, // 651 + { "midrange", MIDRANGE }, // 652 + { "minn", MINN }, // 653 + { "multiple", MULTIPLE }, // 654 + { "mod", MOD }, // 655 + { "mode", MODE }, // 656 + { "module-name", MODULE_NAME }, // 657 + { "named", NAMED }, // 658 + { "nat", NAT }, // 659 + { "national", NATIONAL }, // 660 + { "national-edited", NATIONAL_EDITED }, // 661 + { "national-of", NATIONAL_OF }, // 662 + { "native", NATIVE }, // 663 + { "nested", NESTED }, // 664 + { "next", NEXT }, // 665 + { "no", NO }, // 666 + { "note", NOTE }, // 667 + { "nulls", NULLS }, // 668 + { "null", NULLS }, // 668 + { "nullptr", NULLPTR }, // 669 + { "numeric", NUMERIC }, // 670 + { "numeric-edited", NUMERIC_EDITED }, // 671 + { "numval", NUMVAL }, // 672 + { "numval-c", NUMVAL_C }, // 673 + { "numval-f", NUMVAL_F }, // 674 + { "occurs", OCCURS }, // 675 + { "of", OF }, // 676 + { "off", OFF }, // 677 + { "omitted", OMITTED }, // 678 + { "on", ON }, // 679 + { "only", ONLY }, // 680 + { "optional", OPTIONAL }, // 681 + { "options", OPTIONS }, // 682 + { "ord", ORD }, // 683 + { "order", ORDER }, // 684 + { "ord-max", ORD_MAX }, // 685 + { "ord-min", ORD_MIN }, // 686 + { "organization", ORGANIZATION }, // 687 + { "other", OTHER }, // 688 + { "otherwise", OTHERWISE }, // 689 + { "output", OUTPUT }, // 690 + { "packed-decimal", PACKED_DECIMAL }, // 691 + { "padding", PADDING }, // 692 + { "page", PAGE }, // 693 + { "page-counter", PAGE_COUNTER }, // 694 + { "pf", PF }, // 695 + { "ph", PH }, // 696 + { "pi", PI }, // 697 + { "pic", PIC }, // 698 + { "pic", PICTURE }, // 699 + { "plus", PLUS }, // 700 + { "present-value", PRESENT_VALUE }, // 701 + { "print-switch", PRINT_SWITCH }, // 702 + { "procedure", PROCEDURE }, // 703 + { "procedures", PROCEDURES }, // 704 + { "proceed", PROCEED }, // 705 + { "process", PROCESS }, // 706 + { "program-id", PROGRAM_ID }, // 707 + { "program", PROGRAM_kw }, // 708 + { "property", PROPERTY }, // 709 + { "prototype", PROTOTYPE }, // 710 + { "pseudotext", PSEUDOTEXT }, // 711 + { "quote", QUOTE }, // 712 + { "quote", QUOTES }, // 713 + { "random", RANDOM }, // 714 + { "random-seed", RANDOM_SEED }, // 715 + { "range", RANGE }, // 716 + { "raise", RAISE }, // 717 + { "raising", RAISING }, // 718 + { "rd", RD }, // 719 + { "record", RECORD }, // 720 + { "recording", RECORDING }, // 721 + { "records", RECORDS }, // 722 + { "recursive", RECURSIVE }, // 723 + { "redefines", REDEFINES }, // 724 + { "reel", REEL }, // 725 + { "reference", REFERENCE }, // 726 + { "relative", RELATIVE }, // 727 + { "rem", REM }, // 728 + { "remainder", REMAINDER }, // 729 + { "remarks", REMARKS }, // 730 + { "removal", REMOVAL }, // 731 + { "renames", RENAMES }, // 732 + { "replace", REPLACE }, // 733 + { "replacing", REPLACING }, // 734 + { "report", REPORT }, // 735 + { "reporting", REPORTING }, // 736 + { "reports", REPORTS }, // 737 + { "repository", REPOSITORY }, // 738 + { "rerun", RERUN }, // 739 + { "reserve", RESERVE }, // 740 + { "restricted", RESTRICTED }, // 741 + { "resume", RESUME }, // 742 + { "reverse", REVERSE }, // 743 + { "reversed", REVERSED }, // 744 + { "rewind", REWIND }, // 745 + { "rf", RF }, // 746 + { "rh", RH }, // 747 + { "right", RIGHT }, // 748 + { "rounded", ROUNDED }, // 749 + { "run", RUN }, // 750 + { "same", SAME }, // 751 + { "screen", SCREEN }, // 752 + { "sd", SD }, // 753 + { "seconds-from-formatted-time", SECONDS_FROM_FORMATTED_TIME }, // 754 + { "seconds-past-midnight", SECONDS_PAST_MIDNIGHT }, // 755 + { "security", SECURITY }, // 756 + { "separate", SEPARATE }, // 757 + { "sequence", SEQUENCE }, // 758 + { "sequential", SEQUENTIAL }, // 759 + { "sharing", SHARING }, // 760 + { "simple-exit", SIMPLE_EXIT }, // 761 + { "sign", SIGN }, // 762 + { "sin", SIN }, // 763 + { "size", SIZE }, // 764 + { "smallest-algebraic", SMALLEST_ALGEBRAIC }, // 765 + { "source", SOURCE }, // 766 + { "source-computer", SOURCE_COMPUTER }, // 767 + { "special-names", SPECIAL_NAMES }, // 768 + { "sqrt", SQRT }, // 769 + { "stack", STACK }, // 770 + { "standard", STANDARD }, // 771 + { "standard-1", STANDARD_1 }, // 772 + { "standard-deviation", STANDARD_DEVIATION }, // 773 + { "standard-compare", STANDARD_COMPARE }, // 774 + { "status", STATUS }, // 775 + { "strong", STRONG }, // 776 + { "substitute", SUBSTITUTE }, // 777 + { "sum", SUM }, // 778 + { "symbol", SYMBOL }, // 779 + { "symbolic", SYMBOLIC }, // 780 + { "synchronized", SYNCHRONIZED }, // 781 + { "tally", TALLY }, // 782 + { "tallying", TALLYING }, // 783 + { "tan", TAN }, // 784 + { "terminate", TERMINATE }, // 785 + { "test", TEST }, // 786 + { "test-date-yyyymmdd", TEST_DATE_YYYYMMDD }, // 787 + { "test-day-yyyyddd", TEST_DAY_YYYYDDD }, // 788 + { "test-formatted-datetime", TEST_FORMATTED_DATETIME }, // 789 + { "test-numval", TEST_NUMVAL }, // 790 + { "test-numval-c", TEST_NUMVAL_C }, // 791 + { "test-numval-f", TEST_NUMVAL_F }, // 792 + { "than", THAN }, // 793 + { "time", TIME }, // 794 + { "times", TIMES }, // 795 + { "to", TO }, // 796 + { "top", TOP }, // 797 + { "top-level", TOP_LEVEL }, // 798 + { "tracks", TRACKS }, // 799 + { "track-area", TRACK_AREA }, // 800 + { "trailing", TRAILING }, // 801 + { "transform", TRANSFORM }, // 802 + { "trim", TRIM }, // 803 + { "true", TRUE_kw }, // 804 + { "try", TRY }, // 805 + { "turn", TURN }, // 806 + { "type", TYPE }, // 807 + { "typedef", TYPEDEF }, // 808 + { "ulength", ULENGTH }, // 809 + { "unbounded", UNBOUNDED }, // 810 + { "unit", UNIT }, // 811 + { "units", UNITS }, // 812 + { "unit-record", UNIT_RECORD }, // 813 + { "until", UNTIL }, // 814 + { "up", UP }, // 815 + { "upon", UPON }, // 816 + { "upos", UPOS }, // 817 + { "upper-case", UPPER_CASE }, // 818 + { "usage", USAGE }, // 819 + { "using", USING }, // 820 + { "usubstr", USUBSTR }, // 821 + { "usupplementary", USUPPLEMENTARY }, // 822 + { "utility", UTILITY }, // 823 + { "uuid4", UUID4 }, // 824 + { "uvalid", UVALID }, // 825 + { "uwidth", UWIDTH }, // 826 + { "value", VALUE }, // 827 + { "variance", VARIANCE }, // 828 + { "varying", VARYING }, // 829 + { "volatile", VOLATILE }, // 830 + { "when-compiled", WHEN_COMPILED }, // 831 + { "with", WITH }, // 832 + { "working-storage", WORKING_STORAGE }, // 833 + { "xml", XML }, // 834 + { "xmlgenerate", XMLGENERATE }, // 835 + { "xmlparse", XMLPARSE }, // 836 + { "year-to-yyyy", YEAR_TO_YYYY }, // 837 + { "yyyyddd", YYYYDDD }, // 838 + { "yyyymmdd", YYYYMMDD }, // 839 + { "arithmetic", ARITHMETIC }, // 840 + { "attribute", ATTRIBUTE }, // 841 + { "auto", AUTO }, // 842 + { "automatic", AUTOMATIC }, // 843 + { "away-from-zero", AWAY_FROM_ZERO }, // 844 + { "background-color", BACKGROUND_COLOR }, // 845 + { "bell", BELL }, // 846 + { "binary-encoding", BINARY_ENCODING }, // 847 + { "blink", BLINK }, // 848 + { "capacity", CAPACITY }, // 849 + { "center", CENTER }, // 850 + { "classification", CLASSIFICATION }, // 851 + { "cycle", CYCLE }, // 852 + { "decimal-encoding", DECIMAL_ENCODING }, // 853 + { "entry-convention", ENTRY_CONVENTION }, // 854 + { "eol", EOL }, // 855 + { "eos", EOS }, // 856 + { "erase", ERASE }, // 857 + { "expands", EXPANDS }, // 858 + { "float-binary", FLOAT_BINARY }, // 859 + { "float-decimal", FLOAT_DECIMAL }, // 860 + { "foreground-color", FOREGROUND_COLOR }, // 861 + { "forever", FOREVER }, // 862 + { "full", FULL }, // 863 + { "highlight", HIGHLIGHT }, // 864 + { "high-order-left", HIGH_ORDER_LEFT }, // 865 + { "high-order-right", HIGH_ORDER_RIGHT }, // 866 + { "ignoring", IGNORING }, // 867 + { "implements", IMPLEMENTS }, // 868 + { "initialized", INITIALIZED }, // 869 + { "intermediate", INTERMEDIATE }, // 870 + { "lc-all", LC_ALL_kw }, // 871 + { "lc-collate", LC_COLLATE_kw }, // 872 + { "lc-ctype", LC_CTYPE_kw }, // 873 + { "lc-messages", LC_MESSAGES_kw }, // 874 + { "lc-monetary", LC_MONETARY_kw }, // 875 + { "lc-numeric", LC_NUMERIC_kw }, // 876 + { "lc-time", LC_TIME_kw }, // 877 + { "lowlight", LOWLIGHT }, // 878 + { "nearest-away-from-zero", NEAREST_AWAY_FROM_ZERO }, // 879 + { "nearest-even", NEAREST_EVEN }, // 880 + { "nearest-toward-zero", NEAREST_TOWARD_ZERO }, // 881 + { "none", NONE }, // 882 + { "normal", NORMAL }, // 883 + { "numbers", NUMBERS }, // 884 + { "prefixed", PREFIXED }, // 885 + { "previous", PREVIOUS }, // 886 + { "prohibited", PROHIBITED }, // 887 + { "relation", RELATION }, // 888 + { "required", REQUIRED }, // 889 + { "reverse-video", REVERSE_VIDEO }, // 890 + { "rounding", ROUNDING }, // 891 + { "seconds", SECONDS }, // 892 + { "secure", SECURE }, // 893 + { "short", SHORT }, // 894 + { "signed", SIGNED }, // 895 + { "standard-binary", STANDARD_BINARY }, // 896 + { "standard-decimal", STANDARD_DECIMAL }, // 897 + { "statement", STATEMENT }, // 898 + { "step", STEP }, // 899 + { "structure", STRUCTURE }, // 900 + { "toward-greater", TOWARD_GREATER }, // 901 + { "toward-lesser", TOWARD_LESSER }, // 902 + { "truncation", TRUNCATION }, // 903 + { "ucs-4", UCS_4 }, // 904 + { "underline", UNDERLINE }, // 905 + { "unsigned", UNSIGNED }, // 906 + { "utf-16", UTF_16 }, // 907 + { "utf-8", UTF_8 }, // 908 + { "address", ADDRESS }, // 909 + { "end-accept", END_ACCEPT }, // 910 + { "end-add", END_ADD }, // 911 + { "end-call", END_CALL }, // 912 + { "end-compute", END_COMPUTE }, // 913 + { "end-delete", END_DELETE }, // 914 + { "end-display", END_DISPLAY }, // 915 + { "end-divide", END_DIVIDE }, // 916 + { "end-evaluate", END_EVALUATE }, // 917 + { "end-multiply", END_MULTIPLY }, // 918 + { "end-perform", END_PERFORM }, // 919 + { "end-read", END_READ }, // 920 + { "end-return", END_RETURN }, // 921 + { "end-rewrite", END_REWRITE }, // 922 + { "end-search", END_SEARCH }, // 923 + { "end-start", END_START }, // 924 + { "end-string", END_STRING }, // 925 + { "end-subtract", END_SUBTRACT }, // 926 + { "end-unstring", END_UNSTRING }, // 927 + { "end-write", END_WRITE }, // 928 + { "end-if", END_IF }, // 929 + { "through", THRU }, // 930 + { "or", OR }, // 931 + { "and", AND }, // 932 + { "not", NOT }, // 933 + { "ne", NE }, // 934 + { "le", LE }, // 935 + { "ge", GE }, // 936 + { "pow", POW }, // 937 + { "neg", NEG }, // 938 +}; + +token_names = { + "identification", // 0 (258) + "environment", // 1 (259) + "procedure", // 2 (260) + "data", // 3 (261) + "file", // 4 (262) + "input-output", // 5 (263) + "linkage", // 6 (264) + "local-storage", // 7 (265) + "working-storage", // 8 (266) + "object-computer", // 9 (267) + "display-of", // 10 (268) + "end-function", // 11 (269) + "end-program", // 12 (270) + "end-subprogram", // 13 (271) + "justified", // 14 (272) + "returning", // 15 (273) + "no-condition", // 16 (274) + "alnum", // 17 (275) + "alphed", // 18 (276) + "error", // 19 (277) + "exception", // 20 (278) + "size-error", // 21 (279) + "exception-name", // 22 (280) + "level", // 23 (281) + "level66", // 24 (282) + "level78", // 25 (283) + "level88", // 26 (284) + "class-name", // 27 (285) + "name", // 28 (286) + "name88", // 29 (287) + "nume", // 30 (288) + "numed", // 31 (289) + "numed-cr", // 32 (290) + "numed-db", // 33 (291) + "ninedot", // 34 (292) + "nines", // 35 (293) + "ninev", // 36 (294) + "pic-p", // 37 (295) + "space", // 38 (296) + "literal", // 39 (297) + "end", // 40 (298) + "eop", // 41 (299) + "filename", // 42 (300) + "invalid", // 43 (301) + "number", // 44 (302) + "negative", // 45 (303) + "numstr", // 46 (304) + "overflow", // 47 (305) + "computational", // 48 (306) + "perform", // 49 (307) + "backward", // 50 (308) + "positive", // 51 (309) + "pointer", // 52 (310) + "section", // 53 (311) + "standard-alphabet", // 54 (312) + "switch", // 55 (313) + "upsi", // 56 (314) + "zero", // 57 (315) + "sysin", // 58 (316) + "sysipt", // 59 (317) + "sysout", // 60 (318) + "syslist", // 61 (319) + "syslst", // 62 (320) + "syspunch", // 63 (321) + "syspch", // 64 (322) + "console", // 65 (323) + "c01", // 66 (324) + "c02", // 67 (325) + "c03", // 68 (326) + "c04", // 69 (327) + "c05", // 70 (328) + "c06", // 71 (329) + "c07", // 72 (330) + "c08", // 73 (331) + "c09", // 74 (332) + "c10", // 75 (333) + "c11", // 76 (334) + "c12", // 77 (335) + "csp", // 78 (336) + "s01", // 79 (337) + "s02", // 80 (338) + "s03", // 81 (339) + "s04", // 82 (340) + "s05", // 83 (341) + "afp-5a", // 84 (342) + "stdin", // 85 (343) + "stdout", // 86 (344) + "stderr", // 87 (345) + "list", // 88 (346) + "map", // 89 (347) + "nolist", // 90 (348) + "nomap", // 91 (349) + "nosource", // 92 (350) + "might-be", // 93 (351) + "function-udf", // 94 (352) + "function-udf-0", // 95 (353) + "date-fmt", // 96 (354) + "time-fmt", // 97 (355) + "datetime-fmt", // 98 (356) + "basis", // 99 (357) + "cbl", // 100 (358) + "constant", // 101 (359) + "copy", // 102 (360) + "defined", // 103 (361) + "enter", // 104 (362) + "feature", // 105 (363) + "insertt", // 106 (364) + "lsub", // 107 (365) + "parameter", // 108 (366) + "override", // 109 (367) + "ready", // 110 (368) + "reset", // 111 (369) + "rsub", // 112 (370) + "service-reload", // 113 (371) + "star-cbl", // 114 (372) + "subscript", // 115 (373) + "suppress", // 116 (374) + "title", // 117 (375) + "trace", // 118 (376) + "use", // 119 (377) + "cobol-words", // 120 (378) + "equate", // 121 (379) + "undefine", // 122 (380) + "cdf-define", // 123 (381) + "cdf-display", // 124 (382) + "cdf-if", // 125 (383) + "cdf-else", // 126 (384) + "cdf-end-if", // 127 (385) + "cdf-evaluate", // 128 (386) + "cdf-when", // 129 (387) + "cdf-end-evaluate", // 130 (388) + "call-cobol", // 131 (389) + "call-verbatim", // 132 (390) + "if", // 133 (391) + "then", // 134 (392) + "else", // 135 (393) + "sentence", // 136 (394) + "accept", // 137 (395) + "add", // 138 (396) + "alter", // 139 (397) + "call", // 140 (398) + "cancel", // 141 (399) + "close", // 142 (400) + "compute", // 143 (401) + "continue", // 144 (402) + "delete", // 145 (403) + "display", // 146 (404) + "divide", // 147 (405) + "evaluate", // 148 (406) + "exit", // 149 (407) + "filler", // 150 (408) + "goback", // 151 (409) + "goto", // 152 (410) + "initialize", // 153 (411) + "inspect", // 154 (412) + "merge", // 155 (413) + "move", // 156 (414) + "multiply", // 157 (415) + "open", // 158 (416) + "paragraph", // 159 (417) + "read", // 160 (418) + "release", // 161 (419) + "return", // 162 (420) + "rewrite", // 163 (421) + "search", // 164 (422) + "set", // 165 (423) + "select", // 166 (424) + "sort", // 167 (425) + "sort-merge", // 168 (426) + "string", // 169 (427) + "stop", // 170 (428) + "subtract", // 171 (429) + "start", // 172 (430) + "unstring", // 173 (431) + "write", // 174 (432) + "when", // 175 (433) + "abs", // 176 (434) + "access", // 177 (435) + "acos", // 178 (436) + "actual", // 179 (437) + "advancing", // 180 (438) + "after", // 181 (439) + "all", // 182 (440) + "allocate", // 183 (441) + "alphabet", // 184 (442) + "alphabetic", // 185 (443) + "alphabetic-lower", // 186 (444) + "alphabetic-upper", // 187 (445) + "alphanumeric", // 188 (446) + "alphanumeric-edited", // 189 (447) + "also", // 190 (448) + "alternate", // 191 (449) + "annuity", // 192 (450) + "anum", // 193 (451) + "any", // 194 (452) + "anycase", // 195 (453) + "apply", // 196 (454) + "are", // 197 (455) + "area", // 198 (456) + "areas", // 199 (457) + "as", // 200 (458) + "ascending", // 201 (459) + "activating", // 202 (460) + "asin", // 203 (461) + "assign", // 204 (462) + "at", // 205 (463) + "atan", // 206 (464) + "based", // 207 (465) + "baseconvert", // 208 (466) + "before", // 209 (467) + "binary", // 210 (468) + "bit", // 211 (469) + "bit-of", // 212 (470) + "bit-to-char", // 213 (471) + "blank", // 214 (472) + "block", // 215 (473) + "boolean-of-integer", // 216 (474) + "bottom", // 217 (475) + "by", // 218 (476) + "byte", // 219 (477) + "byte-length", // 220 (478) + "cf", // 221 (479) + "ch", // 222 (480) + "changed", // 223 (481) + "char", // 224 (482) + "char-national", // 225 (483) + "character", // 226 (484) + "characters", // 227 (485) + "checking", // 228 (486) + "class", // 229 (487) + "cobol", // 230 (488) + "code", // 231 (489) + "code-set", // 232 (490) + "collating", // 233 (491) + "column", // 234 (492) + "combined-datetime", // 235 (493) + "comma", // 236 (494) + "command-line", // 237 (495) + "command-line-count", // 238 (496) + "commit", // 239 (497) + "common", // 240 (498) + "concat", // 241 (499) + "condition", // 242 (500) + "configuration", // 243 (501) + "contains", // 244 (502) + "content", // 245 (503) + "control", // 246 (504) + "controls", // 247 (505) + "convert", // 248 (506) + "converting", // 249 (507) + "corresponding", // 250 (508) + "cos", // 251 (509) + "count", // 252 (510) + "currency", // 253 (511) + "current", // 254 (512) + "current-date", // 255 (513) + "data", // 256 (514) + "date", // 257 (515) + "date-compiled", // 258 (516) + "date-of-integer", // 259 (517) + "date-to-yyyymmdd", // 260 (518) + "date-written", // 261 (519) + "day", // 262 (520) + "day-of-integer", // 263 (521) + "day-of-week", // 264 (522) + "day-to-yyyyddd", // 265 (523) + "dbcs", // 266 (524) + "de", // 267 (525) + "debugging", // 268 (526) + "decimal-point", // 269 (527) + "declaratives", // 270 (528) + "default", // 271 (529) + "delimited", // 272 (530) + "delimiter", // 273 (531) + "depending", // 274 (532) + "descending", // 275 (533) + "detail", // 276 (534) + "direct", // 277 (535) + "direct-access", // 278 (536) + "down", // 279 (537) + "duplicates", // 280 (538) + "dynamic", // 281 (539) + "e", // 282 (540) + "ebcdic", // 283 (541) + "ec", // 284 (542) + "egcs", // 285 (543) + "entry", // 286 (544) + "environment", // 287 (545) + "equal", // 288 (546) + "every", // 289 (547) + "examine", // 290 (548) + "exhibit", // 291 (549) + "exp", // 292 (550) + "exp10", // 293 (551) + "extend", // 294 (552) + "external", // 295 (553) + "exception-file", // 296 (554) + "exception-file-n", // 297 (555) + "exception-location", // 298 (556) + "exception-location-n", // 299 (557) + "exception-statement", // 300 (558) + "exception-status", // 301 (559) + "factorial", // 302 (560) + "false", // 303 (561) + "fd", // 304 (562) + "file-control", // 305 (563) + "file", // 306 (564) + "file-limit", // 307 (565) + "final", // 308 (566) + "finally", // 309 (567) + "find-string", // 310 (568) + "first", // 311 (569) + "fixed", // 312 (570) + "footing", // 313 (571) + "for", // 314 (572) + "formatted-current-date", // 315 (573) + "formatted-date", // 316 (574) + "formatted-datetime", // 317 (575) + "formatted-time", // 318 (576) + "form-overflow", // 319 (577) + "free", // 320 (578) + "fraction-part", // 321 (579) + "from", // 322 (580) + "function", // 323 (581) + "generate", // 324 (582) + "giving", // 325 (583) + "global", // 326 (584) + "go", // 327 (585) + "group", // 328 (586) + "heading", // 329 (587) + "hex", // 330 (588) + "hex-of", // 331 (589) + "hex-to-char", // 332 (590) + "high-values", // 333 (591) + "highest-algebraic", // 334 (592) + "hold", // 335 (593) + "ibm-360", // 336 (594) + "in", // 337 (595) + "include", // 338 (596) + "index", // 339 (597) + "indexed", // 340 (598) + "indicate", // 341 (599) + "initial", // 342 (600) + "initiate", // 343 (601) + "input", // 344 (602) + "installation", // 345 (603) + "interface", // 346 (604) + "integer", // 347 (605) + "integer-of-boolean", // 348 (606) + "integer-of-date", // 349 (607) + "integer-of-day", // 350 (608) + "integer-of-formatted-date", // 351 (609) + "integer-part", // 352 (610) + "into", // 353 (611) + "intrinsic", // 354 (612) + "invoke", // 355 (613) + "i-o", // 356 (614) + "i-o-control", // 357 (615) + "is", // 358 (616) + "isnt", // 359 (617) + "kanji", // 360 (618) + "key", // 361 (619) + "label", // 362 (620) + "last", // 363 (621) + "leading", // 364 (622) + "left", // 365 (623) + "length", // 366 (624) + "length-of", // 367 (625) + "limit", // 368 (626) + "limits", // 369 (627) + "line", // 370 (628) + "lines", // 371 (629) + "line-counter", // 372 (630) + "linage", // 373 (631) + "linkage", // 374 (632) + "locale", // 375 (633) + "locale-compare", // 376 (634) + "locale-date", // 377 (635) + "locale-time", // 378 (636) + "locale-time-from-seconds", // 379 (637) + "local-storage", // 380 (638) + "location", // 381 (639) + "lock", // 382 (640) + "lock-on", // 383 (641) + "log", // 384 (642) + "log10", // 385 (643) + "lower-case", // 386 (644) + "low-values", // 387 (645) + "lowest-algebraic", // 388 (646) + "lparen", // 389 (647) + "manual", // 390 (648) + "maxx", // 391 (649) + "mean", // 392 (650) + "median", // 393 (651) + "midrange", // 394 (652) + "minn", // 395 (653) + "multiple", // 396 (654) + "mod", // 397 (655) + "mode", // 398 (656) + "module-name", // 399 (657) + "named", // 400 (658) + "nat", // 401 (659) + "national", // 402 (660) + "national-edited", // 403 (661) + "national-of", // 404 (662) + "native", // 405 (663) + "nested", // 406 (664) + "next", // 407 (665) + "no", // 408 (666) + "note", // 409 (667) + "null", // 410 (668) + "nullptr", // 411 (669) + "numeric", // 412 (670) + "numeric-edited", // 413 (671) + "numval", // 414 (672) + "numval-c", // 415 (673) + "numval-f", // 416 (674) + "occurs", // 417 (675) + "of", // 418 (676) + "off", // 419 (677) + "omitted", // 420 (678) + "on", // 421 (679) + "only", // 422 (680) + "optional", // 423 (681) + "options", // 424 (682) + "ord", // 425 (683) + "order", // 426 (684) + "ord-max", // 427 (685) + "ord-min", // 428 (686) + "organization", // 429 (687) + "other", // 430 (688) + "otherwise", // 431 (689) + "output", // 432 (690) + "packed-decimal", // 433 (691) + "padding", // 434 (692) + "page", // 435 (693) + "page-counter", // 436 (694) + "pf", // 437 (695) + "ph", // 438 (696) + "pi", // 439 (697) + "pic", // 440 (698) + "pic", // 441 (699) + "plus", // 442 (700) + "present-value", // 443 (701) + "print-switch", // 444 (702) + "procedure", // 445 (703) + "procedures", // 446 (704) + "proceed", // 447 (705) + "process", // 448 (706) + "program-id", // 449 (707) + "program", // 450 (708) + "property", // 451 (709) + "prototype", // 452 (710) + "pseudotext", // 453 (711) + "quote", // 454 (712) + "quote", // 455 (713) + "random", // 456 (714) + "random-seed", // 457 (715) + "range", // 458 (716) + "raise", // 459 (717) + "raising", // 460 (718) + "rd", // 461 (719) + "record", // 462 (720) + "recording", // 463 (721) + "records", // 464 (722) + "recursive", // 465 (723) + "redefines", // 466 (724) + "reel", // 467 (725) + "reference", // 468 (726) + "relative", // 469 (727) + "rem", // 470 (728) + "remainder", // 471 (729) + "remarks", // 472 (730) + "removal", // 473 (731) + "renames", // 474 (732) + "replace", // 475 (733) + "replacing", // 476 (734) + "report", // 477 (735) + "reporting", // 478 (736) + "reports", // 479 (737) + "repository", // 480 (738) + "rerun", // 481 (739) + "reserve", // 482 (740) + "restricted", // 483 (741) + "resume", // 484 (742) + "reverse", // 485 (743) + "reversed", // 486 (744) + "rewind", // 487 (745) + "rf", // 488 (746) + "rh", // 489 (747) + "right", // 490 (748) + "rounded", // 491 (749) + "run", // 492 (750) + "same", // 493 (751) + "screen", // 494 (752) + "sd", // 495 (753) + "seconds-from-formatted-time", // 496 (754) + "seconds-past-midnight", // 497 (755) + "security", // 498 (756) + "separate", // 499 (757) + "sequence", // 500 (758) + "sequential", // 501 (759) + "sharing", // 502 (760) + "simple-exit", // 503 (761) + "sign", // 504 (762) + "sin", // 505 (763) + "size", // 506 (764) + "smallest-algebraic", // 507 (765) + "source", // 508 (766) + "source-computer", // 509 (767) + "special-names", // 510 (768) + "sqrt", // 511 (769) + "stack", // 512 (770) + "standard", // 513 (771) + "standard-1", // 514 (772) + "standard-deviation", // 515 (773) + "standard-compare", // 516 (774) + "status", // 517 (775) + "strong", // 518 (776) + "substitute", // 519 (777) + "sum", // 520 (778) + "symbol", // 521 (779) + "symbolic", // 522 (780) + "synchronized", // 523 (781) + "tally", // 524 (782) + "tallying", // 525 (783) + "tan", // 526 (784) + "terminate", // 527 (785) + "test", // 528 (786) + "test-date-yyyymmdd", // 529 (787) + "test-day-yyyyddd", // 530 (788) + "test-formatted-datetime", // 531 (789) + "test-numval", // 532 (790) + "test-numval-c", // 533 (791) + "test-numval-f", // 534 (792) + "than", // 535 (793) + "time", // 536 (794) + "times", // 537 (795) + "to", // 538 (796) + "top", // 539 (797) + "top-level", // 540 (798) + "tracks", // 541 (799) + "track-area", // 542 (800) + "trailing", // 543 (801) + "transform", // 544 (802) + "trim", // 545 (803) + "true", // 546 (804) + "try", // 547 (805) + "turn", // 548 (806) + "type", // 549 (807) + "typedef", // 550 (808) + "ulength", // 551 (809) + "unbounded", // 552 (810) + "unit", // 553 (811) + "units", // 554 (812) + "unit-record", // 555 (813) + "until", // 556 (814) + "up", // 557 (815) + "upon", // 558 (816) + "upos", // 559 (817) + "upper-case", // 560 (818) + "usage", // 561 (819) + "using", // 562 (820) + "usubstr", // 563 (821) + "usupplementary", // 564 (822) + "utility", // 565 (823) + "uuid4", // 566 (824) + "uvalid", // 567 (825) + "uwidth", // 568 (826) + "value", // 569 (827) + "variance", // 570 (828) + "varying", // 571 (829) + "volatile", // 572 (830) + "when-compiled", // 573 (831) + "with", // 574 (832) + "working-storage", // 575 (833) + "xml", // 576 (834) + "xmlgenerate", // 577 (835) + "xmlparse", // 578 (836) + "year-to-yyyy", // 579 (837) + "yyyyddd", // 580 (838) + "yyyymmdd", // 581 (839) + "arithmetic", // 582 (840) + "attribute", // 583 (841) + "auto", // 584 (842) + "automatic", // 585 (843) + "away-from-zero", // 586 (844) + "background-color", // 587 (845) + "bell", // 588 (846) + "binary-encoding", // 589 (847) + "blink", // 590 (848) + "capacity", // 591 (849) + "center", // 592 (850) + "classification", // 593 (851) + "cycle", // 594 (852) + "decimal-encoding", // 595 (853) + "entry-convention", // 596 (854) + "eol", // 597 (855) + "eos", // 598 (856) + "erase", // 599 (857) + "expands", // 600 (858) + "float-binary", // 601 (859) + "float-decimal", // 602 (860) + "foreground-color", // 603 (861) + "forever", // 604 (862) + "full", // 605 (863) + "highlight", // 606 (864) + "high-order-left", // 607 (865) + "high-order-right", // 608 (866) + "ignoring", // 609 (867) + "implements", // 610 (868) + "initialized", // 611 (869) + "intermediate", // 612 (870) + "lc-all", // 613 (871) + "lc-collate", // 614 (872) + "lc-ctype", // 615 (873) + "lc-messages", // 616 (874) + "lc-monetary", // 617 (875) + "lc-numeric", // 618 (876) + "lc-time", // 619 (877) + "lowlight", // 620 (878) + "nearest-away-from-zero", // 621 (879) + "nearest-even", // 622 (880) + "nearest-toward-zero", // 623 (881) + "none", // 624 (882) + "normal", // 625 (883) + "numbers", // 626 (884) + "prefixed", // 627 (885) + "previous", // 628 (886) + "prohibited", // 629 (887) + "relation", // 630 (888) + "required", // 631 (889) + "reverse-video", // 632 (890) + "rounding", // 633 (891) + "seconds", // 634 (892) + "secure", // 635 (893) + "short", // 636 (894) + "signed", // 637 (895) + "standard-binary", // 638 (896) + "standard-decimal", // 639 (897) + "statement", // 640 (898) + "step", // 641 (899) + "structure", // 642 (900) + "toward-greater", // 643 (901) + "toward-lesser", // 644 (902) + "truncation", // 645 (903) + "ucs-4", // 646 (904) + "underline", // 647 (905) + "unsigned", // 648 (906) + "utf-16", // 649 (907) + "utf-8", // 650 (908) + "address", // 651 (909) + "end-accept", // 652 (910) + "end-add", // 653 (911) + "end-call", // 654 (912) + "end-compute", // 655 (913) + "end-delete", // 656 (914) + "end-display", // 657 (915) + "end-divide", // 658 (916) + "end-evaluate", // 659 (917) + "end-multiply", // 660 (918) + "end-perform", // 661 (919) + "end-read", // 662 (920) + "end-return", // 663 (921) + "end-rewrite", // 664 (922) + "end-search", // 665 (923) + "end-start", // 666 (924) + "end-string", // 667 (925) + "end-subtract", // 668 (926) + "end-unstring", // 669 (927) + "end-write", // 670 (928) + "end-if", // 671 (929) + "through", // 672 (930) + "or", // 673 (931) + "and", // 674 (932) + "not", // 675 (933) + "ne", // 676 (934) + "le", // 677 (935) + "ge", // 678 (936) + "pow", // 679 (937) + "neg", // 680 (938) +}; diff --git a/gcc/cobol/token_names.h.gen b/gcc/cobol/token_names.h.gen new file mode 100755 index 000000000000..1d9915b9519e --- /dev/null +++ b/gcc/cobol/token_names.h.gen @@ -0,0 +1,67 @@ +#! /usr/bin/awk -f + +# From the generated parse.h, generate a map of token names in their +# COBOL form to their integer values. While we're at it, generate an +# array of the same names to support keywork_str(). + +BEGIN { + FS = "[ ,=]+" + script = PROCINFO["argv"][2] + input = PROCINFO["argv"][3] + print "// generated by", script, input + printf "// " + system("date") + print "tokens = {" +} + +/^ +enum yytokentype/,/[}];/ { + if( $0 ~ /enum yytokentype/ ) { next } + if( $0 ~ /[{}]/ ) { next } + if( $3 < 3 + 255 ) { next } + + orig = $2 + + # remove conventional suffix + gsub( /_(DIV|SECT|KW|kw)$/, "", $2 ) + + gsub( /^CODESET/, "CODE-SET", $2 ) + gsub( /^IO/, "I-O", $2 ) + gsub( /^PICTURE/, "PIC", $2 ) + gsub( /^QUOTES/, "QUOTE", $2 ) + gsub( /^THRU/, "THROUGH", $2 ) + + gsub(/_/, "-") + name = tolower($2) + print "\t{ \"" name "\",", orig, "}, //", $3 + + # Aliases + if( name == "nulls" ) { + name = "null" + print "\t{ \"" name "\",", orig, "}, //", $3 + } + if( name == "spaces" ) { + name = "space" + print "\t{ \"" name "\",", orig, "}, //", $3 + } + if( name == "thru" ) { + name = "through" + print "\t{ \"" name "\",", orig, "}, //", $3 + } + if( name == "zero" ) { + print "\t{ \"" name "s\",", orig, "}, //", $3 + print "\t{ \"" name "eo\",", orig, "}, //", $3 + } + + tok = $3 - (3 + 255) + kw_array[tok] = name +} + +END { + print "};\n" + + print "token_names = {" + for( tok in kw_array ) { + print "\t\"" kw_array[tok] "\",", "//", tok, "(" tok + 3 + 255 ")" + } + print "};" +} diff --git a/gcc/cobol/util.cc b/gcc/cobol/util.cc index 2dd65da4173c..5891ae853dd1 100644 --- a/gcc/cobol/util.cc +++ b/gcc/cobol/util.cc @@ -1720,87 +1720,6 @@ corresponding_arith_fields( cbl_field_t *lhs, cbl_field_t *rhs ) { return corresponding_fields( lhs, rhs, find_corresponding::arith_op ); } -typedef int (*file_sort_cmp_t)(const void *, const void *, void *); - -/* - * Concatenate files, appending src to tgt. Used by SORT. - * Files must be open. - * Returns FALSE only on OS error; errno is intact. - */ -bool -cbl_file_union( int tgt, int src ) { - static const unsigned int flags = 0; - struct stat sb; - - if( 0 != fstat(tgt, &sb) ) { - return false; - } - loff_t off_in = sb.st_size, off_out = 0; - - if( 0 != fstat(src, &sb) ) { - return false; - } - size_t len = sb.st_size; - - // extend target file - if( 0 != ftruncate(tgt, off_in + len) ) { - return false; - } - - ssize_t n = copy_file_range(src, &off_in, tgt, &off_out, len, flags); - - return n == (ssize_t)len; -} - -/* - * Break a 2-token string into parts, and determine which if any are - * keywords. Return 1st token length if the string is a name-keyword - * pair, and fill token with the token describing the 1st of the two, - * else return 0. - */ -int keyword_of( const char name[] ); - -int -name_space_kw( const char input[], int *token ) { - regex_t reg; - int erc, cflags = REG_EXTENDED, eflags=0; - regmatch_t m[5]; - - const char pattern[] = "^[[:alnum:]_]+[[:space:]]+[[:alnum:]_]+$"; - - if( (erc = regcomp(®, pattern, cflags)) != 0 ) { - char msg[80]; - regerror(erc, ®, msg, sizeof(msg)); - cbl_errx( "%s: regcomp: %s", __func__, msg ); - } - - if( REG_NOMATCH == regexec(®, input, COUNT_OF(m), m, eflags) ) { - cbl_errx( "%s: regexec: no match", __func__ ); - } - - regfree(®); - - assert( m[0].rm_eo == (int)strlen(input) ); - assert( m[1].rm_so == 0 ); - assert( m[1].rm_eo < m[2].rm_so ); - assert( m[2].rm_eo < m[3].rm_so ); - assert( m[3].rm_so < m[3].rm_eo ); - - char candidate[ strlen(input) ]; - const int len1 = m[1].rm_eo; - sprintf( candidate, "%.*s", len1, input ); - - if( (*token = keyword_of(candidate)) > 0 ) { - return 0; // not name-space-token - } - assert(token == 0); - - int len2 = m[3].rm_eo - m[3].rm_so; - sprintf( candidate, "%.*s", len2, input ); - - return keyword_of(candidate)? len1 : 0; // 1st is NAME, 2nd is keyword -} - char date_time_fmt( const char input[] ) { if( ! input ) return 0; -- GitLab