यह सवालमैं प्रोग्रामिंग भाषा को कैसे डिजाइन और कार्यान्वित कर सकता हूं?
पिछले कुछ वर्षों से मैं चीजों को मैं पसंद और भाषाओं का उपयोग मैं के बारे में पसंद नहीं है के बारे में सोच रहा है से संबंधित है। मैं हमेशा अपनी भाषा लिखना चाहता था, लेकिन ऐसा कभी नहीं किया।
मैं भी दोनों लेगो RCX और NXT, लेकिन समय के सबसे अधिक ही मैं वास्तव में मेरी रोबोट बनाने कभी नहीं है क्योंकि उनके प्रतिबंधात्मक दृश्य प्रोग्रामिंग वातावरण के लिए कुछ भी करने।
मुझे लगता है कि मैं एनटीएक्स के लिए अपनी प्रोग्रामिंग भाषा तैयार करूंगा क्योंकि पहले से ही बहुत से सामान्य उद्देश्य भाषाएं हैं और एनएफटी मुझे समस्याओं और लक्ष्यों का एक ठोस सेट देता है और उम्मीद है कि साथ खेलने के लिए एक अच्छा सैंडबॉक्स होगा।
अब क्या? मैं कहाँ से प्रारम्भ करूँ? मुझे क्या जानने की ज़रूरत है?
संभव हो तो, मैं अजगर या Clojure में संकलक लिखने चाहते हैं। SDK for the NXT है, लेकिन Assembly language भी है। सबसे अच्छा/आसान मार्ग क्या होगा?
लेगो एनएफटी की एक छोटी सी स्क्रीन, यूएसबी और ब्लूटूथ है, इसमें डिजिटल और एनालॉग, 3 आउटपुट पोर्ट और 2 एआरएम प्रोसेसर, एक मुख्य प्रोसेसर और एक सह प्रोसेसर दोनों 4 सेंसर पोर्ट हैं। http://mindstormsnxt.blogspot.com/2006/08/whats-inside-nxt-brick.html
एनएफटी प्रोग्रामिंग डेटा और घटनाओं को संभालने के बारे में सब कुछ करने जा रहा है, इसलिए कुछ प्रकार के मोनोइकोनिक डेटाफ्लो/प्रतिक्रियाशील शैली उचित लगती है। इसे समांतर कार्यों को अच्छी तरह से संभालना चाहिए, इसलिए मैं कार्यात्मक सोच रहा हूं। मैं वर्तमान में ढेर के आधार पर भी सोच रहा हूं।
मेरे सिर में मैं पहले से ही इन अवधारणाओं को एकजुट और नमूना कोड के बारे में सोच की कोशिश कर रहा हूँ। मैं एक ढेर के बजाय एक पेड़ के बारे में सोच रहा हूं, जहां कार्यात्मक शाखाएं समानांतर में चल सकती हैं। एक उदाहरण:
# implicit main stack
5 5 +
# 10
# quoted branch or list
[1 -]
# 10 [1 -]
# eval list and recur until false
loop
# [9 8 7 6 5 4 3 2 1 0]
# define stack as a function
[1 = [1 8 motor] [1 0 motor] if] fn
# [9 8 7 6 5 4 3 2 1 0] <function>
# define function as a symbol
"handle-press" def
# [9 8 7 6 5 4 3 2 1 0]
# reactively loop over infinite lazy stack returned by sensor
# in a parallel branch
|4 sensor handle-press for|
# [9 8 7 6 5 4 3 2 1 0] [8 nil nil nil 8 ...]
वहाँ स्पष्ट रूप से अभी भी इस के पीछे तर्क में छेद भारी हैं, लेकिन मैं इस स्केच पोस्टिंग कर रहा हूँ वैसे भी कुछ उपयोगी जवाब और चर्चा चिंगारी।
[एक कंपाइलर लिखना सीखना] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/1669/learning-to-write-a-compiler), http://stackoverflow.com/questions/453870/suggestions -for-writing-a-प्रोग्रामिंग-भाषा, http://stackoverflow.com/questions/426239/parsers-and-compilers-for-dummies-where-to-start?lq=1, http://stackoverflow.com/प्रश्न/365,602/बनाने-your-खुद-भाषा? – nawfal