Is there a C-like syntax scripting language interpreter for C++?

Обновить

April 2019

Просмотры

59 раз

2

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

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

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

Самоналоженное требование сценариев составляет 100% совместимость с C ++ было все, но нужно, это было бы просто немного приятно дополнительной вещь, которую я могу обойтись.

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

(Я не могу взять на себя пользователь должен иметь компилятор C ++ полный установлен таким образом, я не могу просто собрать их «сценарий» во время выполнения, как DLL, чтобы загрузить и назвать его, хотя я свистеть я мог)

1 ответы

4

Just-in-time compilation of C++

Parsing C++ is hard. Heck, parsing C is hard. It's difficult to get it right, and there are a lot of edge cases. Thankfully, there are a few libraries out there which can take code and even compile it for you.

libclang

libclang provides a lot of facilities for parsing c++. It's a good, clean library, and it'll parse anything the clang compiler itself will parse. This article here is a good starter

libclang provides a JIT compilation tool that allows you to write and compile C++ at runtime. See this blog post here for a overview of what it does and how to use it. It's very general, very powerful, and user-written code should be fast.

GCC also provides a library called libgccjit for just-in-time compilation during the runtime of a program. libgccjit is a C library, but there's also a C++ wrapper provided by the library maintainers. It can compile abstract syntax trees and link them at runtime, although it's still in Alpha mode.

cppast

If you don't want to use libclang, there's also a library under development called cppast, which is a C++ parser which will give you an abstract syntax tree representation of your c++ code. Unfortunately, it won't parse function bodies.

Other tools

If anyone knows any other libraries for compiling or interpreting C++ at runtime, I encourage them to update this post, or comment them so I can update it!