2013-02-21 30 views
7

मैं मूल प्रोग्रामिंग सीखने के लिए एक साइट का निर्माण कर रहा हूं, मैं एक छद्म भाषा का उपयोग करने जा रहा हूं जिसमें उपयोगकर्ता अपना कोड सबमिट कर सकते हैं और मुझे इसकी व्याख्या करने की आवश्यकता है। हालांकि मुझे यकीन नहीं है कि PHP में टोकननाइज़र कैसे बनाया जाए। इस तरह के एक के रूप में इसPHP में टोकननाइज़र कैसे बनाएं?

एक टुकड़ा होने:

a = 1 
b = 2 
c = a - b 

if(a > b) { 
    buy(a) 
    } else { 
    buy(b) 
    } 

मैं टोकन इस कोड को अलग करने के बारे में कैसे जाना होगा? -

यह अब मैं क्या कोशिश कर रहा हूँ है:

$tokens = array(); 

// First token (define string) 
$token = strtok($botCode, '='); 
$tokens[] = $token; 

// Loop 
while($token) { 
    $token = strtok('='); 
    $tokens[] = $token; 
} 

हालांकि मैं कैसे नियमित expresions की सूची के साथ strtok उपयोग करने के लिए यह पता लगाने के लिए सक्षम नहीं किया गया है ... मैं स्ट्रैटोक के समान कुछ कर सकता है लेकिन यह सरणी और स्ट्रॉप्स के साथ सुइयों के रूप में सरणी स्वीकार करता है लेकिन ऐसा लगता है कि इसे स्ट्रोक के साथ करना संभव है क्योंकि यह केवल इसके लिए डिज़ाइन किया गया है। किसी भी जानकारी या सही दिशा में इशारा करते हुए

+1

आप http://php.net/manual/en/book.tokenizer.php –

+1

प्राप्त कर सकते हैं आमतौर पर वर्णों या रेगेक्स सूची में टोकन नामों की एक सूची। परिचय के रूप में http://compilers.iecc.com/crenshaw/ बहुत उपयुक्त है। लेकिन, कोई अपराध नहीं, मुझे नहीं लगता कि यह एक कार्य है * आपको * अभी तक प्रयास करना चाहिए। – mario

+0

कोई भी नहीं लिया गया। मैं शायद इसे पूरा नहीं कर रहा हूं लेकिन यह सिर्फ एक निजी प्रकोप है इसलिए मुझे परवाह नहीं है। मैंने स्ट्रैटोक के बारे में अभी पढ़ा है, मैं यह नहीं समझ सकता कि मूल्यों की सूची के साथ इसका उपयोग कैसे किया जाए। यदि आप मुझे सही दिशा में इंगित करते हैं तो मैं उत्तर – lisovaccaro

उत्तर

5

स्ट्रेटोक से कुछ जादू का इंतजार न करें। यह preg_split के समान है।

मुझे लगता है कि आप अपना खुद का लेक्सर बनाना चाहते हैं। तो आप आलेख Writing a simple lexer in PHP या something else का उपयोग कर सकते हैं।

+0

धन्यवाद स्वीकार करूंगा, मैंने अभी इसे लागू किया है, मैं कोड जोड़ने के लिए अपना उत्तर संपादित करूंगा क्योंकि यह बस शानदार था। कॉपी-पेस्ट और मिनटों में चल रहा है – lisovaccaro