Подтвердить что ты не робот

Лексер написан на Javascript?

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

4b9b3361

Ответ 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 вы можете создать полностью автономную систему компилятора, которая может переводить себя и другие языки:

Учебник по компиляции 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-лексер с множеством мощных функций, написанных всего несколькими строками кода.

Ответ 10

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