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

OSCHINA-MIRROR/shenguz-scriptparser

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

ScriptParser: открытый компонент для анализа и выполнения JavaScript в среде .NET

ScriptParser — это открытый компонент, который позволяет анализировать и выполнять JavaScript-код в среде .NET. Он предназначен для следующих целей:

  1. Динамическое выполнение части бизнес-логики в среде .NET без необходимости изменения исходного кода программы. Это позволяет расширять функциональность приложения без перекомпиляции.
  2. Предоставление механизма шаблонов на основе JavaScript, который можно использовать в среде .NET для динамического создания текста. Например, он может заменить генерацию HTML-страниц из ASPX-файлов в некоторых случаях.

Поддерживаемые синтаксические конструкции

В настоящее время поддерживается синтаксис ECMAScript 5, за исключением with-синтаксиса и Property. Также поддерживаются следующие типы данных: Object, Array, Number, String, Date, а также методы parseInt, parseFloat, stringify и eval. Для работы с шаблонами поддерживаются выражения for...of, стрелочные функции, let и const. Кроме того, ScriptParser поддерживает доступ к DataTable и позволяет разработчикам добавлять классы, объекты и методы, которые должны вызываться из JavaScript.

Из-за особенностей объектов JavaScript все объекты, методы и свойства, передаваемые в JavaScript, должны быть преобразованы в объекты, наследуемые от IScriptObject. В среде .NET объекты преобразуются в ScriptType, ScriptNativeObject, ScriptNativeArray или ScriptNativeFunction перед вызовом из JavaScript.

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

Во время выполнения ScriptParser предоставляет возможность приостановить и продолжить выполнение, а при пакетном выполнении скриптов — реализовать функционал, подобный потокам. Метод ScriptContext.Pause сохраняет контекст и завершает выполнение метода Execute, после чего метод ScriptContext.Continue возобновляет выполнение. При выполнении длительных операций, таких как сетевые запросы, можно приостановить выполнение с помощью ScriptContext.Pause и возобновить его позже через ScriptContext.Continue.

Для демонстрации возможностей компонента предоставляется проект ScriptTest.

Пример использования компонента:

// Создание контекста выполнения: ScriptContext
ScriptContext context = new ScriptContext();

// Добавление переменных и методов
context.AddValue("inc", 100);

// Получение результата выполнения
object result = ScriptUtils.ExecuteScript(context, "var i = 0; return i + inc;");

Пример использования шаблона:

// Создание контекста выполнения: ScriptContext
ScriptContext context = new ScriptContext();

// Добавление переменных и методов
context.AddValue("status", 2);

string template = @"
Состояние:
<@switch code="status">
    <@case code="1">@{"нормально"}</@case>
    <@case code="2">@{"заморожено"}</@case>
    <@default>другое состояние</@default>
</@switch>
";
string result = ScriptUtils.ExecuteTemplate(context, template);

Синтаксис шаблонов

Шаблоны ScriptParser представляют собой текст с особыми тегами, которые преобразуются в исполняемый JavaScript-код. Поддерживаются следующие теги:

  • if/else if/else: используются для условных конструкций. Else if-узел обозначается как <@else if="***"></@else>.
  • for(...; ...; ...): используется для циклов.
  • for...in: используется для перебора свойств объекта.
  • for...of: используется для перебора элементов массива.
  • while: используется для цикла с предусловием.
  • do...while: используется для цикла с постусловием. Структура узла: <do while="***"> </do>.
  • switch...case...default: используется для выбора по значению переменной. Если необходимо добавить break, то case-узлы можно записать как <@case code="***" /> или <@case code="***" ignoreBreak="true"></@case>.
  • break/continue: используются внутри циклов для управления выполнением.
  • try...catch...finally: используется для обработки исключений.
  • @{***}: используется для вывода значения выражения.
  • <@line />: используется для однострочных команд, добавляет «;» в конце.
  • <@code>...</@code> (<@>...</@>): используется для произвольного JavaScript-кода, который будет сохранён без изменений.
  • <@nowrap>...</@nowrap>: используется для предотвращения переноса строк.

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

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

Введение

Это открытый компонент, который анализирует и выполняет JavaScript в среде .NET. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/shenguz-scriptparser.git
git@api.gitlife.ru:oschina-mirror/shenguz-scriptparser.git
oschina-mirror
shenguz-scriptparser
shenguz-scriptparser
master