जहां तक मान्यता का सवाल है तो निम्न वर्ण टोकन मान्य हैं: यदि इनपुट स्ट्रिंग इन पैटर्न के किसी भी संयोजन से मेल खाता है
operator: [/*+-]
funcs: (a\(|b\()
brackets: [()]
numbers: \d+(\.\d+)?
space: [ ]
एक साधारण मान्यता तो जांच कर सकता है। क्योंकि funcs
टोकन बहुत सटीक है और यह अन्य टोकन के साथ ज्यादा संघर्ष नहीं करता है, इस मान्यता काफी स्थिर होना चाहिए डब्ल्यू/जरूरत ओ किसी भी वाक्य रचना/व्याकरण को पहले से ही लागू करने:
केवल
$tokens = array(
'operator' => '[/*+-]',
'funcs' => '(a\(|b\()',
'brackets' => '[()]',
'numbers' => '\d+(\.\d+)?',
'space' => '[ ]',
);
$pattern = '';
foreach($tokens as $token)
{
$pattern .= sprintf('|(?:%s)', $token);
}
$pattern = sprintf('~^(%s)*$~', ltrim($pattern, '|'));
echo $pattern;
पूरे इनपुट स्ट्रिंग के खिलाफ मेल खाता है तो टोकन आधारित पैटर्न, यह मान्य करता है।यह अभी भी वाक्य रचना गलत पीएचपी हो सकता है, आप सुनिश्चित कर सकते यह केवल निर्दिष्ट टोकन का निर्माण है डाल:
~^((?:[/*+-])|(?:(a\(|b\())|(?:[()])|(?:\d+(\.\d+)?)|(?:[ ]))*$~
आप पैटर्न गतिशील निर्माण है - उदाहरण के रूप में - आप बाद में अपनी भाषा टोकन संशोधित करने में सक्षम हो अधिक आसानी से।
इसके अतिरिक्त यह आपके अपने टोकनेज़र/लेक्सर का पहला कदम हो सकता है। टोकन स्ट्रीम को तब एक पार्सर पर भेज दिया जा सकता है जो इसे व्यवस्थित रूप से मान्य और व्याख्या कर सकता है। वह हिस्सा user187291 wrote about है।
वैकल्पिक रूप से एक पूर्ण लेक्सर + पार्सर लिखने के लिए, और आपको वाक्यविन्यास को सत्यापित करने की आवश्यकता है, तो आप टोकन के आधार पर अपने व्याकरण को भी बना सकते हैं और फिर इनपुट के टोकन प्रस्तुति पर रेगेक्स आधारित टोकन व्याकरण कर सकते हैं।
टोकन वे शब्द हैं जो आप अपने व्याकरण में उपयोग करते हैं। आपको टोकन में अधिक सटीक रूप से ब्रांडेसिस और फ़ंक्शन परिभाषा का वर्णन करने की आवश्यकता होगी, और टोकनज़र को अधिक स्पष्ट नियमों का पालन करना चाहिए, जो टोकन एक और टोकन को पीछे छोड़ देता है। अवधारणा another question of mine में उल्लिखित है। यह व्याकरण फॉर्मूलेशन और सिंटैक्स सत्यापन के लिए रेगेक्स का भी उपयोग करता है, लेकिन यह अभी भी पार्स नहीं करता है। आपके मामले में eval
वह पार्सर होगा जिसका आप उपयोग कर रहे हैं।
क्या आप उन संभावित इनपुट के आदेश की परवाह करते हैं? – hoppa
फ़ंक्शन का एक उदाहरण जो आप अनुमति देंगे और एक फ़ंक्शन जो पास नहीं होना चाहिए, उसे आपके प्रश्न में जोड़ा जाना चाहिए। ध्यान दें कि eval के उपयोग को हल्के से नहीं लिया जाना चाहिए। –
Thats क्यों वह पहले से संदिग्ध करना चाहता है मुझे संदेह है;) – hoppa