Вопрос

У меня есть проект, в котором пользователю необходимо определить набор инструкций для пользовательского интерфейса, полностью написанного на JavaScript.Мне нужна возможность анализировать строку инструкций и затем переводить ее в инструкции.Существуют ли какие-либо библиотеки для анализа, которые на 100% состоят из JavaScript?Или генератор, который будет генерировать в javascript?Спасибо!

Это было полезно?

Решение

Что-то вроде http://jscc.phorward-software.com/ , может быть?

        

JS / CC является первой доступной системой разработки синтаксического анализатора для JavaScript и ECMAScript - производные. Он был разработан как с целью создания продуктивной системы разработки компиляторов, так и с целью создания простой в использовании академической среды для людей, заинтересованных в том, как генерация таблиц анализа выполняется в целом. анализ снизу вверх.

Независимое от платформы программное обеспечение объединяет оба: Основанное на регулярном выражении лексический анализатор генератор , сопоставляющий отдельные токены из входного потока символов и a LALR (1) генератор синтаксических анализаторов , вычисляя таблицы синтаксического анализа для заданного спецификация контекстно-свободной грамматики и создание автономной грамматики работает парсер. Не зависящая от контекста грамматика, подаваемая в JS / CC, определяется в Мета-язык на основе Backus-Naur-Form и позволяет оценивать вставку отдельного семантического кода при сокращении правила.

Сам JS / CC полностью написан на ECMAScript , поэтому его можно выполнять разными способами: как независимый от платформы JavaScript-код на основе браузера, встроенный в веб-сайт, как приложение-скрипт Windows как скомпилированный исполняемый файл JScript.NET, как интерпретируемое приложение Mozilla / Rhino или Mozilla / Spidermonkey или сценарий оболочки V8 для Windows, * nix, Linux и Mac OSX. Однако для продуктивного выполнения рекомендуется использовать версии командной строки. Эти версии способны собрать полный компилятор из спецификации синтаксического анализатора JS / CC, которая затем сохраняется в исходном файле JavaScript .js.

Другие советы

Если вы хотите создавать парсеры JavaScript и генераторы кода, проверить реализацию MetaII в Javascript.

Учебник по MetaII Compiler проведет вас через создание полностью автономной системы компилятора, которая может переводить себя и другие языки:

Учебник по компилятору MetaII

Все это основано на удивительной небольшой 10-страничной технической статье Вала Шорре: META II: синтаксически-ориентированный язык написания компиляторов от честного бога 1964 года. Полное самоописание компилятора MetaII составляет около 30 строк! Я научился создавать компиляторы из этого еще в 1970 году. Есть удивительный момент, когда вы, наконец, понимаете, как компилятор может сам себя восстановить ...

Учебное пособие объясняет, как работает MetaII, и реализует MetaII, компилируя MetaII в JavaScript. Вы можете легко изменить этот компилятор для анализа других языков и создания другого Javascript.

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

Jison, вероятно, лучший и самый активный лексер & amp; Генератор парсера там для Javascript. Это имитирует Бизона и Яка.

Jison: http://zaach.github.io/jison/

Если вам нужен легкий лексер (~ 100 слоков), вы можете взглянуть на Lexed.js: https: // github.com/tantaman/lexed.js

Для простых задач анализа я очень люблю использовать вариант Pratt's Синтаксический анализатор приоритета сверху вниз . В то время как Пратт писал оригинальную статью, используя старый диалект Лиспа, те же самые концепции можно легко использовать практически на любом языке. На самом деле Дуглас Крокфорд написал отличную статью о синтаксическом анализе приоритетов операторов сверху вниз в JavaScript , что может быть именно то, что вам нужно.

Вот пример парсера для "псевдо" естественного языка инструкций, который был реализован в чистый JavaScript с Шевротейн Разбор DSL:

https://github.com/SAP/chevrotain/blob/master/examples/parser/inheritance/inheritance.js

Этот пример даже включает поддержку несколько естественные языки (английский и немецкий) с использованием наследования грамматики.

Chevrotain относится к категории «существуют библиотеки для синтаксического анализа, которые на 100% состоят из JavaScript» как он выполняет нет генерации кода.Использование Chevrotain похоже на «ручное создание» достойного рекурсивного парсера, только без большинство из головная боль такой как:

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

поскольку Chevrotain делает это автоматически.

В зависимости от дизайна «набора инструкций» вы можете использовать встроенную в Javascript функцию eval , которая анализирует исходный код Javascript; Вы можете написать простой переводчик для преобразования инструкций в код Javascript.

Кстати, будьте очень осторожны с дырами в XSS.

если вы действительно ищете лексера, попробуйте prettify .

Если вам нужен лексер и ничего, кроме лексера, взгляните на это: https://github.com / aaditmshah / лексер

Это чистый лексер JavaScript с множеством мощных функций, написанных всего за несколько строк кода.

Я искал что-то подобное, в котором не было бы дыр в безопасности, и я наткнулся на два ресурса. Они не анализируют сценарий, а запускают его в «безопасном» режиме. окружение - то, что вы не можете гарантировать при использовании функции eval . Итак, я не знаю, если это именно то, что вы ищете, но посмотрите:

<Ол>
  • jsandbox - песочница Javascript
  • Google Caja - виртуальный фрейм.
  • Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top