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

Что такое JavaScript АСТ, как играть с ним?

Абстрактное дерево синтаксиса. Я всегда слышал, что компиляция SpiderMonkey AST на Github.
Итак, это фактический стандарт синтаксического дерева JS? И там V8, это V8, используя тот же тип АСТ?

Как я могу играть с этим?

4b9b3361

Ответ 1

SpiderMonkey предлагает парсер api. Это, вероятно, самый простой способ получить доступ к синтаксическим объектам.

Там также открыты парсы js-js, такие как Esprima (это ECMAScript, правда, но он находится прямо вверх по переулку)

Ответ 2

1.Вы можете посмотреть AST explorer. Онлайновый инструмент для изучения АСТ, сгенерированный более чем 10 парсерами. Это хороший инструмент для изучения дерева AST языка.
Источник исследования AST в Github.com.

введите описание изображения здесь


2. Также вы можете вставить свой js-код в JavaScript AST visualizer и нажать кнопку "show ast", вы увидите AST visully.

demo js code:

function foo(d) {
  d += 3;
    return d+999
}
function bar(d) {
    return d*100
}

js ast demo

Ответ 3

Если вы хотите опробовать анализатор акронов от профессора Марийна https://github.com/marijnh попробуйте эту ссылку: https://astexplorer.net/

Это небольшой, быстрый JavaScript-парсер, полностью написанный на JavaScript.

Вышеупомянутый JavaScript-визуализатор JavaScript использует движок Esprima и также написан на JavaScrpt.

JavaScript доминирует в анализе АСТ, потому что JavaScript-оптимизаторы сегодня оптимизированы. https://en.wikipedia.org/wiki/JavaScript_engine

SpiderMonkey AST стандарт синтаксического дерева JS? Является ли V8 одним и тем же типом AST?

Оба этих механизма веб-браузера имеют обработку АСТ внутри написанной на С++. Вот почему код JavaScrpt будет работать быстро в большинстве случаев, за исключением eval.

Ответ 4

Я знаю только одну спецификацию Javascript AST: https://github.com/estree/estree

Он возник из публикации Дейва Хермана из Mozilla и с тех пор стал стандартом сообщества. Так что он должен в какой-то степени соответствовать SpiderMonkey, но я не уверен насчет V8 и JSC.

Буду признателен, если кто-то может предоставить больше информации по этому вопросу.