Bizim DMS Software Reengineering Toolkit olasılığı oldukça sıra çözüm uygulayabilirsiniz. Bu yüzey-sözdizimi açısından kodlu AST dönüşümler için AST kullanarak, güvenilir bir kaynak kod dönüşümleri gerçekleştirmek için tasarlanmıştır.
Bir PHP Front End hangi PHP kodu yenileyiciye tam, kesin PHP çözümleyici, AST oluşturucu, ve AST olduğunu vardır. DMS ("mümkünse sütun numaraları korumayı") AST prettyPrinting veya sadakat baskı sağlar.
Bu kombinasyon, PHP 4 ve 5 için güvenilir PHP kaynak kodu manipülasyon çeşitli araçlar uygulamak için kullanılmıştır.
(Biraz inanmaz yorumuna cevaben) EDIT:
OP'ın çözüm için, aşağıdaki DMS dönüşüm kural işin en yapmalıdır:
rule replace_underscored_identifier_with_namespace_path(namespace_path:N)
:namespace_path->namespace_path
"\N" -> "\complex_namespace_path\(\N\)"
if N=="NCLASS_OR_NAMESPACE_IDENTIFIER" && has_underscores(N);
This rule finds all "simple" identifiers that are used where namespace paths are allowed,
and replaces those simple identifiers with the corresponding namespace path constructed
by tearing the string for the identifier apart into consitutent elements separated by underscores. One has to code some procedural help
in DMS's implementation langauge, PARLANSE, to check that the identifier contains underscores ("has_underscores"), and to implement the tear apart logic by building the corresponding namespace path subtree ("complex_namespace_path").
Kural kural metin olarak yazılır. Soyut dil nonterminallerin (bu durumda, "namespace_path" karşılık ağaçları belirlenmesi ve tam adı uzay yolu temsil daha karmaşık ağaçları ile basit olanları değiştirerek çalışır, ancak kural kendisi ayrıştırılır DMS ağaçları inşa etmek yoluyla PHP ağaçları uygun olması gerekir.
DMS kural uygulama mantığı trivially PHP çözümleyici tarafından üretilen AST boyunca her yerde bu kuralı uygulayabilirsiniz.
Bu cevap PHP langauge oluşturan tüm karmaşık şeyler karşısında aşırı basit görünebilir, ancak tüm diğer karmaşıklığı DMS tarafından kullanılan PHP dildeki tanımında gizlidir; Bu tanım sözcük ve gramer tanımların bazı 10.000 hatları, ama zaten test edilmiş ve çalışıyor. Tüm DMS makine ve bu 10K hatları, basit regexes güvenilir iş yapamaz neden göstergeleridir. (O bu hakkı elde etmek için gereken ne kadar makine şaşırtıcıdır, ben 1995 yılından beri DMS üzerinde çalışıyoruz).
DMS yapabilirsiniz see a nice simple example bir dil, yöneten / tanımlar nasıl yapar all makinelerini görmek istiyorum.