a68g-non-terminal.c

     
   1  //! @file a68g-non-terminal.c
   2  //! @author J. Marcel van der Veer
   3  
   4  //! @section Copyright
   5  //!
   6  //! This file is part of Algol68G - an Algol 68 compiler-interpreter.
   7  //! Copyright 2001-2024 J. Marcel van der Veer [algol68g@xs4all.nl].
   8  
   9  //! @section License
  10  //!
  11  //! This program is free software; you can redistribute it and/or modify it 
  12  //! under the terms of the GNU General Public License as published by the 
  13  //! Free Software Foundation; either version 3 of the License, or 
  14  //! (at your option) any later version.
  15  //!
  16  //! This program is distributed in the hope that it will be useful, but 
  17  //! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
  18  //! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 
  19  //! more details. You should have received a copy of the GNU General Public 
  20  //! License along with this program. If not, see [http://www.gnu.org/licenses/].
  21  
  22  //! @section Synopsis
  23  //!
  24  //! Non-terminal tables.
  25  
  26  #include "a68g.h"
  27  
  28  // Translate int attributes to string names.
  29  
  30  static char *attribute_names[WILDCARD + 1] = {
  31    NO_TEXT,
  32    "A68_PATTERN",
  33    "ACCO_SYMBOL",
  34    "ACTUAL_DECLARER_MARK",
  35    "ALIF_IF_PART",
  36    "ALIF_PART",
  37    "ALIF_SYMBOL",
  38    "ALT_DO_PART",
  39    "ALT_DO_SYMBOL",
  40    "ALT_EQUALS_SYMBOL",
  41    "ALT_FORMAL_BOUNDS_LIST",
  42    "ANDF_SYMBOL",
  43    "AND_FUNCTION",
  44    "ANONYMOUS",
  45    "ARGUMENT",
  46    "ARGUMENT_LIST",
  47    "ASSERTION",
  48    "ASSERT_SYMBOL",
  49    "ASSIGNATION",
  50    "ASSIGN_SYMBOL",
  51    "ASSIGN_TO_SYMBOL",
  52    "AT_SYMBOL",
  53    "BEGIN_SYMBOL",
  54    "BITS_C_PATTERN",
  55    "BITS_DENOTATION",
  56    "BITS_PATTERN",
  57    "BITS_SYMBOL",
  58    "BOLD_COMMENT_SYMBOL",
  59    "BOLD_PRAGMAT_SYMBOL",
  60    "BOLD_TAG",
  61    "BOOLEAN_PATTERN",
  62    "BOOL_SYMBOL",
  63    "BOUND",
  64    "BOUNDS",
  65    "BOUNDS_LIST",
  66    "BRIEF_OUSE_PART",
  67    "BRIEF_CONFORMITY_OUSE_PART",
  68    "BRIEF_ELIF_PART",
  69    "BRIEF_OPERATOR_DECLARATION",
  70    "BUS_SYMBOL",
  71    "BYTES_SYMBOL",
  72    "BY_PART",
  73    "BY_SYMBOL",
  74    "CALL",
  75    "CASE_CHOICE_CLAUSE",
  76    "CASE_CLAUSE",
  77    "CASE_IN_PART",
  78    "CASE_OUSE_PART",
  79    "CASE_PART",
  80    "CASE_SYMBOL",
  81    "CAST",
  82    "CHANNEL_SYMBOL",
  83    "CHAR_C_PATTERN",
  84    "CHAR_SYMBOL",
  85    "CHOICE",
  86    "CHOICE_PATTERN",
  87    "CLASS_SYMBOL",
  88    "CLOSED_CLAUSE",
  89    "CLOSE_SYMBOL",
  90    "CODE_CLAUSE",
  91    "CODE_LIST",
  92    "CODE_SYMBOL",
  93    "COLLATERAL_CLAUSE",
  94    "COLLECTION",
  95    "COLON_SYMBOL",
  96    "COLUMN_FUNCTION",
  97    "COLUMN_SYMBOL",
  98    "COMMA_SYMBOL",
  99    "COMPLEX_PATTERN",
 100    "COMPLEX_SYMBOL",
 101    "COMPL_SYMBOL",
 102    "CONDITIONAL_CLAUSE",
 103    "CONFORMITY_CHOICE",
 104    "CONFORMITY_CLAUSE",
 105    "CONFORMITY_IN_PART",
 106    "CONFORMITY_OUSE_PART",
 107    "CONSTRUCT",
 108    "DECLARATION_LIST",
 109    "DECLARER",
 110    "DEFINING_IDENTIFIER",
 111    "DEFINING_INDICANT",
 112    "DEFINING_OPERATOR",
 113    "DENOTATION",
 114    "DEPROCEDURING",
 115    "DEREFERENCING",
 116    "DIAGONAL_FUNCTION",
 117    "DIAGONAL_SYMBOL",
 118    "DOTDOT_SYMBOL",
 119    "DOWNTO_SYMBOL",
 120    "DO_PART",
 121    "DO_SYMBOL",
 122    "DYNAMIC_REPLICATOR",
 123    "EDOC_SYMBOL",
 124    "ELIF_IF_PART",
 125    "ELIF_PART",
 126    "ELIF_SYMBOL",
 127    "ELSE_BAR_SYMBOL",
 128    "ELSE_OPEN_PART",
 129    "ELSE_PART",
 130    "ELSE_SYMBOL",
 131    "EMPTY_SYMBOL",
 132    "ENCLOSED_CLAUSE",
 133    "END_SYMBOL",
 134    "ENQUIRY_CLAUSE",
 135    "ENVIRON_NAME",
 136    "ENVIRON_SYMBOL",
 137    "EQUALS_SYMBOL",
 138    "ERROR",
 139    "ERROR_IDENTIFIER",
 140    "ESAC_SYMBOL",
 141    "EXIT_SYMBOL",
 142    "EXPONENT_FRAME",
 143    "FALSE_SYMBOL",
 144    "FIELD",
 145    "FIELD_IDENTIFIER",
 146    "FILE_SYMBOL",
 147    "FIRM",
 148    "FIXED_C_PATTERN",
 149    "FI_SYMBOL",
 150    "FLEX_SYMBOL",
 151    "FLOAT_C_PATTERN",
 152    "FORMAL_BOUNDS",
 153    "FORMAL_BOUNDS_LIST",
 154    "FORMAL_DECLARERS",
 155    "FORMAL_DECLARERS_LIST",
 156    "FORMAL_DECLARER_MARK",
 157    "FORMAT_A_FRAME",
 158    "FORMAT_CLOSE_SYMBOL",
 159    "FORMAT_DELIMITER_SYMBOL",
 160    "FORMAT_D_FRAME",
 161    "FORMAT_E_FRAME",
 162    "FORMAT_IDENTIFIER",
 163    "FORMAT_ITEM_A",
 164    "FORMAT_ITEM_B",
 165    "FORMAT_ITEM_C",
 166    "FORMAT_ITEM_D",
 167    "FORMAT_ITEM_E",
 168    "FORMAT_ITEM_ESCAPE",
 169    "FORMAT_ITEM_F",
 170    "FORMAT_ITEM_G",
 171    "FORMAT_ITEM_H",
 172    "FORMAT_ITEM_I",
 173    "FORMAT_ITEM_J",
 174    "FORMAT_ITEM_K",
 175    "FORMAT_ITEM_L",
 176    "FORMAT_ITEM_M",
 177    "FORMAT_ITEM_MINUS",
 178    "FORMAT_ITEM_N",
 179    "FORMAT_ITEM_O",
 180    "FORMAT_ITEM_P",
 181    "FORMAT_ITEM_PLUS",
 182    "FORMAT_ITEM_POINT",
 183    "FORMAT_ITEM_Q",
 184    "FORMAT_ITEM_R",
 185    "FORMAT_ITEM_S",
 186    "FORMAT_ITEM_T",
 187    "FORMAT_ITEM_U",
 188    "FORMAT_ITEM_V",
 189    "FORMAT_ITEM_W",
 190    "FORMAT_ITEM_X",
 191    "FORMAT_ITEM_Y",
 192    "FORMAT_ITEM_Z",
 193    "FORMAT_I_FRAME",
 194    "FORMAT_OPEN_SYMBOL",
 195    "FORMAT_PATTERN",
 196    "FORMAT_POINT_FRAME",
 197    "FORMAT_SYMBOL",
 198    "FORMAT_TEXT",
 199    "FORMAT_Z_FRAME",
 200    "FORMULA",
 201    "FOR_PART",
 202    "FOR_SYMBOL",
 203    "FROM_PART",
 204    "FROM_SYMBOL",
 205    "GENERAL_C_PATTERN",
 206    "GENERAL_PATTERN",
 207    "GENERATOR",
 208    "GENERIC_ARGUMENT",
 209    "GENERIC_ARGUMENT_LIST",
 210    "GOTO_SYMBOL",
 211    "GO_SYMBOL",
 212    "GUARDED_CONDITIONAL_CLAUSE",
 213    "GUARDED_LOOP_CLAUSE",
 214    "HEAP_SYMBOL",
 215    "IDENTIFIER",
 216    "IDENTITY_DECLARATION",
 217    "IDENTITY_RELATION",
 218    "IF_PART",
 219    "IF_SYMBOL",
 220    "INDICANT",
 221    "INITIALISER_SERIES",
 222    "INSERTION",
 223    "INTEGRAL_C_PATTERN",
 224    "INTEGRAL_MOULD",
 225    "INTEGRAL_PATTERN",
 226    "INT_DENOTATION",
 227    "INT_SYMBOL",
 228    "IN_SYMBOL",
 229    "IN_TYPE_MODE",
 230    "ISNT_SYMBOL",
 231    "IS_SYMBOL",
 232    "JUMP",
 233    "KEYWORD",
 234    "LABEL",
 235    "LABELED_UNIT",
 236    "LABEL_IDENTIFIER",
 237    "LABEL_SEQUENCE",
 238    "LITERAL",
 239    "LOCAL_LABEL",
 240    "LOC_SYMBOL",
 241    "LONGETY",
 242    "LONG_SYMBOL",
 243    "LOOP_CLAUSE",
 244    "LOOP_IDENTIFIER",
 245    "MAIN_SYMBOL",
 246    "MEEK",
 247    "MODE_BITS",
 248    "MODE_BOOL",
 249    "MODE_BYTES",
 250    "MODE_CHAR",
 251    "MODE_COMPLEX",
 252    "MODE_DECLARATION",
 253    "MODE_FILE",
 254    "MODE_FORMAT",
 255    "MODE_INT",
 256    "MODE_LONG_LONG_BITS",
 257    "MODE_LONG_LONG_COMPLEX",
 258    "MODE_LONG_LONG_INT",
 259    "MODE_LONG_LONG_REAL",
 260    "MODE_LONG_BITS",
 261    "MODE_LONG_BYTES",
 262    "MODE_LONG_COMPLEX",
 263    "MODE_LONG_INT",
 264    "MODE_LONG_REAL",
 265    "MODE_NO_CHECK",
 266    "MODE_PIPE",
 267    "MODE_REAL",
 268    "MODE_SOUND",
 269    "MODE_SYMBOL",
 270    "MONADIC_FORMULA",
 271    "MONAD_SEQUENCE",
 272    "NEW_SYMBOL",
 273    "NIHIL",
 274    "NIL_SYMBOL",
 275    "NORMAL_IDENTIFIER",
 276    "NO_SORT",
 277    "OCCA_SYMBOL",
 278    "OD_SYMBOL",
 279    "OF_SYMBOL",
 280    "OPEN_PART",
 281    "OPEN_SYMBOL",
 282    "OPERATOR",
 283    "OPERATOR_DECLARATION",
 284    "OPERATOR_PLAN",
 285    "OP_SYMBOL",
 286    "ORF_SYMBOL",
 287    "OR_FUNCTION",
 288    "OUSE_PART",
 289    "OUSE_SYMBOL",
 290    "OUT_PART",
 291    "OUT_SYMBOL",
 292    "OUT_TYPE_MODE",
 293    "PARALLEL_CLAUSE",
 294    "PARAMETER",
 295    "PARAMETER_IDENTIFIER",
 296    "PARAMETER_LIST",
 297    "PARAMETER_PACK",
 298    "PARTICULAR_PROGRAM",
 299    "PAR_SYMBOL",
 300    "PICTURE",
 301    "PICTURE_LIST",
 302    "PIPE_SYMBOL",
 303    "POINT_SYMBOL",
 304    "PRIMARY",
 305    "PRIORITY",
 306    "PRIORITY_DECLARATION",
 307    "PRIO_SYMBOL",
 308    "PROCEDURE_DECLARATION",
 309    "PROCEDURE_VARIABLE_DECLARATION",
 310    "PROCEDURING",
 311    "PROC_SYMBOL",
 312    "QUALIFIER",
 313    "RADIX_FRAME",
 314    "REAL_DENOTATION",
 315    "REAL_PATTERN",
 316    "REAL_SYMBOL",
 317    "REF_SYMBOL",
 318    "REPLICATOR",
 319    "ROUTINE_TEXT",
 320    "ROUTINE_UNIT",
 321    "ROWING",
 322    "ROWS_SYMBOL",
 323    "ROW_CHAR_DENOTATION",
 324    "ROW_FUNCTION",
 325    "ROW_SYMBOL",
 326    "SECONDARY",
 327    "SELECTION",
 328    "SELECTOR",
 329    "SEMA_SYMBOL",
 330    "SEMI_SYMBOL",
 331    "SERIAL_CLAUSE",
 332    "SERIES_MODE",
 333    "SHORTETY",
 334    "SHORT_SYMBOL",
 335    "SIGN_MOULD",
 336    "SKIP",
 337    "SKIP_SYMBOL",
 338    "SLICE",
 339    "SOFT",
 340    "SOME_CLAUSE",
 341    "SOUND_SYMBOL",
 342    "SPECIFICATION",
 343    "SPECIFIED_UNIT",
 344    "SPECIFIED_UNIT_LIST",
 345    "SPECIFIED_UNIT_UNIT",
 346    "SPECIFIER",
 347    "SPECIFIER_IDENTIFIER",
 348    "STANDARD",
 349    "STATIC_REPLICATOR",
 350    "STOWED_MODE",
 351    "STRING_C_PATTERN",
 352    "STRING_PATTERN",
 353    "STRING_SYMBOL",
 354    "STRONG",
 355    "STRUCTURED_FIELD",
 356    "STRUCTURED_FIELD_LIST",
 357    "STRUCTURE_PACK",
 358    "STRUCT_SYMBOL",
 359    "STYLE_II_COMMENT_SYMBOL",
 360    "STYLE_I_COMMENT_SYMBOL",
 361    "STYLE_I_PRAGMAT_SYMBOL",
 362    "SUB_SYMBOL",
 363    "SUB_UNIT",
 364    "TERTIARY",
 365    "THEN_BAR_SYMBOL",
 366    "THEN_PART",
 367    "THEN_SYMBOL",
 368    "TO_PART",
 369    "TO_SYMBOL",
 370    "TRANSPOSE_FUNCTION",
 371    "TRANSPOSE_SYMBOL",
 372    "TRIMMER",
 373    "TRUE_SYMBOL",
 374    "UNION_DECLARER_LIST",
 375    "UNION_PACK",
 376    "UNION_SYMBOL",
 377    "UNIT",
 378    "UNITING",
 379    "UNIT_LIST",
 380    "UNIT_SERIES",
 381    "UNTIL_PART",
 382    "UNTIL_SYMBOL",
 383    "VARIABLE_DECLARATION",
 384    "VIRTUAL_DECLARER_MARK",
 385    "VOIDING",
 386    "VOID_SYMBOL",
 387    "WEAK",
 388    "WHILE_PART",
 389    "WHILE_SYMBOL",
 390    "WIDENING",
 391    "WILDCARD"
 392  };
 393  
 394  //! @brief Non_terminal_string.
 395  
 396  char *non_terminal_string (char *buf, int att)
 397  {
 398    if (att > 0 && att < WILDCARD) {
 399      if (attribute_names[att] != NO_TEXT) {
 400        char *q = buf;
 401        a68_bufcpy (q, attribute_names[att], BUFFER_SIZE);
 402        while (q[0] != NULL_CHAR) {
 403          if (q[0] == '_') {
 404            q[0] = '-';
 405          } else {
 406            q[0] = (char) TO_LOWER (q[0]);
 407          }
 408          q++;
 409        }
 410        return buf;
 411      } else {
 412        return NO_TEXT;
 413      }
 414    } else {
 415      return NO_TEXT;
 416    }
 417  }