Разбор структуры документов PHP / JavaScript в Delphi - PullRequest
2 голосов
/ 31 июля 2009

Мне нужно проанализировать структуру документов PHP и JavaScript, чтобы получить информацию о функциях документа, их параметрах, классах и методах, переменных и т. Д. Мне интересно, есть ли какое-нибудь решение для этого (без регулярных выражений) ... Я слышал о чем-то, что называется "лексинг", однако я не смог найти никаких примеров, даже те, которые могли бы мне сказать, если это что-то Я ищу или нет ...

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

Ответы [ 2 ]

2 голосов
/ 01 августа 2009

Под «Lexing» вы ссылаетесь на Lexical Analysis, и есть некоторые древние инструменты, которые в основном все еще работают, называемые Lex и Yacc. Лекс строит токенизатор, а Yacc означает «еще один компилятор компилятора» и является фактическим парсером.

Концепция lex / Yacc заключается в том, что вы строите грамматику для языка, а затем запускаете грамматику с помощью инструмента paslex для генерации исходного кода (обычно в C), который вы можете использовать для анализа файла и выполнения действий над конкретными ключевые слова и токены. Мартин Вальденбург написал паскальскую версию lex / yacc под названием PasLex, которая длится уже более десяти лет и была преобразована в Delphi (хотя она может не работать с последними версиями без некоторой незначительной работы) , Если я правильно помню, он использует те же входные файлы грамматики .L, что и lex, поэтому любую документацию, которую вы найдете для lex / yacc, можно также применить к paslex, за исключением того, что вы получите код паскаля в качестве вывода.

Я не уверен в наличии текущей документации. До Интернета (задыхаясь) мы пользовались книгами, и большая часть этого была тщательно документирована на бумаге, которая давно пожелтела ... однако, ходят слухи, что вы могли бы ... просто могли бы забрать использованную копию из Amazon. Я порезал себе зубы, используя книгу, также известную как " книга дракона ", которая, как представляется, была переиздана совсем недавно, в 2006 году.


EDIT:

Я ошибся инструментом, это был TPLY . PasLex был реализацией грамматики delphi ... TPLY был инструментом Lex / Yacc, который генерировал исходный текст из файла .L.

2 голосов
/ 31 июля 2009

Я не уверен, что это возможно, но для PHP вы могли бы вызвать PHP CLI из Delphi для получения информации?

Если это так, вы можете вызвать token_get_all () , а затем выложить результат в то, что вы можете проанализировать в Delphi (возможно, xml, json и т. Д.). Это лексизм. Проблема в том, что это только половина решаемой проблемы - вам все равно нужно понимать каждый токен в контексте, чтобы получить желаемые результаты.

...