Forth के एक बहुत ही सरल उपसमूह के लिए एक एवैल्यूएटर बनाइए।
Forth एक स्टैक पर आधारित प्रोग्रामिंग भाषा है। Forth के एक छोटे उपसमूह के लिए एक बहुत ही बुनियादी एवैल्यूएटर बनाइए।
आपके एवैल्यूएटर को इन शब्दों का समर्थन करना होगा:
+, -, *, / (पूर्णांक अंकगणित)DUP, DROP, SWAP, OVER (स्टैक में बदलाव)आपके एवैल्यूएटर को परंपरागत सिंटैक्स का उपयोग करके नए शब्द बनाने का समर्थन भी करना होगा: : word-name definition ;।
चीज़ों को सरल रखने के लिए आपको केवल एक डेटा टाइप देना है: कम से कम 16 बिट आकार के चिह्नित पूर्णांक।
सिंटैक्स के लिए इन नियमों का पालन कीजिए: संख्या एक या अधिक (ASCII) अंकों का क्रम होती है, और शब्द एक या अधिक अक्षरों, अंकों, प्रतीकों या विराम-चिह्नों का ऐसा क्रम होता है जो संख्या न हो। (Forth में शायद थोड़े अलग नियम हैं, लेकिन यह काफी करीब है।)
शब्दों में छोटे और बड़े अक्षरों का कोई फर्क नहीं होता।
Forth में फंक्शन को words कहा जाता है, और वे एक डेटा स्टैक पर काम करते हैं। हर वर्ड अपने पैरामीटर स्टैक से लेता है और अपना परिणाम स्टैक पर लौटाता है।
Forth के दस्तावेज़ों में हमेशा यह दिखाया जाता है कि कोई वर्ड चलने से पहले और चलने के बाद डेटा स्टैक की स्थिति क्या रहती है। इसे इस तरह लिखा जाता है: ( p1 p2 ... pN --- r1 r2 ... rN ).
यहाँ p1 से pN तक की वैल्यू कॉल से पहले स्टैक पर मौजूद वर्ड के पैरामीटर बताती हैं (स्टैक पर इससे ऊपर और भी डेटा हो सकता है, जो यहाँ नहीं दिखाया गया है), और r1 से rN तक की वैल्यू कॉल के बाद स्टैक पर मौजूद वर्ड की रिटर्न वैल्यू बताती हैं।
--- सेपरेटर वर्ड चलने से पहले और बाद की स्टैक स्थिति का अंतर बताता है।
जिन वर्ड को लागू करना है, वे इस तरह परिभाषित हैं:
| वर्ड | स्टैक की स्थिति | विवरण |
|---|---|---|
+ |
( a b --- sum ) |
sum = a + b |
- |
( a b --- diff ) |
diff = a - b |
* |
( a b --- prod ) |
prod = a * b |
/ |
( a b --- quot ) |
quot = a / b |
dup |
( a --- a a ) |
ToS पर मौजूद वैल्यू की एक और प्रति बनाना |
drop |
( a --- ) |
ToS पर मौजूद वैल्यू हटाना |
swap |
( a b --- b a ) |
ToS पर मौजूद दो वैल्यू आपस में बदलना |
over |
( a b c --- a b c b ) |
दूसरी वैल्यू की प्रति ToS पर रखना |
अगर आप किसी ऑनलाइन Forth इंटरप्रेटर के साथ खेलना चाहते हैं या जिन वर्ड को लागू करना है उनके बारे में और जानना चाहते हैं, तो Easy Forth आज़माइए (खास तौर पर Adding Some Numbers, Defining Words और Stack Manipulation वाले हिस्से में)।