ஒரு Lisp interpreter-ஐ எழுதுவது எப்படி
நிரலாக்க மொழிகள் (programming languages) எவ்வாறு செயல்படுகின்றன என்பதை நீங்கள் கற்றுக்கொள்ளும்போது, ஆழமான அறிவைப் பெறுகிறீர்கள். Python-இல் ஒரு Lisp interpreter-ஐ உருவாக்குவது இதை உணர்ந்து கொள்ள ஒரு சிறந்த வழியாகும்.
பீட்டர் நோர்விக் (Peter Norvig) 2010-இல் இந்தத் தலைப்பில் ஒரு புகழ்பெற்ற வழிகாட்டியை எழுதினார். interpreter வடிவமைப்பின் கொள்கைகள் மாறுவதில்லை. குறியீடு (code) எவ்வாறு செயல்பாடாக மாறுகிறது என்பதை நீங்கள் இதன் மூலம் கற்றுக்கொள்ளலாம்.
ஒரு interpreter மூன்று முக்கிய நிலைகளைக் கொண்டுள்ளது:
- Lexical Analysis: நீங்கள் மூலக் குறியீட்டை (raw code) tokens-களாகப் பிரிக்கிறீர்கள். இவை சொற்கள் மற்றும் குறியீடுகள் போன்ற சிறிய துண்டுகள் ஆகும்.
- Syntactic Analysis: நீங்கள் tokens-களை ஒரு மரக் கட்டமைப்பாக (tree) மாற்றுகிறீர்கள். இந்த மரம் குறியீட்டின் கட்டமைப்பைக் காட்டுகிறது.
- Evaluation: செயல்பாடுகளைச் செய்து முடிவைப் பெற, நீங்கள் அந்த மரக் கட்டமைப்பைப் பின்பற்றுகிறீர்கள்.
Lisp இதை எளிதாக்குகிறது. இது S-expressions-களைப் பயன்படுத்துகிறது. அதாவது அனைத்தும் அடைப்புக்குறிக்குள் (parentheses) ஒரு பட்டியலாக (list) இருக்கும். முதல் உறுப்பு பொதுவாகச் செயல்பாடாக (function) இருக்கும். மற்றவை அளவுருக்கள் (arguments) ஆகும்.
தொடங்குவதற்கு, (+ 10 (* 2 5)) போன்ற குறியீட்டை tokens-களாக மாற்றுகிறீர்கள்.
உங்கள் tokens இவ்வாறு இருக்கும்: '(', '+', '10', '(', '*', '2', '5', ')', ')'
இந்த அடிப்படை இயக்கவியலைப் (core mechanics) படிப்பது, நீங்கள் ஒவ்வொரு நாளும் உங்கள் கருவிகளைப் பயன்படுத்தும் முறையை மாற்றும்.