Лексикалық анализ (сканер)

  1. Сканердің кірісінде қайсыбір алфавит символдарының тізбегі тұрады.(сканер үшін бастапқы программамыз осындай болып көрінеді) Кейбір символдар комбинацияларын сканер бір объект ретінде қарастыру мүмкін. Мысалы:
  • бір не одан көп пробелдер (бос орын) бір пробелмен ауыстырылады;
  • кілттік сөздер (Begin, end, integer) сияқтылар;
  • константаны білдіретін символдар тізбегі;
  • индентификатроды білдіретін символдар тізбегі;

Осылайша, лексикалық анализатор (ла) белгілі бір терминал

символдарды (яғни енуші символдар) бірдей синтаксистік объектілерге – лексемаларға топтаытырылады. Қарапайым жағдайда лексема бұл – мына түрдегі жұп <лексима типі, мәні > енуші тізбектерден лексемаларды белгілеп алу көбінесе коррект тілдің құрылымына тәуелді болады. Мынадай енуші тізбек “567АВ” қалай интеррпетация жасалынады? Бұл бір ғана лексема (индентификатор ) болуы мүмкін, 2 лексима да болуы мүмкін; “567” константа және “АВС” атау. Екінші жағдайда лексемалар арасына айыру белгісін қою керек (мысалы, пробел), не алдын ала бұдан кейін не келетіні мәлім болуы керек.

  1. Лексикалық анализатор типтері.

Лексикалық анализатордың екі негізгі типі бар:

тура (ТЛА) және тура емес (ЕЛА).

Тура ЛА ағымдағы көрсеткіштің дәл оң жанында орналасқан лексеманы анықтап, көрсеткішті лексеманы құраған текст бөлігінен оңға қарай жылжытып қояды. (ТЛА көрсеткіштің оң жағындағы символдардан құралған лексема типін анықтайды).

Тура емес ЛА көрсеткіштің дәл оң жанында орналасқан белгілер берілген типтей лексеманы құрай ма, жоқ па соны анықтайды. Басқаша, айтқанда ол үшін алдын ала лексема типі беріледі және ол көрсеткіштің оң жағындағы символдарды анықтап, берілген типті қанағаттандыруын тексереді.

ТЛА – ң құрылымы күрделірек. –Ол ЕЛА –ға қарағанда көбірек амалдар орындауға міндетті. Бұған қарамастан, қазіргіпрограммалаутілдерінің көбісінде тура лексикалық анализатор синтаксисі пайдаланылады. (Бұл тіл сөйлемдерінің сыртқы көрінісімен де байқалуы мүмкін).

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

DO5I=1,10….

Бұл сөйлемді түсіну үшін тура емес лексикалық анализатор қажет. Ол былайша топшаланады: “DOS1” идентификатор не кілттік сөз “DO”, бұдан соң белгі – 5, әрі қарай – айнымалы атауы “І”

Мұндай келеңсіздіктер С не С++ сияқты тілдердің компиллорын дайындаушылар да кездеседі.С жәнеС++ тілдерінде қатар комментарийлері “/*…..*/” және “//,,,,” белгілерімен жазылады.

Лексикалық анализ жүргізу барысында “/” символын кездестіріп, алдын ала оның не оператор не қатар комментарий екендігі белгісіз болады.

Жалпы, көп символды лексемалар – анализ үшін оңай болмайды. Сонымен сканер шығысында – атаулардың, айыру белгілерінің және т.с.с ішкі арлық көрінісі. Мысалы: сканер кірісі: AVR:=B+CDE; // комментарий:

Сканер шығысы : 38, -8, 65, -2, 184.

(Егер біз меншіктеу операторын “:=” – 8кодты санмен, қосу амалын –2 санымен, айнымалы атауларын 38, 65 және 184 сандарымен белгілеуге келіссек).

3.Бұдан бөлек сканер түрліше типтегі кестелер құрумен айналысады. Ең алдыменатаулар кестесі. Мұнда ол танылған атауларды – идентификатор, константа, белгілер т.с.с ендіріп отырады.

Кестелермен жұмыс.

Кестемен жұмыс істеу механизмі төмендегілерді қамтамасыз етуі қажет:

-жаңа идентификатор және ол туралы мәліметті жылдам тіркеу;

— мәліметті жылдам табу;