2010-08-19 18 views
7

मेरे पास कुछ उचित (obfuscated) पर्ल स्रोत फ़ाइलें नहीं हैं, और मुझे एक टोकनज़र की आवश्यकता है, जो इसे टोकन में विभाजित कर देगा, और उनमें से प्रत्येक के टोकन प्रकार को वापस कर देगा, उदा। स्क्रिप्ट के लिएपर्ल स्रोत कोड को टोकननाइज़ कैसे करें?

print "Hello, World!\n"; 

यह कुछ इस तरह वापसी होगी:

  • कीवर्ड 5 बाइट्स
  • खाली स्थान के 1 बाइट
  • डबल-कोटेड स्ट्रिंग 17 बाइट्स
  • अर्धविराम 1 बाइट
  • व्हाइटस्पेस 1 बाइट

इसके लिए सबसे अच्छी लाइब्रेरी (अधिमानतः पर्ल में लिखी गई) कौन सी है? यह उचित रूप से सही होना चाहिए, यानी यह qq{{\}}} जैसे वाक्य रचनात्मक संरचनाओं को पार्स करने में सक्षम होना चाहिए, लेकिन इसे Lingua::Romana::Perligata जैसे विशेष पार्सर्स के बारे में पता नहीं होना चाहिए। मुझे पता है कि पर्सिंग पर्ल ट्यूरिंग-पूर्ण है, और केवल पर्ल ही इसे सही कर सकता है, लेकिन मुझे पूर्ण शुद्धता की आवश्यकता नहीं है: टोकनज़र असफल हो सकता है या असंगत हो सकता है या कुछ दुर्लभ कोने के मामलों में कुछ डिफ़ॉल्ट मान सकता है, लेकिन इसे काम करना चाहिए सही समय के अधिकांश सही ढंग से। यह एक औसत पाठ संपादक में निर्मित वाक्यविन्यास हाइलाइटिंग से बेहतर होना चाहिए।

FYI मैंने कोशिश की pygments में PerlLexer है, जो सबसे निर्माणों के लिए उचित काम करता है, सिवाय इसके कि यह इस एक में 2 print कीवर्ड नहीं मिल सकता है:

print length(<<"END"); print "\n"; 
String 
END 

उत्तर

7

use PPI;

हाँ , केवल perl पर्ल पार्स कर सकते हैं, हालांकि पीपीआई 95% सही समाधान है।

+0

+1 मजेदार जवाब – Dacav

संबंधित मुद्दे