PHP Lex ve Yacc

3 Cevap php

PHP Lex ve Yacc bir uygulama var mı?

Eğer değilse, herkes PHP kodu yaratacak bir kelime analizörü ve ayrıştırıcı jeneratör (yani, Lex ve Yacc gibi bir şey) önerebilir. Ben çıkan çözümleyici performansı hakkında çok endişeli değilim.

Gerçekten regex ile çözümlenen olmamalıdır şeyleri ayrıştırmak için regex kullanarak bıktım ...

3 Cevap

JLexPHP var: https://github.com/wez/JLexPHP/blob/master/jlex.php

Bir Lemon gramer PHP Ayrıştırıcı oluşturur, http://pear.php.net/package/PHP_ParserGenerator: Ben kullanmadım, ama bu var. Proje olsa inaktif gibi görünüyor.

Antlr kullanır, http://code.google.com/p/antlrphpruntime/: Ben de bu projeyi buldum. Tekrar olsa inaktif.

Bir süre için bu tür bir şey arayanlar için olmuştur. Bu yazıyı bulduktan sonra, ben ANTLR PHP zamanını denedim. Ben bugüne kadar bitmiş olmaktan olduğunu bildirebilirsiniz. Orijinal java runtime sınıfları düzgün PHP tercüme edilmemiştir oluşturulan kod birkaç hatalar vardır (kullanarak, iç içe sınıf bildirimleri. 'Yerine'. 'Sınıfı yöntemleri operatörü erişmeye çalışırken).

The ANTLR framework itself is quite powerful (can't attest to the efficiency of the generated code). Especially the graphical tool ANTLRWorks makes it easy to create and debug grammas. Just too bad about the PHP version. It's possible to roll your own though. The best solution may be to analyse the generated ANTLR runtime class, figure out how it's works, and come up with a light weight less enterprisey version thereof.

Başka sugestion: İyi bir string çözümleyici olarak PHP kullanmak, Lex / Yacc yaklaşım önlemek,

These two options have the same (Lex and Yacc) power, and use only build-in PHP classes and fonksiyons.

Karmaşık durumlarda, vb bu XML, XSLT, hatırlamak W3C standartları, daha sonra, XML-lehçeleri "standart biçimleri" olarak, XML araçları optimize edilmiş ve hala gelişmektedir ve XML veri değiştirilebilir vardır.