программы там есть Разный символ в начале перед самим текстом? Файл читаю так:
std::ifstream in{ program_path };
std::string source{ (std::istreambuf_iterator<char>(in)),
std::istreambuf_iterator<char>() };
Почему не std::getline?
Потому что мне надо считать всю программу целиком
почему не vector<char>::reserve && filesystem::filesize && read
Не понял претензии.
https://coliru.stacked-crooked.com/a/b707e6739ff237c7 а у меня не воспроизводится ¯\_(ツ)_/¯
Ладно, я локализовал проблему. Судя по всему, лишние символы возникают из-за стрингстрима. Осталось понять почему и что делать: class Lexer { char peek_; std::unordered_map<std::string, Word> words_; static inline unsigned line_ = 1; unsigned ident_ = 0; std::stringstream source_;Lexer::Lexer(std::string s) : source_{ std::stringstream{ std::move(s) } } {
Скорее всего там в файле этот символ и есть...
Да, кстати, возьми какой-нить HEX-редактор и посмотри им в начало файла. hexdump -C тоже сойдёт.
Я же сказал, что уже проверил, специально вывел чистую строку посимвольно До стрингстрима и тогда там ничего не было. К тому же, символ каждый раз Разный. Как в файле при каждом чтении может оказываться разный символ из небольшого списка вариантов?
Ну давай код тогда, весь
https://github.com/harashimahashi/llvmcomp
И это все твоё?
Так в чём вопрос?
Я думал, там целое репо кода... Хотел восхититься твоей плодовитостью, но когда поглядел внутрь, не стал...
А это вот что? reserve(Word{ "if", tag_cast(Tag::IF) });
Ну, резервируется новое ключевое слово
Это вообще недоделанный кусок "в работе". Вопрос во вводе, а не в чём-то ещё
А зачем Tag с 256 ?
words_.reserve(270); — и всё!
Чтобы после ascii
Ну мог бы вместо непечатных символов до 30 (или 20) свои токены вставить...
Да какая разница
Ладно, ты потерянный символ нашёл?
Нет, конечно, потому что его нет
ЭТО ВОТ у меня работает.
Это минимальный пример? Минимальный - это кусок кода, который можно скопировать и запустить
https://pastebin.com/CUWjBMQf
https://pastebin.com/Qekpqx5q Я такое написал, но оно работает
Обсуждают сегодня