2015-04-11 3 views
0

Все в заголовке! ^^Как получить JSON (или эквивалентное) представление файла кода JavaScript * * (код, как строка, на входе)?

Я знаю о некоторых браузерах SourceCode для js; они обычно позволяют найти некоторые мелкие вещи, когда код относительно сохраняется в структуре по текущей неформальной норме кодирования js.

(например, использование оператора new функции в основном, созданные с помощью определений (F foo() {}), а не на основе заявлений выражения или буквальных объектов (var foo = F(){}, { foo: F(){} }) и т.д., норма я точно случайно не делать придерживаться).

но, что бы действительно заинтересовало меня, это полный анализ кода, инструмент, возвращающий, например, файл JSON, содержащий весь код, то есть все заявления, вызовы функций, даже параметры вызовы функций (обычно забываются в js sourcebrowsers, поскольку эти объекты являются де-факто анонимными объектами/функциями, однако они точно используются в функционально-подобном программировании и, таким образом, становятся невидимыми для всех исходных браузеров, которые я встречал)

Цель конечно, было бы создать из этого JSONized кода, моего собственного браузера-источника, который, мы надеемся, будет идти дальше среднего, и будет отвечать моим потребностям, чтобы легко просматривать мой код, также легко видеть, какая переменная определена где и некоторые другие материал что может улучшить мой опыт кодирования.

в любом случае; я не особенно привязан к формату JSON, хотя, конечно, так как я бы закодировал свой исходный браузер в JS, это был бы быстрый ввод данных, но любой другой формат представления данных в порядке, что важно для синтаксического анализатора, который преобразует код в объект мундштука¹. Все, что смотреть и делать STH как это (например, L/Hinter с более развернутым и информативным выводом, или же) приветствуется;)

заранее спасибо :)

¹ «объект»: объект как JS определяет его, т. е. абстрактные данные одинаковые или идентичные словарю; а не объект, как его определяют классы класса OO

+0

Извините, не могу понять смысл, вы имеете в виду как JSON.stringify ?, очень легко преобразовать объекты js в json, catn получить ваш вопрос –

+0

Я ищу инструмент (желательно JS-написанный, но это не необходимый для ввода, исходный файл js (как строка, например, обычно ') (function() {... return MyLib})()" ') и возвращает объект, представляющий этот файл кода, например, описывая вызовы функций, введенные параметры, структуры операторов (циклы и т. д.) и т. д., короче говоря, все в коде, представленное читаемым способом (для исходного браузера js, конечно). ,,,, Яснее? не стесняйтесь перепросить, если мне все еще не удалось четко объяснить мою проблему ^^;) –

+0

Я не думаю, что то, что вы просите, имеет смысл, как бы вы представили foreach в json? и инъекционную услугу? –

ответ

0

Я думаю, что вы ищете стандарт для представления javascript-кода в виде абстрактного синтаксического дерева (AST). Существует широко используемый стандарт для javascript AST, и он называется ESTree. Существует активное сообщество, поддерживающее проект стандартизации, и оно обновляется для новых версий javascript.

В качестве альтернативы существует также Shift AST, который предлагает несколько иной стандарт AST, и он имеет инструмент анализа в режиме реального времени в режиме реального времени.

Реализации генераторов AST обычно предоставляют Parser метод parse(), который принимает ваш код javascript как значение параметра строки и возвращает абстрактный объект дерева синтаксиса, как определено стандартом.

Например проходя этот код:

c = a + b; 

будет производить этот АСТ:

type: "Script" 
directives:[] 
statements: 
    0: 
     type: "ExpressionStatement" 
     expression: 
      type: "AssignmentExpression" 
      binding: 
       type: "BindingIdentifier" 
       name: "c" 
      expression: 
       type: "BinaryExpression" 
       left: 
        type: "IdentifierExpression" 
        name: "a" 
       operator: "+" 
       right: 
        type: "IdentifierExpression" 
        name: "b" 

Наконец, есть генераторы кода, чтобы выполнить обратную процедуру: при наличии в AST и желая произвести JavaScript код из этого.

Обновленная и ухоженная реализация парсера ESTree может быть найдена here.