Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
6 / 5 / 1
Регистрация: 04.05.2019
Сообщений: 99

Интепритатор своего "ЯП" на C++

04.08.2020, 19:09. Показов 1401. Ответов 5

Студворк — интернет-сервис помощи студентам
Здравствуйте,сегодня я поставил себе цель - сделать интепритатор своего "ЯП" на C++.
До этого я делал это на python и было не так уж и сложно,брал основу у одного человека,а дальше развивал всё сам.
И у меня возникло уйма проблем:
1)Как создать словарь на C++
2)Как узнать откуда запущена программа(из какой папки)
3)Как открыть файл в UTF-8 на C++
4)Как НОРМАЛЬНО распределить слова из файла в список
И уйма другово,но давайте по порядку.
Пункты 2 и 4 я кое-как сделал(не сам,а копировал потому что я ещё новичёк и уйма чего не знаю)
Но...Проблема-как определить размер списка?
Вот что я заготовил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <windows.h>
#include <fstream>
#include <list>
#include <iterator>
#include <algorithm>
#include <string>
#include <cstdlib>
using namespace std;
 
typedef std::istream_iterator<std::string> ii;
typedef std::ostream_iterator<std::string> oi;
 
class List  {
public:
    int value;
    List* next;
};
 
int getLength(List *list)  {
    int count = 0;
    List *temp = list;
    while(temp)  {
    count++;
    temp = temp->next;
}
return count;
}
 
int main(int argc, char *argv[])
{
    SetConsoleCP(65001);
    SetConsoleOutputCP(65001);
    /*ifstream f;
    f.open(argv[1]);
    if (!f.is_open()) 
        cout << "Ошибка:файл не найден" << endl;
    f.close*/
    char fn[999];
    strcpy(fn,argv[1]);
 
    //cout << fn << endl;
    //cout << argv[1] << endl;
 
    std::ifstream in(fn, std::ios::in);
    if (!in)
    {
        std::cerr << "error: couldn't open file.\n";
        exit(1);
    }
    std::list<std::string> words_list((ii(in)), ii());
    //std::copy(words_list.begin(), words_list.end(), oi(std::cout, "\n"));
 
    cout << getLength(words_list);
    //for (size_t i = 0; i < )
 
    in.close();
 
}
Но там такое количество ошибок и я половину кода сам не понимаю...На питоне всё удобнее было.
Вот кусок кода как примерно нужно сделать начало:
Python
1
2
3
4
5
6
7
8
with open(p, 'r', encoding="UTF-8") as f: #Отрываем файл из аргумента
        for ex in f.read().split(): #Распределяем все слова
            var.append(ex) #Записываем все слова в список var
    a = -1 #Устанавливаем значение на каком сейчас var
    for i in var: #Перебираем все значения
        a = a + 1 #Добавляем что это значение просмотренно
        if i == '=': #Если находим совпадение с "="
            vars_[var[a-1]] = var[a+1] #в список vars_ добавляем знaчение до и после "="
Я не знаю как сделать перечисление значений на C++ вроде этого:
Python
1
for i in var
Циклы,строки,начало ООП и прочее проходил,но ещё сложно.Поэтому мне нужна ваша помощь.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.08.2020, 19:09
Ответы с готовыми решениями:

Интепритатор своего "ЯП" на C++ продолжение приключений
Здравствуйте,в прошлой моей теме я пытался разобраться из чего собрать свой интепритатор,ну и наконец-то это свершилось-я собрал его из...

Передача своего своего значения в HIWORD и LWORD параметра WPARAM, реально?
Как вы знаете когда идёт передача сообщения с ним уходят параметры wParam и lParam Так вот мне нужно передать два интовых значения - одно...

Использование своего объекта своего класса внутри другого
Здравствуйте. Есть класс для работы с матрицами. Все работает. Теперь нужно создать другой класс, где полями будут являться переменные -...

5
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
04.08.2020, 19:17
Цитата Сообщение от Kirilus3000 Посмотреть сообщение
Здравствуйте,сегодня я поставил себе цель - сделать интепритатор своего "ЯП" на C++.
Лучше для начала поставь себе цель попроще. Например прочитать какую-нибудь книжку по С++
0
57 / 43 / 12
Регистрация: 27.10.2018
Сообщений: 454
04.08.2020, 20:06
Лучший ответ Сообщение было отмечено Kirilus3000 как решение

Решение

Цитата Сообщение от Kirilus3000 Посмотреть сообщение
1)Как создать словарь на C++
https://en.cppreference.com/w/... rdered_map
Цитата Сообщение от Kirilus3000 Посмотреть сообщение
2)Как узнать откуда запущена программа(из какой папки)
https://en.cppreference.com/w/cpp/filesystem/path
Цитата Сообщение от Kirilus3000 Посмотреть сообщение
3)Как открыть файл в UTF-8 на C++
http://www.cplusplus.com/refer... ream/open/
Цитата Сообщение от Kirilus3000 Посмотреть сообщение
4)Как НОРМАЛЬНО распределить слова из файла в список
http://www.cplusplus.com/refer... ingstream/
мини - пример, может чем-то поможет.
C++
1
2
3
std::string token , token2 = "",myText= "тут текст(например построчно прочитанный)";
std::istringstream iss(myText);
while (std::getline(iss, token, ' ')) token2 += ( token + "тут что-то делаем с токенами после их получения" );
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Например прочитать какую-нибудь книжку по С++
Ну, лишним не будет точно, но прямого отношения непосредственно к задаче по-моему не имеет.
0
 Аватар для Nishen
1357 / 856 / 365
Регистрация: 26.02.2015
Сообщений: 3,814
04.08.2020, 20:30
Цитата Сообщение от plzvtl Посмотреть сообщение
Ну, лишним не будет точно, но прямого отношения непосредственно к задаче по-моему не имеет.
Да, да, уже видывали особ, которые язык садились через задачи учить, не желая книг в руки брать. Наличие собственной задачи для изучения языка - это очень круто, да, собственно, так и надо. Но неплохо было бы азы посмотреть перед большой работой. Ты когда писать/читать учишься, тоже букварь сначала читаешь, а не Войну и мир.
1
21 / 15 / 6
Регистрация: 02.07.2018
Сообщений: 37
05.08.2020, 07:49
Цитата Сообщение от Kirilus3000 Посмотреть сообщение
Я не знаю как сделать перечисление значений на C++ вроде этого
C++
1
for (int i : var)
for each называется.
В данном случае для массива типа int, но тип можно поменять на любой другой (например, на auto).
1
 Аватар для mrden777
14 / 20 / 14
Регистрация: 20.03.2018
Сообщений: 485
05.08.2020, 09:01
Словарь уже есть. Делай лучше базу жителей РФ
Ее в сети чекисты запрещают выкладывать, а спрос на нее есть
Можешь клепать болванки и в метро потом продавать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.08.2020, 09:01
Помогаю со студенческими работами здесь

Запрет открытия своего ip адреса своего сервера абонентом
Добрый день, есть 2 компьютера в подсети, но нужно чтобы на одном открывался ftp сервер а на другом нет, получилось так что на обоих...

Создание своего Event для своего класса
как создать событие для своего класса? У C# нужно создать свое делегат, потом создать экземпляр этого делегата, и из вне привязать...

Заменить все элементы, большие своего соседа справа на произведение своего номера на номер минимального элемента массива
Помогите с задачей Дан одномерный массив из N элементов. Заменить все элементы, большие своего соседа справа на произведение своего...

Ping своего адреса проходит, но при просмотре таблицы arp-a не вижу своего адреса
Всем привет. На пк две сетевые карты. На каждой по несколько ip адресов. Ping своего адреса проходит, но при просмотре таблицы arp -a я...

По введенной текущей дате, текущему дню недели, дате своего рождения, определить день недели своего рождения
по введенной текущей дате(число,месяц и год),текущем дне недели,дате(число ,месяц и год) своего рождения определить день недели своего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Ниже машинный перевод статьи The Thinkpad X220 Tablet is the best budget school laptop period . Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы,. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru