view anagram/agcore/tree.h @ 6:607e3be6bad8

Adjust to the moving target called the C++ standard. Apparently nowadays it's not allowed to define an explicit copy constructor but not an assignment operator. Consequently, defining the explicit copy constructor in terms of the implicit/automatic assignment operator for general convenience no longer works. Add assignment operators. Caution: not tested with the IBM compiler, but there's no particular reason it shouldn't work.
author David A. Holland
date Mon, 30 May 2022 23:46:22 -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.
 *
 * tree.h
 */

#ifndef TREE_H
#define TREE_H

class CharSetExpression; // from csexp.h
#include "register.h"


struct parse_tree_map;

class ParseTree : public KeyedObjectRegister<parse_tree_map> {
public:
  ParseTree() {}
  ParseTree(unsigned x);
  ParseTree(const ParseTree &t);
  ParseTree(CharSetExpression *x);
  void operator = (const ParseTree &t);
  static void reset();

  class Map;
  friend class Map;

  class Map {
  public:
    parse_tree_map &operator [] (unsigned x);
  };
};

#include "symbol.h"
#include "token.h"

struct parse_tree_map {
  Token token_number;
  Symbol token_name;
  CharSetExpression *expression;
  int char_set;

  parse_tree_map();
  parse_tree_map(CharSetExpression *x);
  ~parse_tree_map() {}
  int operator < (const parse_tree_map &t) const;
};

extern ParseTree::Map map_parse_tree;


#endif /* TREE_H */