1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/valkmjolnir-Nasal-Interpreter

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README_zh.md

Если есть хорошие идеи или предложения, мы будем рады услышать от вас!

Введение

Nasal — это язык программирования, синтаксис которого похож на ECMAscript. Он используется в качестве языка сценариев в известном открытом авиационном симуляторе FlightGear. Разработчик этого языка — Andy Ross.

Интерпретатор Nasal был переписан с использованием C++ (-std=c++17) разработчиком ValKmjolnir. Мы выражаем огромную благодарность Andy за создание этого удивительного и лаконичного языка программирования: Andy Ross's nasal interpreter.

Этот проект ранее использовал лицензию MIT (2019/7 ~ 2021/5/4 ~ 2023/5), а с 2023/6 перешёл на лицензию GPL v2.

Почему был переписан интерпретатор Nasal?

Летом 2019 года участники FGPRC жаловались, что отладка в консоли Nasal в Flightgear неудобна. Нужно было потратить время на открытие программного обеспечения и ожидание его загрузки, прежде чем можно было начать отладку. Поэтому я написал новый интерпретатор, чтобы помочь обнаруживать синтаксические ошибки и ошибки времени выполнения.

Я создал лексический анализатор и синтаксический анализатор для Nasal, а также совершенно новый байт-код-виртуальную машину. Этот интерпретатор используется для отладки программ на языке Nasal. Мы обнаружили, что использование этого интерпретатора значительно повышает эффективность обнаружения синтаксических и ошибок времени выполнения.

Вы можете использовать этот язык для написания интересных программ, не связанных с Flightgear, и запускать их с помощью этого интерпретатора. Вы также можете позволить интерпретатору вызывать модули, которые вы написали сами, делая его полезным инструментом в вашем проекте.

Загрузка

В настоящее время доступна предварительная версия (Nightly Build). Предварительная версия интерпретатора для Windows ещё не настроена для соответствующего конвейера. Пожалуйста, проявите терпение или скомпилируйте локально. Мы предоставляем файл Cmake, который можно легко использовать для компиляции в Visual Studio:

  • MacOS-nightly-build
  • Linux-nightly-build
  • Windows-nightly-build (в разработке)

Компиляция

Загрузите последний пакет кода и скомпилируйте его. Проект очень компактный и не использует никаких сторонних библиотек. Для компиляции вам понадобятся только компилятор C++ и программа make.

Для платформы Windows (MinGW-w64) убедитесь, что модель потока — «posix thread model», иначе у вас не будет библиотеки потоков.

mingw32-make nasal.exe -j4

Для платформы Windows (Vistual Studio) проект предоставляет файл CMakeLists.txt для создания проекта в Visual Studio.

На платформе Linux / macOS / Unix:

make -j

Вы также можете указать используемый компилятор с помощью одной из следующих команд:

make nasal CXX=... -j

Использование

Если вы пользователь Windows и хотите нормально выводить unicode, вы можете включить кодовую страницу unicode следующим образом:

if (os.platform()=="windows") {
    system("chcp 65001");
}

Или используйте std.runtime.windows.set_utf8_output():

use std.runtime;

runtime.windows.set_utf8_output();

Отличия от интерпретатора Andy

Этот интерпретатор использует более строгие проверки синтаксиса, чтобы облегчить отладку. Это строгое требование, иначе отладка будет очень болезненной. ``` Аналогичным образом, встроенный в flightgear интерпретатор nasal также принял подобные меры, поэтому перед использованием переменной необходимо использовать var для объявления.

В интерпретаторе Andy:

foreach(i; [0, 1, 2, 3])
    print(i)

Эта программа может нормально выполняться. Однако на самом деле i здесь определяется впервые, и var не используется. Я считаю, что такой дизайн легко запутывает пользователей. Они могут даже не заметить, что i определяется здесь впервые. Отсутствие использования var при определении может привести к тому, что программисты будут думать, что i была определена где-то ещё.

Поэтому в этом интерпретаторе я напрямую использую строгий метод синтаксической проверки, чтобы заставить пользователя обязательно использовать var для определения новых переменных или итераторов. Если вы забудете добавить это ключевое слово, вы получите следующее:

code: undefined symbol "i"
 --> test.nas:1:9
  | 
1 | foreach(i; [0, 1, 2, 3])
  |         ^ undefined symbol "i"

code: undefined symbol "i"
 --> test.nas:2:11
  | 
2 |     print(i)
  |           ^ undefined symbol "i"

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/valkmjolnir-Nasal-Interpreter.git
git@gitlife.ru:oschina-mirror/valkmjolnir-Nasal-Interpreter.git
oschina-mirror
valkmjolnir-Nasal-Interpreter
valkmjolnir-Nasal-Interpreter
master