Парсинг JavaScript для кода инструмента

Мне нужно разбить файл JavaScript на отдельные инструкции. Например

a = 2; foo() function bar() { b = 5; print("spam"); } 

должен быть разделен на три инструкции. (назначение, вызов функции и определение функции).

В основном мне нужно использовать код, вводя код между этими инструкциями для выполнения проверок. Разделение на ";" не будет работать, потому что вы также можете заканчивать инструкции новыми символами, и, возможно, я не хочу вводить код внутри функций и определений классов (я еще не знаю). Я взял курс о грамматиках с flex / Bison, но в этом случае семантическое действие для этого правила было бы «распечатать все потомки в дереве разбора и поместить мой код в конец», что невозможно сделать с помощью базового Bison, я думаю , Как мне это сделать? Мне также нужно разделить код, потому что мне нужно взаимодействовать с Python с помощью pythonspidermonkey. Или … есть ли там библиотека, которая спасает меня от переосмысления колеса? Это не должно быть в Python.

    5 Solutions collect form web for “Парсинг JavaScript для кода инструмента”

    Почему бы не использовать парсер JavaScript? Есть много, включая Python API для ANTLR и оболочку Python вокруг SpiderMonkey.

    JavaScript сложно разобрать; вам нужен полный парсер JavaScript. Инструмент DMS Software Reengineering Toolkit может анализировать полный JavaScript и строить соответствующий АСТ . АСТ-операторы могут затем использоваться для перехода по дереву, чтобы «разделить его». Однако еще проще применить преобразования источника к источнику, которые ищут шаблон одного синтаксиса (JavaScript), и заменить его другим. Вы можете использовать такие преобразования для вставки инструментария в код, а не для разделения кода, чтобы сделать трюки для выполнения вставок. После того, как преобразования завершены, DMS может восстановить действующий код JavaScript (в комплекте с комментариями orignal, если они не затронуты).

    Почему бы не использовать существующий JavaScript-интерпретатор, такой как Rhino (Java) или python-spidermonkey (не уверен, что он еще жив)? Он будет анализировать JS, а затем вы можете изучить полученное дерево разбора. Я не уверен, насколько легко будет воссоздать исходный код, но в основном это зависит от того, насколько читаемым должен быть код инструментария. Если никто никогда не смотрит на это, просто создайте действительно компактную форму.

    пижамы также могут представлять интерес; это Python для транспилятора JavaScript.

    [РЕДАКТИРОВАТЬ] Хотя это не решит вашу проблему с первого взгляда, вы можете использовать ее для другого подхода: вместо того, чтобы обрабатывать JavaScript, вместо этого напишите свой код на Python (что можно легко измерить, все инструменты уже есть) и затем преобразовать результат в JavaScript.

    Наконец, если вы хотите решить свою проблему в Python, но не можете найти синтаксический анализатор: используйте Java-механизм для добавления комментариев к коду, который вы можете искать в Python для программирования кода.

    Почему бы не попробовать javascript beautifier?

    Например, http://jsbeautifier.org/

    Или см. Код JavaScript-кода командной строки, который работает в Windows и Linux

    Забудьте мой парсер. https://bitbucket.org/mvantellingen/pyjsparser – отличный и полный парсер. Я исправил пару ошибок: https://bitbucket.org/nullie/pyjsparser

      Python - лучший язык программирования в мире.