| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Автоматично викане на C функция от командния ред http://mcu-bg.com/mcu_site/viewtopic.php?f=16&t=16859 |
Страница 1 от 1 |
| Автор: | gicho [ Вто Ное 12, 2019 11:08 pm ] |
| Заглавие: | Автоматично викане на C функция от командния ред |
Да кажем че имаме 1 или повече C функции със скаларни аргументи. Има ли инструмент/библиотека (нещо готово) което да wrap-не този код и да получим готов инструмент за командния ред? В смисъл нещо което да хване типовете на аргументите, да формулира подходящ синтаксис за командния ред, да направи main() който да обработи argv/argc и/или stdin/std:cin (scanf-подобно) и да повика първоначалната функция? Може да е скрипт, код генератор и магия на модерно cpp. Use case-а е примерно за тестване - ако имаме някакъв тонаж готови функции и трябва да се дадат на маймунки да ги тестват. Или ако има ценни алгоритми които да могат да се закачат на команден ред (pipe-ване) и да си работят. Някаква аналогия са FFI подходите за връзки между различни езици, или RPC с разните IDL описания. Идеята идва от една щуротия, с която се занимавах скоро - docopt парсер за командния ред: https://github.com/docopt/docopt.cpp Принципно първото ми ровене беше в друга посока и ще питам и него да не пускам друга тема. Търся добра библиотека за cpp (най-добре само хедър) за правене разни инструментчета от команден ред. Това има два аспекта: - обработка на аргументите (argv/argc) - тук за момента тоя docopt ме радва, има и други идейни неща (CLI11) - по-важното - работа със стандартния вход std:cin и сие - говоря за инструменти които мога да се закачат към дълъг стрийм от входни данни - примерно cat testcases.csv >> mytool.exe >> mynexttool.exe; в тоя файл може да има хиляди редове примерно, или файла да идва директно от изхода на curl/wget, или пък от tar на някакъв мулти-гигабатен файл Това второто иска да се парсират по някакъв обявен формат/граматика идващите данни (примерно от оня csv файл, но може и да е нещо бинарно). Очакваният формат в някаква степен си е определен от функцията (или функциите) които са в тоя тул, но за просота да кажем че е само една функция. Какво в C мога и трябва да интегрирам библиотечни функции и да ги викам в някакъв flow, така искам да мога лесно да го имам и на командния ред. Та оттам идва и първото ми питане - както при RPC целта е да се хване прототипа и да се знае как да се повика, та и тук търся нещо подобно. Общо взето всеки формат за сериализиране на данни си има приложение за RPC - независимо дали ще е protobuf, msgpack, cbor или по-дървените xml. json. Със сигурност има дълъг път в който да се анализира C-то, да се извади описание, да се кодгенерира нещо - ама се надявам че "модерното" cpp има нещо хитро в арсенала... Edit: да допълня - очаквам "нещото" като си знае синтаксиса от прототипа да парсира stdin-а, като намери очаквания ред с данни за викането да викне моя код (синхронно - блокиращо), след което да си продължи да лапа байтовете от stdin-а и пак да се обади като обработи следващия ред и т.н. Т.е. event парсер по подобие на SAX. Преди време рових доста по темата и бях набелязал няколко подходящи неща, но тогава приоритет беше парсирането на бинарни данни и тия "находки" съм ги затрил. Едното беше Kaitai struct, имаше и разните ANTLR и подобни. |
|
| Автор: | syscop [ Сря Ное 13, 2019 9:00 am ] |
| Заглавие: | Re: Автоматично викане на C функция от командния ред |
https://github.com/argtable/argtable3 |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|