Синтаксический анализатор JavaScript для простого выражения

Другая заслуживающая упоминания библиотека - это animate.css . Он отлично работает с jQuery, и вы можете делать много интересных анимаций, просто переключая класс CSS.

Как ..

$ ("# slide"). Toggle (). ToggleClass ('animated bounceInLeft');

5
задан Matthew Murdoch 30 April 2012 в 11:27
поделиться

5 ответов

У меня есть модифицированная версия парсера ActionScript (написана на AS, а не анализирует AS), которая поддерживает пользовательские функции, но не строки. Хотя, вероятно, было бы легко добавить поддержку строк. Я загружу его куда-нибудь, чтобы вы могли получить его по адресу http://silentmatt.com/parser2.js http://silentmatt.com/parser3.js .

Изменить: Я довольно легко добавил базовую поддержку строк. Он не поддерживает escape-последовательности, и toJSFunction не работает, но потребовалось всего несколько минут, чтобы он заработал. Изменение оператора конкатенации на "||" тоже должно быть довольно легко.

Вот как вы оцениваете свои примеры выражений:

js> var parser = new Parser();
js> parser.parse("3 * (2 + 1) - 1").evaluate();
8
js> parser.parse("2 * func(2; 2)").evaluate({ func:Math.pow });
8
js> function substr(s, start, end) { return s.substring(start, end); }
js> parser.parse("func('hello world'; 0; 5) + ' you'").evaluate({ func:substr });
hello you

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

Другое редактирование:

Я немного поигрался с этим, и теперь есть версия с лучшей поддержкой строк на http://silentmatt.com/parser3.js (toJSFunction работает, и вы можете использовать стандартные escape-последовательности JavaScript). Он также использует запятые для разделения аргументов для всех функций и || в качестве оператора конкатенации строк вместо + , который выполняет только сложение.

и вы можете использовать стандартные escape-последовательности JavaScript). Он также использует запятые для разделения аргументов для всех функций и || в качестве оператора конкатенации строк вместо + , который выполняет только сложение.

и вы можете использовать стандартные escape-последовательности JavaScript). Он также использует запятые для разделения аргументов для всех функций и || в качестве оператора конкатенации строк вместо + , который выполняет только сложение.

9
ответ дан 18 December 2019 в 09:52
поделиться

Assuming you mean a javascript parser in javascript, you probably want eval()

see: https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Functions/Eval

Just note that eval, if used improperly, can represent a security risk.

3
ответ дан 18 December 2019 в 09:52
поделиться

haven't used it, but a quick google reveals http://jsfromhell.com/classes/math-parser

edit:

What you want to do may be out of reach of the first link, you could also have a look at Douglas Crockford's "parser for Simplified JavaScript"

It's just a parser, so you would have to do all the evaluation yourself. It would, however, make it somewhat easier and it doesn't use eval.

3
ответ дан 18 December 2019 в 09:52
поделиться

См. Это руководство, чтобы узнать, как создавать произвольные анализаторы / компиляторы. (По сути, это автоматизирует построение парсеров рекурсивного спуска из грамматик, что означает, что вы можете легко изменить синтаксис выражения). Все руководство написано на JavaScript, поэтому оно применимо непосредственно к вам.

http://www.bayfronttechnologies.com/mc_tutorial.html

0
ответ дан 18 December 2019 в 09:52
поделиться

Нарцисс реализует правильный парсер JS в JS: http://mxr.mozilla.org/mozilla/source/js/narcissus/jsparse.js . Написано также Бренданом Эйхом (создателем JS)!

0
ответ дан 18 December 2019 в 09:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: