Автоматты аударма пайдаланылды

3-бап: бір тілге арналған Үш шебер. Компьютер рундарды қалай түсінеді.

Бұл жаңа қазақстандық бағдарламалау тілін құру туралы цикліміздің үшінші бөлігі. Алдыңғы мақалаларда біз оның философиясы туралы әңгімелестік және оған руникалық алфавит жасадық.

Сонымен, бізде тұжырымдама бар және терең бейнелерге толы алфавит бар. Бірақ компьютердің жансыз кремнийі Λ тек белгіше емес, тұрақты тау екенін қалай түсінуге болады? Оған біздің рундарды оқуды қалай үйретуге болады?

Бұл пост біздің тіліміздің "миын" қалай жасағанымыз туралы. Біздің кодқа өмірді енгізетін Үш "шебер" туралы.

Информатикада оларды Лексер, талдаушы және аудармашы деп атайды, бірақ біздің философиямызда олар өз есімдерін алды: Тануши, Құрастырушы және Іске Асыршы.

Біздің кодты тек үздіксіз таңбалар ағыны деп елестетіп көріңіз. Компьютер ондағы рундарды да, есімдерді де көрмейді. Бірінші шебердің міндеті - "Тануши" (танушы) — осы ағымға қарап, таныс бейнелерді тану.

Ол сөйлемнің мағынасын түсінуге тырыспайды. Ол тек жеке "сөздерді" — лексемаларды немесе токендерді анықтайды.

  • Көргеннен кейін ол: "бұл Руна_ айнымалысы" дейді.
  • San-ны көргеннен кейін ол: "бұл Идентификатор (аты)", - дейді.
  • Көріп:, ол: "бұл Тағайындау_ операторы" дейді.
  • 10 - "көргеннен кейін ол:"бұл бүтін Сан_литерал" дейді.

Мысалы, қарапайым код жолы:

— □ a : 10

"Тануши" таңбалауыштардың мағыналы тізбегіне айналады:

[Runa_Var] [Runa_Type_Int] [Identifier: "a"] [Op_Assign: ":"] [IntegerLiteral: 10]

Ол жұмыс істегеннен кейін, таңбалардың хаосының орнына бізде танылған элементтердің нақты тізімі бар. Бірақ олардың бір-бірімен қалай байланысқанын жүйе әлі білмейді.

Мұнда екінші шебер "Құрастырушы" (жинаушы немесе сәулетші) іске кіріседі. Ол "Танушадан" токендер ағынын алады және олардың біздің тіліміздің грамматикасына сәйкес келетіндігін тексереді.

Ол заңдарды сақтаушы.

Ол [Runa_Var] [Runa_Type_Int] [Identifier] [Op_Assign] [IntegerLiteral] тізбегіне қарап: "Иә, бұл "айнымалы декларация"ережесіне сәйкес келеді. Бәрі дұрыс". Егер тәртіп бұзылса," Құрастырушы " қате туралы хабарлаған болар еді.

Оның жұмысының басты нәтижесі - "Ой Бәйтерегі" (ой ағашы). Ғылымда бұл дерексіз синтаксистік ағаш (AST) деп аталады. Ол таңбалауыштардың жалпақ тізімін бағдарламаның логикасын көрсететін иерархиялық, ағаш тәрізді құрылымға айналдырады.

Код үшін

— □ c : a * (b + 2)

Ой ағашы келесідей болады, бұл операциялардың басымдылығын дәл көрсетеді (алдымен жақшаға қосу, содан кейін көбейту):

(Түйін: хабарландыру айнымалы, аты: "c")
 |
 / -- (Мәні: Екілік Операцияның Түйіні, Оператор: '*')
      |
      / -- Сол жақ: (түйін: қол жеткізу айнымалы, аты: "a")
      |
      / -- Оң жақ бөлігі: (екілік операцияның түйіні, Оператор: '+')
           |
           / -- Сол жақ: (түйін: қол жетімділік айнымалы, аты: "b")
           / -- Оң жақ: (түйін: Сан, мән: 2)

Енді бізде тек сөздер ғана емес, бағдарламамыздың тамаша логикалық сызбасы бар.

Бізде сурет бар, бірақ үй әлі салынбаған. Мұнда соңғы шебер — "Іске Асыршы" (орындаушы немесе Орындаушы) пайда болады. Оның міндеті - "ой ағашын" алып, оны өмірге әкелу.

Ол ағашты түйіннен түйінге айналдырады және командаларды орындайды:

  • Түйінді көргеннен кейін декларация айнымалы, ол компьютер жадында ұяшық бөледі.
  • Түйінді көргеннен кейін екілік операция, ол математикалық операцияны орындайды.
  • Түйінді көргеннен кейін шығару ( ), ол таңбаларды экранға шығару пәрменін береді.
Ол біздің бағдарламамыздың соңғы, көрінетін нәтижесін шығарады.

Бұл үш шебер — тану, сәулетші және инкарнация-және біздің компилятор. Бұл Мәңгілік цикл: рәміздерді тану, олардан құрылым құру, осы құрылымды орындау.

Енді сіз біздің тіліміздің қалай "ойлайтынын" білетін болсаңыз, келесі мақалада біз оны іс жүзінде көрсетеміз. Біз руникалық синтаксисті қолдана отырып, алғашқы толыққанды бағдарламамызды жазамыз және оның соңғы нәтижені шығару үшін барлық үш шебердің қолынан қалай өтетінін көреміз.

Пікірлер 0

Кіру пікір қалдыру үшін