2013-05-05 8 views
5

Szukam parsera językowego napisanego w PHP.Biblioteka analizatora języków napisana w PHP

Celem jest odczytanie własnego języka, niepoprawny kod PHP.

Zasadniczo chcę podać składnię języka, podać fragment kodu i uzyskać strukturę reprezentującą go. Następnie mogę przejść przez tę strukturę, aby wykonać fragment kodu. Wierzę, że struktura będzie AST, ale nie wiem, czy jest to jedyna opcja (nie jestem intymny z parserami i ich słownictwa).

Spojrzałem na Doctrine DQL parser, ale nie wygląda to jak ogólny parser języka.

+0

http://wezfurlong.org/blog/2006/nov/parser-and-lexer-generators-for-php/ - istnieje również jeden na sourceforge, ale zbyt leniwy, aby wyszukać link dla ciebie. możesz zacząć od cytryny, zwykle jest dobry do łatwego startu, ale nie padnij martwy, gdy zobaczysz wielkość pliku wygenerowanej klasy PHP. – hakre

+0

Osoby, które chcą zamknąć pytanie, proszę wyjaśnić –

+0

@hakre Interesujące, więc Lemon generuje parser napisany w PHP? Przyjrzę się temu. Zamiast tego wolałbym zamiast tego generyczną parsującą bibliotekę PHP (unika się przechodzenia z Cytryną, jeśli język się rozwija). –

Odpowiedz

6

To nie jest pełna lista, jeśli szukasz lexer/parserów PHP, jeden wyjątkowy projekt to Phlexy autorstwa NikiC.

Możesz znaleźć przypadek użycia wewnątrz PHP-Parser, a także napisany przez niego. To jest parser dla języka PHP z abstrakcyjnym drzewem składni (AST), częściowo wygenerowanym z pliku gramatycznego.

Jeszcze nigdy nie udało mi się osiągnąć tak daleko, od moich własnych badań przez lata, nie ma wielu takich projektów w przestrzeni użytkownika PHP, a te dwie biblioteki z NikiC są naprawdę bardzo dobrym przykładem.

Jeśli szukasz leksykonu, który podąża bardziej za regułami elastyczności, napisałem jedną w XDOM, która określa konfigurację selektora CSS, jest również z parserem, ale parser nie jest oparty na pliku gramatycznym, mimo że istnieje w specyfikacji CSS. Lexer oparty jest na pliku .lex.