272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
|
|||||||||||
1 | |||||||||||
С++ плагины для Ноды07.10.2019, 09:44. Показов 1363. Ответов 20
Метки нет Все метки)
(
Добрый день, подскажите кто пользуется???
Решил для начала "прогуглить" тему. Хочу понять ВОЗМОЖНОСТИ такого подхода. 1) успешно скомпилил пример под Win. Пришлось переустановить .net на более свежую (кажется больше гигабайта). И кажется что-то из Microsoft Visual C++. (долго намучался) Можно использовать другие компиляторы? mingw32? gcc? 2) можно ли таскать уже скомпилированный код вместе с программой без исходников (между win)? Какие файлы обязательны? 3) можно ли использовать обычные dll написанные на других языках? mingw32, делфи? Не по теме: заинтересовался из-за:
2) это хоть какая-то защита от кражи исходников - хоть часть из них можно будет прятать в скомпилированный модуль на С++
0
|
|
07.10.2019, 09:44 | |
Ответы с готовыми решениями:
20
Определение ноды выбранной после падения активной ноды кластера Плагины для 3dsmax на VB Плагины для Wordpress плагины для WMP! |
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|
07.10.2019, 10:10 | 2 |
Возможности у него и программисту мозги засрать мозги и память компу. Весь фарш как понимаю хотите писать на плюсах. Если весь фарш на плюсах то зачем тормозная обертка на JS который к тому же и десятой доли того что плюсы в плане построения высокоуровневых абстракций могут не умеет? Не кажется ли что проще и логичней или модулем существующего HTTP сервера все оформить или вообще http и кеширование свое слепить, прикрутить коннектор БД и ни от кого вообще не зависеть? А тем более что если ориентироваться на связь с браузером по web-socket и интерактивную обработку с кешированием стейта клиента в ОЗУ, то как бы это по любому демон а GC и тем более скриптам в демонологии не место.
0
|
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
|
|
07.10.2019, 10:50 [ТС] | 3 |
Ни в коем случае! Скорее небольшие спец-функции и спец-объекты "с ускорением".
Год назад придумывал как хранить для моего веб-сервера хеш-данные по юзерам, созданных сложными запросами из Postgre-базы (кука + ...куча характеристик, доступы, описания). Сейчас остановился на Редисе(намучался со структурой хранения). И это ради ОДНОЙ таблицы в памяти. Ради одной таблицы "с запоминанием если изменилось каждые 5 минут на диск и восстановлением при старте" я с редисом вынужден: держать сокет-канал, оформлять свои запросы в JSON (через редис-модуль ноды), парсить JSON результат от высылаемый редисом, занимать сокет-порт, задействовать ОС в обработке "разрешено ли это системным фаерволом". + отдельная программа в памяти. Даже моих (убогих) знаний С++ хватило бы что бы за неделю написать подобную систему на С++ в 5-6 экранов кода (я с редисом дольше игрался). И ускорил бы работу в 200-300 раз? (на тысяче запросов в секунду это станет заметным) (а если прирост будет явным, то можно было бы и заказать такой код у тех кто С++ "живет") ...это конечно лишь пример... Когда начал обдумывать подобные "ускорялки" пошел дальше - нагуглил преобразователь "TypeScript в С" и "JavaScript в TypeScript". =) Представь, пишу функцию в несколько экранов кода - например многопроходный парсер сложной строки, а потом... "загоняю" в С++ и подключаю ее "аддоном". сейчас просто возможности хочу понять! ну очень "вкусным" показалось ускорение! https://morioh.com/p/ffefb96b3... 576RMhXL10 И жутко взбесило сколько "танцев с бубном" пришлось проинсталировать в Win для компиляции такого проекта. После Ноды привык что "всю папку можно свободно переносить", а если прижмет, то вместе с node.exe. и дописывать в Notepad.exe если прижмет исправить что-нибудь на месте... Помню что GCC был полностью портабл и не больше 300 Мб в самой большой сборке. Если подумать, то есть КУЧА задач, где нужна "чистая математика". Например обработка матриц фотографий - просто "добавить контраст", 3Д преобразования, шифрование/дешифрование открыто/закрытыми ключами... Помню надо было "задачу коммивояжера решать", причем "жадным перебором" - моя однопоточная JS машина зависала. Почему бы не подготовить матрицу средствами JS, а потом "отправить" в аддон? Есть еще матрицы в нейронных сетях... (пока не пользуюсь) тоже прирост был бы, если более-менее "универсальный" аддон сделать...
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|
07.10.2019, 12:14 | 4 |
Ну а почему бы с таким же успехом не парсить JSON средствами плюсов и т.д сразу с проверкой соответсвеия структуре которая ожидается? А еще лучше не перейти с json на hex или base64?
Ну в 200-300 это смотря что там или смотря как там. А к примеру в текущем проекте только замена вырезания строк при парсинге на вьюшки (ну в общем указатель на буфер с исходным JSON и длина фрагмента) позволили скорость парсинга в исходе плюсового сразу в 20 раз увеличить это при том что там по ходу пьесы кроме самого парсинга еще куча лукапов связывающих распарсенные структуры. А она везде. К примеру парсинг json - это чистая семиотика, такой раздел математики. Это не очень хорошая идея. Пишется просто универсальный парсер потом ему декларативно задается формат и работает все обычно в один проход. Visual Studio и никаких проблем вообще. Если нужно под линуху то по сетке коннектится и местным GCC или __clang компиляет прямо на линух-хосте. Единственное что надо - ssh на линуху поставить.
0
|
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
|
|
07.10.2019, 13:20 [ТС] | 5 |
Потому что переводить в JSON и назад - это ЛИШНЯЯ операция.
Между "мне нужны данные из таблицы" и "я получил объект с данными и могу их использовать" есть СЛИШКОМ много преобразований - данные в JSON, JSON через сокет Редис-Базе, парсинг JSON на базе, потом собственно поиск по многократно усложненной базе (редис поддерживает не только одну мою таблицу, а значит там еще куча лишних фильтров), потом обратный процесс - в JSON, через сокет и из JSON... с модулем на С++ это было бы быстрее! А учитывая что ради одной записи иногда приходится делать несколько поисковых запросов в редис, то и куда больше команд... Подозреваю что он УЖЕ на С++, т.к. является СИСТЕМНОЙ командой JS. А значит встроено в "ядро" (которое на С++). Не все можно сделать "в один проход". Вы сложные SQL функции на несколько экранов еще не писали! )) Простой пример - "если в строке больше 10 букв W то посчитай сколько будет букв R а иначе сколько букв Q" = два цикла писать... или заранее все считать... А если это простой "цикл на сравнение по букве" - значит С++ отработает его на порядок быстрее. Не у каждого клиента установлен VisualStudio. А для установки инструментов (помню) требовало .Net обновить... Короче кучу мегабайт на С:\ забрало, причем даже примерно не знаю сколько, требовало админ-доступ и возможно получил кучу конфликтов с программами требующими старую VisualStudio... А значит не могу писать "простые парсеры" с использованием С++ для клиентов, которые можно установить на их ЛЮБЫХ компах. МультиОС-ность уже не так явно выглядит...
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|
07.10.2019, 15:34 | 6 |
Лишняя. Но когда данные приходят от сервера только в JSON никуда не денешься придется парсить.
Ну на плюсах тоже можно по разному. К примеру только замена с нарезки на строки на вьюхи дала прирост около 20 раз с 7 с гаком милисекунд до 350 микросекунд на 55 кб JSON. Это при том что он по ходу кучу лукапов ну по имени в указатели приобразовывает. Если чисто на строки разобрать это на нем вообще 50-70 микросекунд стало. Тяжко конечно по сравнению с бинаркой но уже не смертельно. Сомнительно что у них так.
Добавлено через 46 секунд А клиенту то он зачем? Это только разрабу надо. В нем код писать и отлаживать. Добавлено через 3 минуты Ну от одним проходом все считать потом выбирать. Считает комп быстро то что в кеше. А вот в кеш тянет долго. Поэтому чем больше манипуляций с символами проведем за один проход тем быстрее. И чем длиннее строка тем это актуальней. Добавлено через 1 минуту Ну через коннекторы многие все равно через текст придется. Тот же к примеру MySQL выхлоп только текстом отдает. Добавлено через 9 минут Мультиплатформенность в плюсах только через компиляцию для каждой оси/таргета по отдельности.
0
|
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
|
|
07.10.2019, 16:15 [ТС] | 7 |
я же не предлагаю отказаться от него совсем... просто есть задачи, где это - лишнее!
Еще раз, задача: (временно закрытая) Есть тяжелая база юзеров. (куча характеристик и сложные уровни доступа). Запрос по одному юзеру(куке) в базу около 0.1 секунды. На сервере (планировалось) до 10К запросов от пользователей в секунду с обращением к разным частям этих характеристик. Характеристики меняются раз в несколько минут/часов, а запрос 0.5-2 раза в секунду. => надо либо ускорять запрос (можно раз в 5-10 ускорить базу), либо кешировать "ответы". Кешировать можно в памяти программы, но при перезапуске программы/сервера все сбивается. Задействовал Редис. Он в 100 раз быстрее Постгреса, но хранит лишь записи вида "ключ-ответ". Ответ вынужден хранить в формате JSON. Общение с редисом в формате JSON и через сокеты. = куча "промежуточных" преобразований. Для 1К юзеров пока хватает, но что будет на 100К предсказать боюсь. Если исключить Всю эту мишуру с преобразованиями, то раз в 10 можно было бы ускорить... Если не в 200... С MySQL - это оправдано. Там преобразование в строку/объект занимает тысячную от времени на выполнение запроса по бзае. С Редисом совсем другие пропорции... Вы меняете подход/задачу вместо того чтобы признать что БЫВАЮТ задачи где приходится парсить текст больше чем в один проход. Не "линейными" методами... Не все задачки такие "школьные"(синтетические) как с этими 3мя буквами... Хотите усложню? Книга "Война и Мир" - если слово "Наташа" упоминается больше 1000 раз, вернуть количество слов "и тогда", иначе "это означало"... =) Парсер пишется "под клиента". Если бы для моего сайта - это одно, но если для использования на компе заказчика... Пришел на чужой комп, обнаружил ошибку в коде и... уносишь код домой для перекомпиляции? На линуксе (не пробовал, но подозреваю) что ничего лишнего для компиляции устанавливать не надо. Тем более "под рутом". Хотелось бы "ничего лишнего" не устанавливать клиенту. Тем более у меня не всегда есть Рут/админ-права... ...решил пока обдумать другой подход... на срр-аддонах пишется "система плагинов". Которая методами С++ умеет подключать/отключать dll или *.o библиотеки, написанные по определенным правилам. "Подключатель" плагинов может быть написан и скомпилирован "дома". Он неизменнен под любого заказчика. ДЛЛ-плагины под нее уже будут компилироваться при помощи GCC. Технически и под линукс они легко будут пересобираться. А благодаря С++ ядру можно будет их подключать "в горячем режиме" (отключать/заменять без перезагрузки ноды). Под win их можно будет компилировать при помощи портабл версии GCС, которую вообще можно оформить как node-плагин и выложить в репозиторий. Увы, знаний С++ пока для подобного не хватает... буду дальше думать! Но пока такая идея кажется самой адекватной! И скорость от наличия "переходника" не должна сильно пострадать... Кстати, по идее, тогда можно будет писать dll на ЛЮБОМ языке. Например на go, Делфи или freepascal/Lazarus... Кстати, недавно нашел модуль ffi, который позволяет подключать системные dll из Win для прямого доступа к WinAPI. Но не уверен что он позволит поменять библиотеку "на лету". И не уверен в его мультиОСности.
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|
08.10.2019, 03:18 | 8 |
А клиенту это не надо. А тем более что ставится оно только под виндой. И ходить никуда не надо вообще. Приконнектился подправил перекомпилял и вперед.
Добавлено через 6 минут Это тоже самое. Да кстати второй и последующий проходы в многопроходных парсерах работают не с исходным текстом. А с абсолютно другим алфавитом, в который преобразует исходный текст первый проход, или вообще деревом а не текстом. Для примеру вот в вашем примере если делать в несколько проходов то первым проходом строится словарь входящих в текст слов а слова заменяются на номер в словаре. А второй проход уже аналогичен первому в предыдущей задаче, поэтому его в принципе можно совместить в данном случае с первым, при этом все кроме искомых слов вообще пропускать еще в первом проходе. Добавлено через 46 минут Ну дык вот речь о том чтобы убрать все лишнее Добавлено через 3 минуты На дельфе там совсем другие расклады. Ее тулсы в направление веба вообще заточены под создание веб-моста корпоративной системы и потому в исходе ориентированны что на ней пишется служба/демон которая и работает серваком. Причем вся бизнес-логика делается преимущественно визуально. Под линуху кстати тоже вроде бы как именно это направление применения в крайней версии Дельфы сделали. Но под линуху еще не пробовал. Добавлено через 1 минуту Технически под линукс нет DLL а тем более COM. Там совсем другая система динамически линкуемых библиотек. И вообще динамическая линковка не особо приветствуется. Вплоть до того что настоящие гентушники ядро собирают со статически прилинкованными драйверами. Добавлено через 6 минут Плюсы позволяют очень надежный софт разрабатывать. Поэтому вопрос "как мы будем в случае чего перезапускать патч при сбое?" обычно превращается в вопрос "как мы будем перезапускать при сбое электропитания?".
0
|
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
|
|
10.10.2019, 19:39 [ТС] | 9 |
Не по теме: (выпадал в оффлан на 2 дня) В теории мог написать и использовать некую заготовку на С++. Сделать ее красиво и пользоваться тем что она парсит страницу например не 7 секунд а только одну... Конечно клиент не знает что такое линукс и ему надо прямо на компе фин-директора это проворачивать... В идеале поставил бы ему портабл Ноду, подправил в Notepad.exe скрипты и запустил... Но с С++ такое не выйдет. А если "алфавит" зависит от результатов выполнения первого "прохода"? )) На ОЧЕНЬ большом "не системном" тексте иногда проще пройти дважды, чем в первый раз составлять "дерево"/"словать" на все случаи жизни. Суть не в этом! В КОМПИЛИРУЕМЫХ языках (С++, Делфи, фрипаскаль/Лазарус) работа ЧИСТОЙ математики всегда будет в несколько раз быстрее чем на интерпретируемых языках (JS, PHY, Pyton, Ruby, и даже Java). Если я на чистом паскале (я его знаю и он на порядок проще С++) напишу DLL которую смогу "подключить" к Ноде, то получу прирост в скорости... Например задача получения 1000 чисел PI после запятой. Мне не визуальная часть Делфи нужна... А Лазарус(фрипаскаль) успешно компилится под Мак и Линукс. Не пробовал, но в теории можно писать либы (*.o) или "исполняемые" даже для хостинга. И хоть они не особо приспособлены для веба, но куда успешнее ноды работают в мнопоточных системах и могут ускорить математику. Все там есть! Файлы с расширением *.о . По крайней мере под Иксы. В (опен) С++ прямо в "конструкторах" есть "создать динамическую библиотеку под Линуск". Понятно что если "прилинковать", то еще в несколько раз ускорится, но если выбирать между в 100 раз ускорить или в 150, то... меня и в 20 раз устроит! )) Не по теме: Ой, не надо про надежность заливать! Все зависит от сложности кода и места из которого у программиста росли руки! JS тоже достаточно надежный код пишет. А банки предпочитают Java использовать, хоть надежность Java+С в андроиде хуже чем в детском конструкторе... пробовал запустить ffi + dll на MinGW(+CodeBlocks) - не зашло! (( Собрал библиотеку с одним числовым результатом и без параметров, но подключить к ffi не получилось - "ошибка подключения функции". Пока отложил проект... надо еще материал обдумать... Если у кого получится - отпишитесь, плиииз!
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|
10.10.2019, 20:06 | 10 |
Не по теме: Ну это понятно. Просто те у кого они растут откуда надо обычно выбирают плюсы а не жабы и прочие пыхи. Добавлено через 1 минуту ЗАчем отлаживать и т.д. на компе фин директора то? Сделал загнал в то или иной инсталлятор и клиенту так или иначе отдал Добавлено через 2 минуты С каких делов ему зависить? Многопроходность имеет смысл только в тех случаях когда предыдущий проход резко снижает количество данных и/или упрощает обработку данных для следующего. Добавлено через 18 секунд С каких делов ему зависить? Многопроходность имеет смысл только в тех случаях когда предыдущий проход резко снижает количество данных и/или упрощает обработку данных для следующего. Добавлено через 11 секунд С каких делов ему зависить? Многопроходность имеет смысл только в тех случаях когда предыдущий проход резко снижает количество данных и/или упрощает обработку данных для следующего. Добавлено через 57 секунд Суть в том что работа с сеткой/БД и т.д. ускоряется еще в большее количество раз. Добавлено через 1 минуту А визуальной части в дельфовом фреймверке процентов 10. Остальное доступ к данным данным и сеть.
0
|
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
|
|
10.10.2019, 20:28 [ТС] | 11 |
Не по теме: "Каждая лягушка свое болото хвалит"! Не надо превращать эту ветку в священные войны...Я работал на фирме в 20 человек, где ВСЕ работали на java, а заказчики были в основном из США и Европы. Знакомый работает в Израиле на фирме в 100-200 программистов - весь бэк на Java (он на меня с Node как на не нормального смотрит). Несколько лет назад писал СЛОЖНЫЕ функции на PostgreSQL и пытался их хоть как-то упростить нормальными языками. Выбрал таким PHP - подправил код, нажал F5 и в браузере новый результат через 0.3 секунды. Я несколько месяцев потратил, прежде чем то-же в Ноде с той-же скоростью смог проделывать на той-же машине (систему плагинов придумывал для "обновления кода без перезапуска"). А С++ - это СЛОЖНЫЙ язык! С очень высоким порогом входа, с кучей правил отвлекающих от логики. Подозреваю что простой веб-сайт там тоже не в 5 строк пишется... Затем что только на компе у директора есть нужные доступы к сайту, есть куки, которые можно забирать после переавторизаци. Есть требования которые заранее в ТЗ не пропишешь, а надо "ткнуть пальцем". Подключаешься через TeamView/AmmyAdmin/AnyDesk и правишь что нужно "на месте", видя результат в консоли. Увы, С++ плагины в этом ограничены... пока отложу тему! Либо придумаю что-нибудь, либо придумаю как подключать либы на других компиляторах, либо сделаю список жутко-ограниченных "ускорялок" на С++ и скомпилирую их под большинство нужных мне ОС. Многопроходность имеет смысл когда при первом проходе не знаешь что понадобится при втором проходе, а выясняешь это лишь сделав первый проход и "уточнив ТЗ". Самое простое - когда поставляется БОЛЬШАЯ таблица методов обработки исходника в зависимости от условий первого прохода. Почитай про "жадный" метод обработки алгоритма Коммивояжера - когда идет перебор всех вариантов - медленный, но самый надежный метод, без оптимизаций. Полезно когда "точек" мало, и ресурсы компа позволяют... Тупо берешь и перебираешь по комбинаторике все варианты проходов. Подобные ситуации и с парсингом текста иногда бывают... Если получится подключить библиотеку на Делфи к Ноде - сообщите... У меня пока тупик! И Делфи - не лучшее решение для Ноды. Я бы предпочел все-таки С++. В крайнем случае Лазарус/фрипаскаль. И базы мне не нужны - с сетью и с базами и сама нода не плохо справляется! Мне от плагинов нужны ускорялки математики, многопоточники, быстрая работа с памятью и возможность сохранять/восстанавливать память (аналог Редиса).
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|
10.10.2019, 20:38 | 12 |
Подобная ситуация с парсингом называется левосторонний нисходящий парсер с возвратами. На практике вообще никогда не применялся, потому что достаточно просто преобразуется в левосторонний нисходящий парсер без возвратов. Используется только для объяснения студентам чаво вооще парсер должен делать.
0
|
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
|
|
10.10.2019, 20:42 [ТС] | 13 |
А еще... одним из моих побочных проектов (хобби) является изучение мета-программирования ("результатом работы программы является другая программа"). Сейчас изобретаю "само-оптимизаторы" объектов определенного вида. Автоматический перенос некоторых функций или объектов с JS на С++ было бы интересным решением... Одним из условий работы таких программ - является замена кода БЕЗ перезапуска программы - прямо "на лету". А значит DLL должны быть "динамически-подключаемыми" с возможность отключения и замены.
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|
10.10.2019, 20:44 | 14 |
Ну это уже от вас зависит. Вообще то ТЗ программист разрабатывает так же как и постановку задачи. Заказчик может ее только в общих чертах сформулировать. Для чего то большего у него квалификации нет.
А это при качественной постановке задачи вообще конфигурационными данными решается а не изменением кода.
0
|
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
|
|
10.10.2019, 20:56 [ТС] | 15 |
Все зависит от задачи. И ТЗ иногда настолько расплывчатое что его тяжело сформулировать... Проще "ткнуть пальцем".
Пример "видишь здесь на сайте написано 12 литров/км, надо взять эту цифру и если она больше 10, то... ищешь на этом же сайте чуть раньше фамилию водителя и высылаешь мне, а если меньше, то ищешь чуть выше дату отправки (если не красная, а если красная, то нужна фамилия экспедитора - еще выше) и высылаешь уже не мне, а отдел бухгалтеров-зарплатников!" )) Вот тебе и двойной проход по странице (иногда ВСЕ это в одном ДИВЕ одной строкой без разделителей), и "ткни пальцем" при формировании задачи. Представь себе, если бы я всю эту математику на С++ плагине написал для ускорения. Сайт "граблю" нодой, рассылку результата тоже нодой, а парсинг "строки" в С++. А на месте оказывается что в тексте иногда 2 даты и надо всего-лишь 2 строчки подправить и перекомпилировать... В Ноде - запросто! В С++ - ставь ВижуалСтудиоЛибы и ДотНет! )) или забрий домой "для перекомпиляции" и возвращай лишь уже скомпилированное. Короче - пока технология СЫРАЯ! (( хоть и "вкусная"...
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|
10.10.2019, 20:57 | 16 |
Задача парсера - преобразование текста в абстрактное синтаксическое дерево. А вся обработка идет уже по оному AST а не по исходнику. Подобные алгоритмические оптимизации дают прирост производительности на порядки больший чем любая железячная.
0
|
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
|
|
10.10.2019, 21:05 [ТС] | 17 |
Задача парсера - "вырвать" из текста полезные данные по заданному алгоритму! Не путайте с классическими парсерами типа JSON, HTML или даже Babel. Не к каждому парсеру требование потом "собрать текст взад слегка изменив". 1000 лет назад писал парсер - из сайта банка выдирал 2-3 курса валюты и высылал СМСкой таможеннику. Это тоже был парсер... без AST и даже без возможности получить дерево сайта - просто искались "точки привязки" прямо в тексте - например редкое название класса, потом искалось </div>, потом делался отспуп в 21 символ, потом бралось первое число, потом искали третье </span> и брали еще 10 символов, в котором было второе число курса... и тд. Это тоже был парсер!
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|
10.10.2019, 21:14 | 18 |
Парсер - это синтаксический анализатор, преобразующий поток лексем в абстрактное синтаксическое дерево. А это у вас был не парсер а так поиск по тексту на основании пола потолка и прошлогодней газеты. Кста если он сработал то скорее всего сработало бы просто вытаскивание символов по заданному смещению.
0
|
andyj
|
10.10.2019, 21:22
[ТС]
#19
|
Не по теме: Парсер (англ. parser; от parse — анализ, разбор), или синтаксический анализатор, — часть программы, преобразующей входные данные (как правило, текст) в структурированный формат. Парсер выполняет синтаксический анализ текста. https://ru.wikipedia.org/wiki/... 0%BE%D1%80 "Дерево" - это частный случай парсера... Это был сайт банка. С лентой новостей. Курсы меняли точность с 5 знаков на 7 и назад в завимости от наличия нулей в конце. Курсы тоже иногда переставляли местами... Это были 2000е... мои первые потуги на РНР. Могли запросто точку на запятую поменять или пробел добавить. Или даже картинку вставить "неожиданно сильно вырасло/упало"
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|
10.10.2019, 21:48 | 20 |
ну вот сутью синтаксического анализа и есть преобразование в дерево, по которому производится семантический анализ. А вот тут уже действительно есть варианты. Для языков программирования к примеру оное дерево сразу преобразуется в абстрактный синтаксический граф, и обработка идет уже по оному графу а не по дереву.
0
|
10.10.2019, 21:48 | |
10.10.2019, 21:48 | |
Помогаю со студенческими работами здесь
20
Плагины для joomla. Плагины для JIRA Плагины для bbPress Плагины для Мозиллы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |