view anagram/agcore/config.cpp @ 21:1c9dac05d040

Add lint-style FALLTHROUGH annotations to fallthrough cases. (in the parse engine and thus the output code) Document this, because the old output causes warnings with gcc10.
author David A. Holland
date Mon, 13 Jun 2022 00:04:38 -0400
parents 13d2b8934445
children
line wrap: on
line source

/*
 * AnaGram, A System for Syntax Directed Programming
 * Copyright 1993-2002 Parsifal Software. All Rights Reserved.
 * See the file COPYING for license and usage terms.
 *
 * config.cpp
 */

#include "agstring.h"
#include "config.h"
#include "configparam.h"

//#define INCLUDE_LOGGING
#include "log.h"


#ifdef AG_ON_UNIX
#define ALL_MASK "*"
#endif

#ifdef AG_ON_WINDOWS
#define ALL_MASK "*.*"
#endif

#ifdef AG_ON_AMIGA
#define ALL_MASK "#?"
#endif

////////////////////////////////////////////////////////////

#undef INTEGER_PARAM
#undef STRING_PARAM
#undef SWITCH
#undef DICT_PARAM
#undef TOKEN_PARAM
#undef TEXT_PARAM

#define INTEGER_PARAM(txt,nm) static IntegerParam nm##Param(txt,nm); int nm
#define STRING_PARAM(txt, nm) static StringParam  nm##Param(txt,nm);AgString nm
#define SWITCH(txt, nm)       static ConfigSwitch nm##Param(txt,nm); int nm
#define CAST_PARAM(txt, nm)   static CastParam    nm##Param(txt,nm); int nm
#define TOKEN_PARAM(txt, nm)  static TokenParam   nm##Param(txt,nm); int nm
#define TEXT_PARAM(txt, nm)   static TextParam    nm##Param(txt,nm);AgString nm

SWITCH       ("allow macros",           allow_macros)           = 1;
SWITCH       ("auto init",              auto_init)              = 1;
SWITCH       ("auto resynch",           auto_resynch)           = 0;

SWITCH       ("backtrack",              backtrack)              = 1;
INTEGER_PARAM("bottom margin",          bottom_margin)          = 3;
SWITCH       ("bright background",      bright_background)      = 1;

SWITCH       ("case sensitive",         case_sensitive)         = 1;
STRING_PARAM ("compile command",        compile_command)        = "";
SWITCH       ("const data",             const_data)             = 1;
TEXT_PARAM   ("context type",           context_type)           ;
STRING_PARAM ("coverage file name",     coverage_file_name)     = "#.nrc";

SWITCH       ("declare pcb",            declare_pcb)            = 1;
CAST_PARAM   ("default input type",     default_input_type)     ;
SWITCH       ("default reductions",     default_reductions)     = 1; 
CAST_PARAM   ("default token type",     default_token_type)     ;
SWITCH       ("diagnose errors",        diagnose_errors)        = 1;
SWITCH       ("distinguish lexemes",    distinguish_lexemes)    = 0;

STRING_PARAM ("edit command",           edit_command)           = "ed #.syn";
SWITCH       ("enable mouse",           enable_mouse)           = 1;
STRING_PARAM ("enum constant name",     enum_constant_name)     = "$_%_token";
TOKEN_PARAM  ("eof token",              eof_token)              = 0;
SWITCH       ("error frame",            error_frame)            = 0;
TOKEN_PARAM  ("error token",            error_token)            ;
SWITCH       ("error trace",            error_trace)            = 0;
SWITCH       ("escape backslashes",     escape_backslashes)     = 0;
SWITCH       ("event driven",           event_driven)           = 0;

SWITCH       ("far tables",             far_tables)             = 0;

TOKEN_PARAM  ("grammar token",          grammar_token)          = 0;

STRING_PARAM ("header file name",       header_file_name)       = "#.h";

SWITCH       ("input values",           input_values)           = 0;
SWITCH       ("iso latin 1",            iso_latin_1)            = 1;

INTEGER_PARAM("line length",            line_length)            = 80;
SWITCH       ("line numbers",           line_numbers)           = 0;
STRING_PARAM ("line numbers path",      line_numbers_path)      ;
SWITCH       ("lines and columns",      lines_and_columns)      = 1;

SWITCH       ("main program",           main_program)           = 1;
INTEGER_PARAM("max conflicts",          max_conflicts)          = 50;

SWITCH       ("near functions",         near_functions)         = 0;
SWITCH       ("nest comments",          nest_comments)          = 0;
SWITCH       ("no cr",                  no_cr)                  = 0;

SWITCH       ("old style",              old_style)              = 0;

INTEGER_PARAM("page length",            page_length)            = 66;
STRING_PARAM ("parser file name",       parser_file_name)       = "#.c";
TEXT_PARAM   ("parser name",            parser_name)            = "#";
CAST_PARAM   ("parser stack alignment", parser_stack_alignment) ;
INTEGER_PARAM("parser stack size",      parser_stack_size)      = 128;
SWITCH       ("pointer input",          pointer_input)          = 0;
TEXT_PARAM   ("pointer type",           pointer_type)      = "unsigned char *";
STRING_PARAM ("print file name",        print_file_name)        = "LPT1";

SWITCH       ("quick reference",        quick_reference)        = 0;

SWITCH       ("reduction choices",      reduction_choices)      = 0;
SWITCH       ("reentrant parser",       reentrant_parser)       = 0;
SWITCH       ("rule coverage",          rule_coverage)          = 0;

INTEGER_PARAM("tab spacing",            tab_spacing)            = 8;
SWITCH       ("test file binary",       test_file_binary)       = 0;
STRING_PARAM ("test file mask",         test_file_mask)         = ALL_MASK;
SWITCH       ("test range",             test_range)             = 1;
SWITCH       ("token names",            token_names)            = 0;
SWITCH       ("token names only",       token_names_only)       = 0;
INTEGER_PARAM("top margin",             top_margin)             = 3;
SWITCH       ("traditional engine",     traditional_engine)     = 0;

INTEGER_PARAM("video mode",             video_mode)             = -1;

////////////////////////////////////////////////////////////

#define PARAM_REF(name) &name##Param

ConfigParam *ConfigParam::table[] = {
  PARAM_REF(allow_macros),
  PARAM_REF(auto_init),
  PARAM_REF(auto_resynch),

  PARAM_REF(backtrack),
  PARAM_REF(bottom_margin),
  PARAM_REF(bright_background),

  PARAM_REF(case_sensitive),
  PARAM_REF(compile_command),
  PARAM_REF(const_data),
  PARAM_REF(context_type),
  PARAM_REF(coverage_file_name),

  PARAM_REF(declare_pcb),
  PARAM_REF(default_input_type),
  PARAM_REF(default_reductions),
  PARAM_REF(default_token_type),
  PARAM_REF(diagnose_errors),
  PARAM_REF(distinguish_lexemes),

  PARAM_REF(edit_command),
  PARAM_REF(enable_mouse),
  PARAM_REF(enum_constant_name),
  PARAM_REF(eof_token),
  PARAM_REF(error_frame),
  PARAM_REF(error_token),
  PARAM_REF(error_trace),
  PARAM_REF(escape_backslashes),
  PARAM_REF(event_driven),

  PARAM_REF(far_tables),

  PARAM_REF(grammar_token),

  PARAM_REF(header_file_name),

  PARAM_REF(input_values),
  PARAM_REF(iso_latin_1),

  PARAM_REF(line_length),
  PARAM_REF(line_numbers),
  PARAM_REF(line_numbers_path),
  PARAM_REF(lines_and_columns),

  PARAM_REF(main_program),
  PARAM_REF(max_conflicts),

  PARAM_REF(near_functions),
  PARAM_REF(nest_comments),
  PARAM_REF(no_cr),

  PARAM_REF(old_style),

  PARAM_REF(page_length),
  PARAM_REF(parser_file_name),
  PARAM_REF(parser_name),
  PARAM_REF(parser_stack_alignment),
  PARAM_REF(parser_stack_size),
  PARAM_REF(pointer_input),
  PARAM_REF(pointer_type),
  PARAM_REF(print_file_name),

  PARAM_REF(quick_reference),

  PARAM_REF(reduction_choices),
  PARAM_REF(reentrant_parser),
  PARAM_REF(rule_coverage),

  PARAM_REF(tab_spacing),
  PARAM_REF(test_file_binary),
  PARAM_REF(test_file_mask),
  PARAM_REF(test_range),
  PARAM_REF(token_names),
  PARAM_REF(token_names_only),
  PARAM_REF(top_margin),
  PARAM_REF(traditional_engine),
  //PARAM_REF(trial_copy_code),

  PARAM_REF(video_mode),
};

int ConfigParam::paramCount = sizeof(ConfigParam::table)/sizeof(ConfigParam *);

#ifdef __IBMCPP__
#pragma define(Param<int>)
#pragma define(Param<AgString>)
#endif

#ifdef _MSC_VER
template class Param<int>;
template class Param<AgString>;
#endif

#ifdef __GNUC__
template class Param<int>;
template class Param<AgString>;
#endif

#ifdef __WATCOM_CPLUSPLUS__
typedef Param<int> fake1;
template Param<AgString> fake2;
#endif

#ifdef __BCPLUSPLUS__
#pragma option -Jgd
typedef Param<int> fake1;
template Param<AgString> fake2;
#endif