У меня есть проект, где пользователю необходимо определить набор инструкций для ui, который полностью написан в javascript. Мне нужно иметь возможность разбирать строку инструкций, а затем переводить их в инструкции. Есть ли там библиотеки для разбора, которые составляют 100% javascript? Или генератор, который будет генерироваться в javascript? Спасибо!
Лексер написан на Javascript?
Ответ 1
Что-то вроде http://jscc.phorward-software.com/, может быть?
JS/CC - первая доступная система разработки парсеров для JavaScript и ECMAScript -, Он был разработан, как с целью создания продуктивной системы разработки компиляторов, так и с целью создания простой в использовании учебной среды для людей, заинтересованных в том, как генерируется генерация таблицы разбора в целом синтаксический анализ снизу вверх.
Независимые от платформы программные союзы: регулярное выражение лексический анализатор generator сопоставление отдельных токенов из входного символьного потока и a LALR (1) генератор синтаксического анализатора, вычисляя таблицы синтаксиса для заданного контекстная грамматика и создание автономного рабочего анализатора. Контекстно-свободная грамматика, поданная в JS/CC, определена в Бэксу-Наур-форма на основе метаязыков и позволяет вставлять отдельный семантический код для оценки при сокращении правил.
Сам JS/CC полностью написан в ECMAScript, поэтому его можно выполнить по-разному: как независимый от платформы JavaScript-браузер, встроенный на веб-сайт, в качестве Windows Script Host Application, как скомпилированный исполняемый JScript.NET, в качестве интерпретируемого приложения Mozilla/Rhino или Mozilla/Spidermonkey или оболочки V8 Script для Windows, * nix, Linux и Mac OSX. Однако для эффективного выполнения рекомендуется использовать версии командной строки. Эти версии могут собирать полный компилятор из спецификации парсера JS/CC, который затем сохраняется в исходном файле JavaScript.js.
Ответ 2
Если вы хотите построить JavaScript-синтаксические анализаторы и генераторы кода, проверьте реализацию MetaII в Javascript.
В учебнике по компилятору MetaII вы можете создать полностью автономную систему компилятора, которая может переводить себя и другие языки:
Все это основано на удивительной небольшой 10-страничной технической статье Валь Шорре: META II: Синтаксически ориентированный язык написания компилятора от честного к богу 1964 года. Компилятор MetaII, полное самоописание, составляет около 30 строк! Я узнал, как создавать компиляторы с этого момента в 1970 году. Там умиротворяющий момент, когда вы, наконец, заглядываете, как компилятор может самовосстанавливаться....
Учебное пособие объясняет MetaII, как оно работает и реализует MetaII, компилируя MetaII в JavaScript. Вы можете легко модифицировать этот компилятор для анализа других langauges и создания разных Javascript.
Я знаю автора веб-сайта в дни моего колледжа, но не имею никакого отношения к веб-сайту.
Ответ 3
Jison, вероятно, лучший и самый активный лексер и синтаксический анализатор для Javascript. Он имитирует Bison и Yacc.
Jison: http://zaach.github.io/jison/
Если вам нужен лексер с легким весом (~ 100 слотов), вы можете взглянуть на Lexed.js: https://github.com/tantaman/lexed.js
Ответ 4
Для простых задач синтаксического анализа я очень люблю использовать вариант Pratt "Оператор приоритета сверху вниз" . В то время как Пратт написал оригинальную бумагу, используя старый диалект Lisp, те же самые понятия могут быть легко использованы на большинстве языков. Фактически, Дуглас Крокфорд написал превосходную статью о "Приоритет сверху вниз" в JavaScript, который может быть именно тем, что вам нужно.
Ответ 5
Вот пример парсера для "псевдо" естественного языка инструкций, который был реализован в чистом JavaScript с Chevrotain Разбор DSL:
https://github.com/SAP/chevrotain/blob/master/examples/parser/inheritance/inheritance.js
В этом примере даже поддерживается поддержка нескольких естественных языков (на английском и немецком языках) с использованием грамматического наследования.
Chevrotain попадает под категорию "библиотеки для разбора, которые являются 100% javascript", поскольку он выполняет отсутствие генерации кода. Использование Chevrotain аналогично "ручной обработке" рекурсивного приличного парсера, только без большей головной боли, например:
- Создание функции Lookahead (выбор альтернативы для принятия)
- Автоматическое восстановление ошибок.
- Распознавание левой рекурсии
- Обнаружение неоднозначности.
- Информация о местоположении.
- ...
так как Chevrotain обрабатывает это автоматически.
Ответ 6
В зависимости от дизайна "набора инструкций" вы можете использовать встроенную функцию Javascript eval
, которая анализирует источник Javascript; вы можете написать простой переводчик, чтобы преобразовать инструкции в код Javascript.
Кстати, будьте очень осторожны с отверстиями XSS.
Ответ 7
если вы действительно ищете только лексер, попробуйте prettify.
Ответ 8
Если вы хотите лексер и ничего, кроме лексера, посмотрите на это: https://github.com/aaditmshah/lexer
Это чистый JavaScript-лексер с множеством мощных функций, написанных всего несколькими строками кода.
Ответ 9
Версия Antlr 4.5 теперь имеет Javascript target.
Ответ 10
Я искал нечто похожее, у которого не было бы никаких дыр в безопасности, и я наткнулся на два ресурса. Они не анализируют script, но фактически запускают его в "безопасной" среде - то, что вы не можете гарантировать при использовании функции eval
. Итак, я не знаю, действительно ли это именно то, что вы ищете, но посмотрите:
- jsandbox - песочница Javascript
- Google Caja - виртуальный iframe.