view anagram/guisupport/conflictdc.h @ 15:f5acaf0c8a29

Don't cast through "volatile int". Causes a gcc warning nowadays. XXX: should put something else back here to frighten the optimizer
author David A. Holland
date Tue, 31 May 2022 01:00:55 -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.
 *
 * conflictdc.h - conflicts
 */

#ifndef CONFLICTDC_H
#define CONFLICTDC_H

#include "agarray.h"
#include "data.h"
#include "dc.h"
#include "tsd.h"


class conflict_table_dc : public dc {
protected:
  AgArray<int> permutation;
  tsd *conflict_table;

public:

  conflict_table_dc(void) : permutation() {}
  conflict_table_dc(const char *name)
  : dc(name), permutation() {}

  conflict_table_dc(conflict_table_dc &x)
  : dc(x), permutation(x.permutation) {}


  void init(void);
  virtual void synchCursor(unsigned) const;

  unsigned sort_con(void);
  dc_ref new_derive_token (int sn, int tn, int fn);

  static MenuOption *auxTable[];
  virtual MenuOption **getAuxWinMenu(void) { return auxTable; }

  virtual dc_ref select_conflict(unsigned);
  virtual dc_ref expansion_chain(unsigned);
  virtual dc_ref problem_states(unsigned);
  virtual dc_ref reduction_states(unsigned);
  virtual dc_ref reduction_trace(unsigned);
  virtual dc_ref rule_context(unsigned);
  virtual dc_ref derive_rule(unsigned);
  virtual dc_ref state_definition(unsigned);
  virtual dc_ref state_expansion(unsigned);
  virtual dc_ref derive_token(unsigned);
  virtual dc_ref usage(unsigned);

  virtual int expansion_chain_ok(unsigned);
  virtual int reduction_states_ok(unsigned k);
  virtual int derive_rule_ok(unsigned);
  virtual int state_definition_ok(unsigned k)  { return derive_rule_ok(k); }
  virtual int state_expansion_ok(unsigned k)   { return derive_rule_ok(k); }
  virtual int usage_ok(unsigned k)             { return derive_rule_ok(k); }

  virtual int reduction_trace_ok(unsigned k)   { return derive_rule_ok(k); }

  int screen_rule(unsigned ln, int *snp, int *tnp, int *fnp, int *fxp);
  int locate_conflict(unsigned ln, int *snp, int *tnp, int *fnp, int *fxp);
};

class res_con_dc : public conflict_table_dc {
public:
  res_con_dc(void)
   : conflict_table_dc("Resolved Conflicts") {
    conflict_table = res_con;
    init();
  }
  virtual void getLine(unsigned) const;
/*
  virtual dc_ref onCloneKey(void) {
    return dc_ref(new res_con_dc(*this));
  }
*/
};

class unres_con_dc : public conflict_table_dc {
public:
  unres_con_dc(void)
   : conflict_table_dc("Conflicts")
  {
    conflict_table = unres_con;
    init();
  }
  virtual void getLine(unsigned) const;
/*
  virtual dc_ref onCloneKey(void) {
    return dc_ref(new unres_con_dc(*this));
  }
*/
};

class derivation_dc : public dc {
public:
  static MenuOption *auxTable[];
  MenuOption **getAuxWinMenu(void) {return auxTable;}

  tsd *derivation;
  int bracket;

  derivation_dc(tsd* td, const AgString head, const AgString foot, int brkt);
  derivation_dc(derivation_dc &x)
  : dc(x), derivation(copy_tuple_set(x.derivation)), bracket(x.bracket)
  {}

  ~derivation_dc(void);
  virtual void getLine(unsigned) const;
  virtual void synchCursor(unsigned) const ;
/*
  virtual dc_ref onCloneKey(void) {
    return dc_ref(new derivation_dc(*this));
  }
*/

  virtual unsigned token(unsigned);
  virtual dc_ref expansion_rules(unsigned);
  virtual dc_ref productions(unsigned);
  virtual dc_ref rule_context(unsigned);
  virtual dc_ref set_elements(unsigned);
  virtual dc_ref usage(unsigned);

  virtual int expansion_rules_ok(unsigned);
  virtual int productions_ok(unsigned);
  //virtual int rule_context_ok(unsigned);
  virtual int set_elements_ok(unsigned);
  virtual int usage_ok(unsigned);
};


dc_ref build_rule_derivation(int, int);


#endif /* CONFLICTDC_H */