Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > JavaScript to XML и обратно


Автор: Се ля ви 1.2.2010, 20:50
Нужен какой-то способ парсить JavaScript-код и трансформировать его в какой-либо XML-документ. Желательно при этом ничего не терять для того, что бы было возможно обратное преобразование (желательно иметь XSLT-таблицу или иной способ обратного преобразования, хотя это не обязательно - можно и самому написать).

Как ни искал - не нашёл ничего похожего.

Сейчас копаюсь в исходниках Rhino, пытаясь использовать их парсер для формирования такого документа, но думаю, может есть способ по-проще?

Сфер применения для этого - колоссальное количество. Можно писать на XSLT оптимизатор кода, можно - добавлять поддержку новых конструкций в язык (указывая в XSLT их реализацию и удобно скрывая её от пользователя), можно вносить дополнительные конструкции, ориентируясь на JSDoc-комментарии (проверку типов параметров в начале функции, например), можно автоматически вставлять хаки для браузеров, не полностью поддерживающих стандарты W3C и ECMA - и т.д.

Нужен только представление JS-кода в виде удобного XML-формата.

P.S. В принципе, можно было бы и вручную чё-то наваять, но уж очень пугает необязательность символа ";" в конце выполняемой конструкции - фактически, алгоритм разбора из-за этого становится многократно сложнее: как в общем случае определять конец конструкции - не совсем ясно...

Автор: IDVsbruck 1.2.2010, 21:59
Ха! Разрыв строки имеет больший приоритет в js, чем точка с запятой. При любом парсировании выявить его не составит труда.
Заодно валидацию в виде той же точки с запятой можно осуществить.

Автор: Се ля ви 2.2.2010, 13:45
Цитата(IDVsbruck @  1.2.2010,  21:59 Найти цитируемый пост)
Разрыв строки имеет больший приоритет в js, чем точка с запятой. При любом парсировании выявить его не составит труда.

Код
return
true;

Будет интерпретировано не так, как 
Код
return true;
, а так, как 
Код
return;
true;

А 
Код
break
outerloop;
 - не так, как 
Код
break outerloop;


Можно придумать и более сложные случаи.

Суть преобразования, насколько я понимаю, в том, что если выражение до символа переноса строки может быть интерпретировано как завершённое, то считается, что там стоит ";", если нет - символ конца строки не учитывается интерпретатором.

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

Автор: gcc 2.2.2010, 20:19
валидатора нету? можно же регулярным выражением попробовать... если не очень сильно запутано...

вот есть встроенный JavaScript я видел http://search.cpan.org/~claesjac/JavaScript-1.15/lib/JavaScript.pm


Автор: Се ля ви 3.2.2010, 17:28
Цитата(gcc @  2.2.2010,  20:19 Найти цитируемый пост)
вот есть встроенный JavaScript я видел http://search.cpan.org/~claesjac/JavaScrip...b/JavaScript.pm

Насколько я могу судить, для Perl`а это то же самое, что и Rhino - для Java или SpiderMonkey для С++. Но штука-то не в этом. Мне на выходе нужен XML-документ, а не интерпретирование этого кода.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)