Главная Настройка Mobile Контакты NSFW Каталог Пожертвования Купить пасскод Pics Adult Pics API Архив Реквест доски Каталог стикеров Реклама
Доски


[Ответить в тред] Ответить в тред

Check this out!

[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 50 | 1 | 13
Назад Вниз Каталог Обновить

Аноним 17/02/18 Суб 22:47:37  170890586  
06153567.png (249Кб, 886x595)
Суп борщ, мне было нехуй делоть, так что я тут пытаюсь запрограммировать математический парсер отпусти меня чудо трава, мне нужен совет бывалого, как это лучше и проще сделать. Хуйня в том, что парсить нужно например простой пример(строка) "Всего яблок = 1 яблоко + 2 яблока". Пока что я заготовил, это массив переменных со структурой вида:

struct varSt
{
char name[32];
char type;
int ival;
float fval;
char cval[8];
};

Где "яблок", "всего яблок", "яблока" это будут имена переменных, заранее рассованные по структуре, значения так же заранее рассованы в каждую цифровую переменную типа int = 1; float = 1.0, char = "1".
И вот, есть массив этих переменных, означающий пример "всего яблок = 1 яблоко + (3 яблока - 1 яблоко)" если взять только строковый тип то он будет почти эквивалент {"всего яблок","=","1","яблоко","+","(","3", "яблока","-","1","яблоко",")"}; ну типа массив строк, который нужно вычислить(парсить).

Так вот. Как это сделать?
Аноним 17/02/18 Суб 22:49:49  170890722
бмп
Аноним 17/02/18 Суб 22:50:20  170890758
бмп
Аноним 17/02/18 Суб 22:50:45  170890788
бмп
Аноним 17/02/18 Суб 22:51:44  170890846
бмп
Аноним 17/02/18 Суб 22:52:54  170890932
бмп
Аноним 17/02/18 Суб 22:53:23  170890962
>>170890586 (OP)
Может, ты, мудила, для начала нормально опишешь логику парсинга?
Аноним 17/02/18 Суб 22:53:26  170890967
бмп
Аноним 17/02/18 Суб 22:54:38  170891048
Сажи дауничю
Аноним 17/02/18 Суб 22:54:56  170891063
обосцал тугой струёй мать ОПа
Аноним 17/02/18 Суб 22:55:01  170891065
>>170890962
Как раз логики парсинга ещё нет, за неё и спрашиваю - как покакоть?
Пока есть только массив перегруженных переменных в виде структур.
Аноним 17/02/18 Суб 22:55:17  170891081
бмп
Аноним 17/02/18 Суб 22:55:55  170891120
тоесть входная строка уже разбита на переменные.
Аноним 17/02/18 Суб 22:56:21  170891142
бмп
Аноним 17/02/18 Суб 22:56:39  170891162
бмп
Аноним 17/02/18 Суб 22:56:58  170891181
бмп
Аноним 17/02/18 Суб 22:57:21  170891206
бмп
Аноним 17/02/18 Суб 22:57:41  170891228
>>170890586 (OP)
Три яблока всего.
мимо парсер
Аноним 17/02/18 Суб 22:57:56  170891250
бмп
Аноним 17/02/18 Суб 22:58:46  170891314
>>170891065
Опиши че парсить то бля.
Аноним 17/02/18 Суб 23:00:06  170891384
>>170891314
в оп посте описание. парсить массив строк в фигурных скобках { }.
Аноним 17/02/18 Суб 23:00:28  170891416
>>170890586 (OP)
Три вещи, которые тебе, долбоебу, нужно прогуглить, чтобы решить задачу:

1. Конечный автомат;
2. Лексер;
3. Парсер.

Прежде чем писать, научись думать хотя бы.
Аноним 17/02/18 Суб 23:00:46  170891432
>>170890586 (OP)
parsing expression grammar, наверное в эту сторону надо смотреть
Аноним 17/02/18 Суб 23:01:06  170891460
>>170890586 (OP)
> как это лучше и проще сделать
Ну, ты, блять, спросил в /б как термоядерный двигатель от звездолета собрать примерно по сложности. Тут разбираться месяц надо. Начинай с грамматик, копать в эту сторону:
https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form
https://en.wikipedia.org/wiki/Recursive_descent_parser
Аноним 17/02/18 Суб 23:01:47  170891500
>>170891416
Нахуй сходи, долбоёб. Грош цена твоим советам.
Аноним 17/02/18 Суб 23:02:17  170891535
>>170891460
Чет сильно сложно, для подсчета яблок.
Аноним 17/02/18 Суб 23:02:57  170891578
>>170891460
Да я пока думаю над стековой моделью и схлопывающей, в принципе и то и то смогу с нуля без чтения литературы, просто трудозатраты будут нихуёвые, я заебусь.
Аноним 17/02/18 Суб 23:03:49  170891636
>>170891535
Блять ну а ты как хотел. Парсеры это нихуя не просто. Если примерно понять идею, то простейший рекурсивный написать можно на изи. Или готовую либу поюзать. Но грамматика твоей параши в BNF нужна в любом случае.
Аноним 17/02/18 Суб 23:05:16  170891734
ЧТО ЗА ИГРА НА ПИКЕ???? В ДЕТСТВЕ ИГРАЛ НАСТАЛЬГИЯ ПЗДЦ, ПЛС ХЕЛП
Аноним 17/02/18 Суб 23:06:12  170891798
>>170890586 (OP)
Книгу дракона уже начал читать? «Компиляторы: принципы, технологии и инструменты»
Аноним 17/02/18 Суб 23:07:10  170891861
>>170891798
>«Компиляторы: принципы, технологии и инструменты»
Скоро начну
Аноним 17/02/18 Суб 23:08:37  170891969
>>170891384
Ааааа. Ну тогда иди нахуй. Потому что не умеют современные технологии нормально парсить текст произввольный. Это нужно какие-нибудь нейроночки присоединять и то это будет работать хуево.
Аноним 17/02/18 Суб 23:10:34  170892089
>>170891969
Тыб пиздел поменьше, я тут делом занят.
Аноним 17/02/18 Суб 23:12:51  170892235
>>170891384
1. Гугли что такое лемматизация
2. Задумка крайне ебанутая, все равно произвольный текст ты не научишь понимать. Максимум какие-то шаблоны.
Аноним 17/02/18 Суб 23:14:51  170892341
>>170892235
Задумка научить комплюктер решать такие задачки.


ЗАДАЧА:Cумма яблок

ДАНО:
1 яблоко
3 яблока
2 груши

НАЙТИ:
Сумму всех яблок

РЕШЕНИЕ:
1) Всего яблок = 1 яблоко + 3 яблока

ОТВЕТ:
Всего яблок = 4
Аноним 17/02/18 Суб 23:16:09  170892423
>>170892341
Как ты дожил до 10 лет???
Ты же должен был уже давно ложкой подавиться, когда суп ел или еще как умереть. Ты же клинически тупой.
Аноним 17/02/18 Суб 23:17:25  170892487
>>170892235
И чтобы завершить проект осталось совсем немного, научить машину решать. Получается я перевожу задачу из текстовой формы в формальную, а затем парсером вычисляю и выдаю ответ. Но хуйня в том что парсер - это сложно и долго, прощу было бы даже переводить в Си или ассемблер.
Аноним 17/02/18 Суб 23:18:31  170892549
>>170892423
>12 летний закукарекал.
Аноним 17/02/18 Суб 23:18:55  170892571
>>170892341
Смотря насколько серьезно тебе нужно это реализовать, можно втупую обойтись регулярками и всякими стандартными библиотеками для поиска в строках. Тогда тупо напиши решение для частного случая а потом сделай для общего, если уж совсем не понимаешь.
Аноним 17/02/18 Суб 23:19:33  170892614
>>170890586 (OP)
ОП - даун. Решать такие произвольные задачи простым парсингом невозможно.
мимо ИИ-энтузиаст
Аноним 17/02/18 Суб 23:20:25  170892669
>>170892571
Для частного всё просто, 2 + 2 сложить хуйня делов, затык на приоритете скобок. Пути 2 - что то типа рекурсии или отказ от скобок вовсе.
Аноним 17/02/18 Суб 23:20:39  170892681
>>170892423
орнул
бля ваще ору с треда
Аноним 17/02/18 Суб 23:21:55  170892773
>>170892669
Но представление о том как именно это сделать у меня оч смутное.
Аноним 17/02/18 Суб 23:22:37  170892824
>>170892773
Так ты вообще написал что-нибудь или в оппосте это все что есть?
Аноним 17/02/18 Суб 23:24:15  170892921
Держи набросок
https://ideone.com/BUgWWI
Аноним 17/02/18 Суб 23:25:27  170893008
>>170892921
НЕ ОТКРЫВАЙТЕ ПОСОНЫ
ТАМ ВИРУС
КОМП ВЗОРВАЛСЯ
ПИШУ С ТАМАГОЧИ
Аноним 17/02/18 Суб 23:28:09  170893155
Парсера там нет.Пока я описал концепцию, что мол разбиваю строку на подстроки, подстроки анализирую и парсю, пока вижу 2 варианта парсинга, либо стековый pop add pop либо схлопывающй [num] [op] [num], где в любом случае 2 числа и оператор превращаются в 1 число.
Аноним 17/02/18 Суб 23:30:09  170893257
>>170892669
Ты забыл FIFO структуры на дереве, и идти с двух сторон. Так можно не только обычные скобки, но и любые лютые математические конструкции парсить . А если ещё сделать базовый класс, и от него сделать наследников для разных конструкций (простые скобки, интегралы и прочая хрень), то получишь охуенный парсер мат. эквэйшэнов. И относительно компактный по размеру кода. И удобно написать собственно вычислитель такой структуры, т.к. все классы наследованы, перегрузить cast-оператор просто.
Аноним 17/02/18 Суб 23:31:16  170893320
>>170893257
ооп и си несовместимы
Аноним 17/02/18 Суб 23:37:49  170893682
Думаю я нашёл способ.
Сделаю 3 массива
В первый насую операторов
Во второй первые операнды
В третий вторые
Сувать буду по прироритету.
Так и операции выполнять будет проще.
дааа...
Аноним 17/02/18 Суб 23:41:12  170893906
>>170893320
а ты сделай ООП с помощью указателей в С,
тем более С-Style type casting проще, чем в С++

[Назад][Обновить тред][Вверх][Каталог] [Реквест разбана] [Подписаться на тред] [ ] 50 | 1 | 13
Назад Вверх Каталог Обновить

Топ тредов
Избранное