Читаю книгу про компиляторы(книга дракона), разбираюсь как лексические и синтаксические анализаторы программируются. В конце книги есть пример написанный на языке 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 результат, как можно такое в с++ реализовать. И самый главный вопрос в последней строке в качестве ключа используется объект. Как сделать аналогично на с++.
В предпоследней строке приводится к типу Word результат, как можно такое в с++ реализовать.
Вам не нужно делать никаких преобразований - создайте map, который будет хранить объекты типа Word
. В Java тип Object
является суперклассом для всех классов, то есть любой тип - его наследник. Поэтому можно делать подобные преобразования - (Word)words.get(s)
.
И самый главный вопрос в последней строке в качестве ключа используется объект.
В качестве ключа используется строка. Посмотрите документацию.
P.S. В классе Lexer
Вам придется хранить не только инстансы класса Word, но и его наследников. Подумайте, какой тип использовать в map'е, чтобы его впоследствии можно было кастовать к наследникам (в std::map<Key, Word>
объект типа Type
Вы уже не вставите).
Хочу импленментировать синхронизацию баз данных между удаленными машинамиВсе происходит так: embedded система собирает данные и при возможности...
Здравствуйте, постоянно получаю ошибку, когда пытаюсь добавить объекты на картуГугл мне не дал ясности, стек оверфлоу я тоже, не понял, что...
Как сделать inline-кнопку Telegram API с новой строки в Java?