Существует ли C-подобный синтаксический интерпретатор языка сценариев для C ++? - PullRequest
1 голос
/ 25 апреля 2019

Я давно начал работать над динамической визуализатором графиков, редактором и платформой тестирования алгоритмов (графы с узлами и дугами, а не с другими видами). Для платформы тестирования алгоритма мне нужно позволить пользователю написать скрипт или вызвать скрипт из файла, который будет взаимодействовать с загруженным графиком. Визуализатор будет делать такие вещи, как подсвечивать узлы, пока они посещаются алгоритмом сценария, добавляя некоторую искусственную задержку, чтобы визуализировать алгоритм навигации и выполнения каких-либо задач. Кроме того, сценарии также будут использоваться для добавления сторонних функций, которые я мог бы либо сделать доступными в виде уже существующих сценариев в папке программы, либо просто интегрировать их в программу на c ++ после того, как они будут протестированы и работают.

Все мои поиски переводчика для включения в мою программу отправили меня в Луа; затем я начал писать свой собственный синтаксический анализатор рекурсивного спуска для своего собственного языка сценариев синтаксиса C-like (который я планировал использовать подмножество грамматики C ++, чтобы любой код, написанный на моем языке сценариев, можно было вставить в любой код C ++. Это была интересная сумасшедшая идея, о которой я вообще не жалею: у меня есть области видимости, функции, циклы, переходы, безопасные переменные, выражения.

Но теперь, когда я подхожу к добавлению классов, методов классов, наследования (некоторые классы по умолчанию были бы необходимы для взаимодействия сценариев с программой), я понял, что потребуется много времени и усилий. Слишком много для личного проекта необразованного студента с экзаменами, чтобы учиться для ... но все же я хочу завершить этот проект.

Само навязываемое требование, чтобы скрипты были на 100% совместимы с C ++, было практически необходимым, это была бы просто небольшая приятная вещь, без которой я мог бы обойтись.

Теперь вопрос в том, есть ли альтернатива lua с c-подобным синтаксисом, который поддерживает все, что я уже сделал, плюс классы и наследование? (возможность добавления пользовательских «классов», которые связывают скрипты интерфейса с программой, обязательна)

(я не могу предположить, что у пользователя установлен полный компилятор c ++, поэтому я не могу просто скомпилировать их "скрипт" во время выполнения как dll для загрузки и вызова, хотя я хочу, чтобы я мог)

Ответы [ 2 ]

5 голосов
/ 25 апреля 2019

Своевременная компиляция C ++

Синтаксический анализ C ++ сложен. Черт возьми, разбирать C сложно. Трудно понять это правильно, и есть много крайних случаев. К счастью, есть несколько библиотек, которые могут взять код и даже скомпилировать его для вас.

libclang

libclang предоставляет множество возможностей для синтаксического анализа c ++. Это хорошая, чистая библиотека, которая будет анализировать все, что будет анализировать сам компилятор clang. Эта статья здесь хороший стартер

libclang предоставляет инструмент компиляции JIT, который позволяет вам писать и компилировать C ++ во время выполнения. См. это сообщение в блоге здесь для обзора того, что он делает и как его использовать. Это очень общий, очень мощный и написанный пользователем код должен быть быстрым.

GCC также предоставляет библиотеку с именем libgccjit для своевременной компиляции во время выполнения программы. libgccjit - это библиотека C, но есть также оболочка C ++, предоставляемая сопровождающими библиотеки. Он может компилировать деревья абстрактного синтаксиса и связывать их во время выполнения, хотя он все еще находится в режиме Alpha

cppast

Если вы не хотите использовать libclang, есть также разрабатываемая библиотека под названием cppast, которая является синтаксическим анализатором C ++, который предоставит вам абстрактное представление синтаксического дерева вашего кода c ++. К сожалению, он не будет анализировать функциональные тела.

Другие инструменты

Если кто-нибудь знает какие-либо другие библиотеки для компиляции или интерпретации C ++ во время выполнения, я призываю их обновить этот пост или прокомментировать, чтобы я мог его обновить!

1 голос
/ 25 апреля 2019

Вот что-то, что позволяет вам встраивать C-подобный язык сценариев в ваше приложение (и кучу других интересных вещей):

http://chaiscript.com/

Есть много документации:

https://codedocs.xyz/ChaiScript/ChaiScript/

...