Kirish ifodasini leksik tahlil qilish
To'g'ridan -to'g'ri kirish ifodasini tahlil qilishga o'tishdan oldin, ahamiyatsiz belgilarni (masalan, bo'sh joy va hokazo) olib tashlash va butun tokenlarni yaratish maqsadga muvofiqdir. Algoritm doirasida bu protsedura majburiy emas, lekin u algoritmning o'zi va uning dasturiy ta'minotini tushunishni sezilarli darajada soddalashtiradi.
Masalan, yuqoridagi arifmetik ifoda chizig'iga qaytaylik: (x + 10.2) ^ 2 + 5 * y-z. Leksik tahlil paytida, ko'rsatilgan satr quyidagi tuzilishga ega qatorlar qatoriga aylantiriladi: [0] => ”(”, [1] => ”x”, [2] => ”+”, [3] => ”10,2”, [4] => ”)”, [5] => ”^”, [6] => ”2”, [7] => ”+”, [8] => ”5” , [9] => ”*”, [10] => ”y”, [11] => ”-”, [12] => ”z”.
Shunday qilib, ajralmas belgi - bu operator (arifmetik operatsiya), yoki operand (bir yoki bir nechta raqamlardan iborat raqam), yoki parametr (x, y, z) yoki qavs (elementning ustuvorligini o'zgartiruvchi element sifatida). satrdagi arifmetik amallar).
Leksema ob'ekt sifatida
Daraxt tuzilishidagi har bir integral belgi ob'ekt bilan tavsiflanadi. "Daraxt" ning har qanday ob'ektida bir qator xususiyatlar (maydonlar) va ma'lum xatti -harakatlar mavjud. Keling, tokenni modellashtiradigan har bir ob'ekt uchun ma'lumotlar maydonlarining taklif qilingan ro'yxatini keltiraylik:
1. Ismlar maydoni - ob'ektning yagona nomini belgilaydi.
2. Lec maydoni - bu kirish iborasining shu qismi haqidagi ma'lumotlarni saqlash uchun tokenlar majmuasi, uning tepasida ob'ektlar "daraxtining" tuguni joylashgan.
3. Field const - agar bu ob'ekt parametr bo'lsa, o'zgaruvchi o'z nomini saqlaydi.
4. Field var - agar bu ob'ekt raqam yoki parametr bo'lsa, u holda o'zgaruvchi o'z qiymatini saqlaydi.
Har bir ob'ektning xulq -atvori metodlar majmui bilan tavsiflanadi. Bunday holda, bitta usul etarli, masalan: calc (). Agar ob'ekt operand (raqam) yoki parametrning xatti -harakatini tavsiflasa, u holda bu raqam yoki parametr qiymatini qaytarish kerak. Agar ob'ekt operatorlardan biri bo'lgan tokenni tavsiflasa (arifmetik amallar), unda usul bu operatorni qo'llash natijasini ikkita raqamga qaytarishi kerak.
Daraxt tuzilishining barcha ob'ektlari bitta sinfga tegishli bo'lishi mumkin, siz ob'ektni yaratishda bitta usulni bekor qilishingiz kerak. Yoki, siz bir mavhum calc () funktsiyasi bilan mavhum sinfni tasvirlashingiz mumkin. Keyinchalik, har bir token turi uchun biz mavhum sinfni meros qilib oladigan va calc () usulining o'ziga xos xatti -harakatlarini belgilaydigan o'z sinfimizni tasvirlaymiz. Dasturiy ta'minotni joriy qilish misolida, kodning ancha kichik miqdorini talab qiladigan oxirgi usul tanlandi.
Qaysi token modellashtirilganiga qarab, ba'zi maydonlar bo'sh qoldirilishi mumkin.
Leksema daraxt tuzilishidagi tugun sifatida
Tokenlarni modellashtiradigan ob'ektlarning konfiguratsiyasi umuman aniq. Ammo keyin bu narsalardan daraxt tuzilishini qanday shakllantirish kerak degan savol tug'iladi?
Bu muammo dasturiy ta'minot loyihalarida keng tarqalgan. Yechimning mohiyatini "Linker" nomli dizayn namunasidan olish mumkin. Ushbu dizayn naqshining (naqshining) barcha nozikliklarini ko'r -ko'rona nusxalash bizning rejalarimizga kiritilmagan, shuning uchun biz ma'lum bir ish uchun eng muhim va zarurini ajratib ko'rsatishga harakat qilamiz.
Daraxt tuzilishidagi ob'ektlarni tartibga solish uchun har bir ob'ektga yana uchta maydon qo'shing:
1. childrenLeft maydoni - bu ob'ektning chap "vorisi".
2. childrenRight maydoni - bu ob'ektning to'g'ri "vorisi".
3. Ota -ona maydoni - bu ob'ektning "ota -onasi".
Bundan keyin "ota -ona" va "merosxo'r" atamalari OOPning asosiy tamoyillaridan biriga ishora qilinmasdan, lekin boshqa ob'ektlarning hosil bo'lgan daraxt tuzilishiga nisbatan nisbiy joylashishini ko'rsatish kontekstida ishlatiladi.
Aytilganlarga aniqlik kiritish uchun biz "(x + 10.2) ^ 2 + 5 * y-z" ifodasi uchun daraxt tuzilishi tasvirini beramiz, bunda ob'ektlarning barcha maydonlarining qiymatlari ko'rsatilgan.
Yuqoridagi diagrammadan, nima uchun har bir tugun faqat ikkita "merosxo'r" ga ega bo'lishi yoki umuman bo'lmasligi juda aniq bo'ladi.
Olingan ob'ekt tuzilishi diagrammadagi eng yuqori ob'ektning calc () usulini chaqirish orqali arifmetik ifodalarning qiymatlarini hisoblash uchun juda maqbuldir.
Do'stlaringiz bilan baham: |