Лексер написан на Javascript?
-
22-07-2019 - |
Вопрос
У меня есть проект, в котором пользователю необходимо определить набор инструкций для пользовательского интерфейса, полностью написанного на 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 проведет вас через создание полностью автономной системы компилятора, которая может переводить себя и другие языки:
Все это основано на удивительной небольшой 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 с множеством мощных функций, написанных всего за несколько строк кода.
Antlr версии 4.5 теперь имеет целевой объект Javascript .
Я искал что-то подобное, в котором не было бы дыр в безопасности, и я наткнулся на два ресурса. Они не анализируют сценарий, а запускают его в «безопасном» режиме. окружение - то, что вы не можете гарантировать при использовании функции eval
. Итак, я не знаю, если это именно то, что вы ищете, но посмотрите: