view anagram/guisupport/items.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.
 *
 * items.h
 */

#ifndef ITEMS_H
#define ITEMS_H

#include "dc.h"

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

  state_table_dc(void);
  state_table_dc(state_table_dc &x) : dc(x) {}

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

  virtual dc_ref aux_trace(unsigned);
  virtual dc_ref expansion_rules(unsigned);
  virtual dc_ref keywords(unsigned);
  virtual dc_ref previous_states(unsigned);
  virtual dc_ref productions(unsigned);
  virtual dc_ref reduction_states(unsigned);
  virtual dc_ref rule_context(unsigned);
  virtual dc_ref set_elements(unsigned);
  virtual dc_ref state_expansion(unsigned);
  virtual dc_ref usage(unsigned);

  virtual int expansion_rules_ok(unsigned);
  virtual int keywords_ok(unsigned);
  virtual int previous_states_ok(unsigned);
  virtual int productions_ok(unsigned);
  virtual int reduction_states_ok(unsigned);
  virtual int rule_context_ok(unsigned ln) { return ln != 0; }
  virtual int set_elements_ok(unsigned);
  virtual int usage_ok(unsigned);

  struct item {
    unsigned state;
    unsigned rule;
    unsigned index;
    int first_flag;
    item(unsigned ln);
    unsigned token(void);
  };
};

class expansion_rules_dc : public dc {
public:
  unsigned token_number;

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

  expansion_rules_dc(unsigned, const AgString);
  expansion_rules_dc(expansion_rules_dc &x)
  : dc(x),token_number(x.token_number) {}

  virtual unsigned rule(unsigned) const;
  virtual unsigned token(unsigned) const;

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

  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 k) { return k != 0; }
  virtual int set_elements_ok(unsigned);
  virtual int usage_ok(unsigned);
};

dc_ref build_item_list(int tn);
int build_item_list_ok(int tn);
dc_ref expand_specific_item(dc_ref, int, int);

#endif /* ITEMS_H */