Тапсырма 2
Деңгейге шығару мәтінінде қатар орналасқан екі жұлдызша мен белгіленген. Бұл белгіні '^' ауыстыруға шешім қабылданды (сонымен '' ауысады ''). Осыны қалай жай түрде жасауға болады?
Бастапқы мәтін символдан кейін символды оқиды, алынған мәтінді символдан кейін символды қосып басу керек.
Шешімі. Әр уақыт сайын бағдарлама екі жағдайдың бірінде болып келеді "негізгі" және "жұлдызшадан кейін"
Кезекті жаңа әрекеттін жағдайы.
кіру символының жағдайы
негізгі * жоқтан кейін
негізгі x <> '*' негізгі x басу
сосын * негізгіні басу '^'
x кейін<> '*негізгіні * x басу
Егер мәтіннің соңында бағдарлама «кейін» жағдайында болса, онда жұлдызшаны басу және жұмысты аяқтау керек.
Ескерту. Біздің бағдарлама заменяет '***' '^*' ауыстырады (бірақта '*^' емес). Есептеу жағдайында біз кей детальдарды талқылаған жоқпыз - бағдарлама "дұрыс әрекет істеу керек". Аталған уақытта,бағдарламаның қалай жұмыс жасайтының түсіндірудің ең тиімді жолы бұл оның жағдайы мен әрекетін бейнелеп беру.
Тапсырма 3
Мәтіннен барлық сөдердің '' түрін жоятын бағдарламаны жазыңыз.
Тапсырма 4
Паскальда түсініктемелер бейнелі жақшалармен келтірілген: begin { цикл басы} ; { ді 1арттырамыз}
Бағдарламаны жазыңыз, ол түсініктемелерді жойып, ал жойылғанның орнына аралықты қойсын ('1{бір}2' ауыссын, '12' емес, ал '1 2').
Шешімі. Бағдарламаның екі жағдайы бар: "негізгі" және "ішкі түсініктеме".
Жағдайы. Кезекті жаңа іс-әрекет
жағдайдың ішкі символы
негізі { ішкі жағында жоқ
негізі x <> '{' негізі x басу
ішінде } негізі аралықты басу
ішінде x <> '}' ішінде жоқ
Ескерту. Бұл бағдарлама салынған түсініктемелерді қабылдамайды: жол {{түсініктемелер ішінде} түсініктемелер} ауысады түсініктемелер} (басында екі аралық тұрады). Соңғы автоматпен түсініктемені өңдеу мүмкін емес (жақшалар саның білу керек – ал натуралды сан соңғы жадыға сыймайды).
Тапсырма 5
Паскаль бағдарламасында тырнақшаға алынған жолдар бар.
Егер де кескінді тырнақша жол ішінде кездессе, онда ол түсініктеменің басы немесе аяқ жағы деген мағынаны білдіреді. Қалай бағдарламаны өзгертеміз, осыны ескеру үшін?
Нұсқаулық. Жағдай үш түрлі болады: негізгі, түсініктеме іші, жол іші.
Тапсырма 6
Паскальді жүзеге асыру үшін тағыда бір мүмкіндік бар – бұл түрлердің түсініктемесі ; (here i is increased by 1).
Сонымен қоса жабылған жақша, ашылған жақшаға сәйкес келе керек ({ ... *) рұқсат етілмейді). Осындай түсініктемені қалай жоямыз?
Бақылау сұрақтары
1. Құрылымдық синтездің мақсаты неде?
2. Құрылымдық синтездің негізгі кезеңдерін атап шық?
3. Жадының қандай элементтер түрін білесіндер?
14 -15 зертханалық жұмыс. LL(1)-грамматикасы үшін рекурсивті түсі әдісімен синтаксистік талдау.
Мақсаты: Студентерді бағдарламаны кезеңмен құруға үйрету
3.1 Қысқаша теориялық мәліметтер
Терминалданбаған дүкендік танушылар жұмысының модельденуі реттіліктің бастауыш жай-күйден соңғы жай-күйге ауысуын іздеумен байланысты. Іздеу жеке-жеке қадамдардан тұрады.
Және олардың әрбіреуі сәтсіздікке және бастапқы жай-күйге әкелуі мүмкін. Бұндай іздеу уақытты көпалатындықтан тәжірибеде қайтымсыз жұмыс істейтін детерминалданған танушыларды қолданады. Бұл танушылар -тілдердің шектеулі кластарын ғана қолданысқа жібереді, бірақ олар бағдарламалау тілдерінің барлық синтаксистік жақтарын көрсетеді.
Танушыларды азаймалы және өрмелі деп екі категорияға бөлуге болады.
Азаймалы танушылар ережелерді жоғарыдан төмен өңдейді, яғни жоғары ережелерді төменгілерден бұрын. Ал бұл уақытта кіріс анализаторлары төмендегі ережелерді жоғарыдағылардан бұрын қолданады. Детерминалданған автоматтардың мүмкіндіктері мен олардың тұрғызылу тәсілдерін көрсету үшін бұл бөлімде түріндегі грамматикалар тудыратын азаймалы танушылар қарастырылады.
атауы Left сөзінен шыққан, себебі анализатор кіріс шынжырын солдан – оңға қарай көреді. Тәжірибеде көбінесе грамматика класы қолданылады. Олар үшін ағымды позицияда орналасқан детерминалданған бір кіріс символды танушылар жұмыс істейді. Оқудың бірінші қадамы ретінде азаймалы танушылардың грамматика кластары ішіндегі бір реттілікті қараймыз.
Бөлінген ауыспалылар.
Құрамында жою ережелері жоқ мәнмәтінді-бос грамматика төмендегі келесі екі шартты орындаса ғана бөлінген немесе жай деп аталады:
Әр ереженің оң жағы терминалмен басталса.
Егер екі ереженің сол жағы бірдей болса, онда бұл ережелердің оң жағы түрлі терминалдық символдармен басталуы керек.
Бөлінген грамматиканың негізгі қасиеттерінің бірі – олардың әрқасысына өрлемейтін детерминалданған танушы құруға болады.
Мысалы, келесі грамматика, сызбамен берілген:
бөлек грамматика болып келеді, (1) и (2) жағдайы орындалуда.
Басқа жақтан алғанда, грамматика
бөлек грамматика болмайды , себебі (2) ережеде шарт бұзылады (1), ал ережесінде (3) және (4) - шарт (2).
Бөлек грамматиканың негізгі қасиеті болып, олардың әрқайсысынан детерминалды төмен түсетін айырылымдарын құруға болады.
Достарыңызбен бөлісу: |