Передача значения объекта из Java в с++

146
17 сентября 2019, 20:40

Читаю книгу про компиляторы(книга дракона), разбираюсь как лексические и синтаксические анализаторы программируются. В конце книги есть пример написанный на языке java. Я программирую на с++ и поэтому пример переделал под этот язык. Но столкнулся с одной проблемой. Имеется такой класс:

public class Word extends Token {
public String lexeme = "";
public Word(String s, int tag)
{
    super(tag);
    lexeme = s;
}
public String ToString()
{
    return lexeme;
}
public static final Word 
    and = new Word("&&", Tag.AND),
    or = new Word("||", Tag.OR),
    eq = new Word("==", Tag.EQ),
    ne = new Word("!=", Tag.NE),
    le = new Word("<=", Tag.LE),
    ge = new Word(">=", Tag.GE),
    minus = new Word("minus", Tag.MINUS),
    True = new Word("true", Tag.TRUE),
    False = new Word("false", Tag.FALSE),
    temp = new Word("t", Tag.TEMP);
}

Объект этого класса записывается в хеш таблицу:

Hashtable words = new Hashtable();
String s = b.toString();
.....
Word w = (Word)words.get(s);
words.put(w.lexeme, w);

В предпоследней строке приводится к типу Word результат, как можно такое в с++ реализовать. И самый главный вопрос в последней строке в качестве ключа используется объект. Как сделать аналогично на с++.

Answer 1

В предпоследней строке приводится к типу Word результат, как можно такое в с++ реализовать.

Вам не нужно делать никаких преобразований - создайте map, который будет хранить объекты типа Word. В Java тип Object является суперклассом для всех классов, то есть любой тип - его наследник. Поэтому можно делать подобные преобразования - (Word)words.get(s).

И самый главный вопрос в последней строке в качестве ключа используется объект.

В качестве ключа используется строка. Посмотрите документацию.

P.S. В классе Lexer Вам придется хранить не только инстансы класса Word, но и его наследников. Подумайте, какой тип использовать в map'е, чтобы его впоследствии можно было кастовать к наследникам (в std::map<Key, Word> объект типа Type Вы уже не вставите).

READ ALSO
Синхронизация данных в базах данных

Синхронизация данных в базах данных

Хочу импленментировать синхронизацию баз данных между удаленными машинамиВсе происходит так: embedded система собирает данные и при возможности...

141
О нотация, разбор определения

О нотация, разбор определения

Читаю Седживка, до этого момента было все понятно:

110
ConcurrentModificationException

ConcurrentModificationException

Здравствуйте, постоянно получаю ошибку, когда пытаюсь добавить объекты на картуГугл мне не дал ясности, стек оверфлоу я тоже, не понял, что...

174
Как сделать inline-кнопку Telegram Bot API с новой строки в Java?

Как сделать inline-кнопку Telegram Bot API с новой строки в Java?

Как сделать inline-кнопку Telegram API с новой строки в Java?

150