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