Шта је анализа синтаксе?
Анализа синтаксе је друга фаза процеса дизајнирања компајлера у којој се дати улазни низ проверава ради потврде правила и структуре формалне граматике. Анализира синтаксичку структуру и проверава да ли је дати унос у тачној синтакси програмског језика или није.
Анализа синтаксе у процесу дизајнирања компајлера долази након фазе лексичке анализе. Такође је познато као стабло рашчлањивања или дрво синтаксе. Стабло рашчлањивања развијено је уз помоћ унапред дефинисане граматике језика. Анализатор синтаксе такође проверава да ли дати програм испуњава правила која подразумева граматика без контекста. Ако задовољава, парсер тада креира стабло рашчлањивања тог изворног програма. У супротном, приказаће се поруке о грешкама.

У овом упутству ћете научити
- Зашто вам треба Синтак Анализер?
- Важна терминологија анализатора синтаксе
- Зашто нам је потребно рашчлањивање?
- Технике рашчлањивања
- Грешка - Методе опоравка
- Граматика:
- Нотацијске конвенције
- Контекст Бесплатна граматика
- Извођење граматике
- Синтакса у односу на лексички анализатор
- Мане употребе синтаксних анализатора
Зашто вам треба Синтак Анализер?
- Проверите да ли је код граматички важећи
- Синтаксички анализатор вам помаже да примените правила на код
- Помаже вам да се уверите да свака заграда за отварање има одговарајуће стање на затварању
- Свака декларација има тип и тај тип мора постојати
Важна терминологија анализатора синтаксе
Важне терминологије коришћене у процесу анализе синтаксе:
- Реченица: Реченица је група знакова над неком абецедом.
- Лексема: Лексема је синтаксичка јединица најнижег нивоа језика (нпр. Тотал, старт).
- Токен: Токен је само категорија лексема.
- Кључне речи и резервисане речи - То је идентификатор који се користи као фиксни део синтаксе изјаве. То је резервисана реч коју не можете користити као име променљиве или идентификатор.
- Речи буке - Необвезне су речи буке које се убацују у изјаву ради побољшања читљивости реченице.
- Коментари - То је врло важан део документације. Приказује се углавном, / * * / или // Празно (размаци)
- Разграничитељи - То је синтаксички елемент који означава почетак или крај неке синтаксичке јединице. Попут изјаве или израза, „почните“… „завршите“ или {}.
- Скуп знакова - АСЦИИ, Уницоде
- Идентификатори - То је ограничење дужине које вам помаже да смањите читљивост реченице.
- Симболи оператора - + и - изводе две основне рачунске операције.
- Синтаксички елементи језика
Зашто нам је потребно рашчлањивање?
Анализа такође проверава да ли је улазни низ добро обликован, а ако није, одбаците га.
Следе важни задаци које парсер изводи у дизајну компајлера:
- Помаже вам у откривању свих врста синтаксних грешака
- Пронађите положај на којем се догодила грешка
- Јасан и тачан опис грешке.
- Опоравак од грешке да се настави и пронађу даље грешке у коду.
- Не би требало да утиче на компилацију „исправних“ програма.
- Анализа мора одбити неваљане текстове пријављујући синтаксне грешке
Технике рашчлањивања
Технике рашчлањивања су подељене у две различите групе:
- Рашчлањивање одозго,
- Рашчлањивање одоздо према горе
Рашчлањивање одозго према доле:
У конструкцији рашчлањивања одозго према доле дрво за рашчлањивање започиње у корену, а затим наставља према лишћу.
Две врсте рашчлањивања одозго према доле су:
- Предиктивно рашчлањивање:
Предиктивно рашчлањивање може предвидети коју производњу треба користити за замену одређеног улазног низа. Предиктивни рашчлањивач користи тачку гледања унапред која показује према следећим улазним симболима. Враћање уназад није проблем код ове технике рашчлањивања. Познат је као ЛЛ (1) Парсер
- Рекурзивно рашчлањивање спуштања:
Ова техника рашчлањивања рекурзивно рашчлањује улазне податке да би направила стабло прасе. Састоји се од неколико малих функција, по једна за сваки нетерминал у граматици.
Рашчлањивање одоздо према горе:
У рашчлањивању одоздо према горе у дизајну компајлера, израда стабла за рашчлањивање започиње одсуством, а затим се обрађује према свом корену. Такође се назива рашчлањивањем са смањењем смене. Ова врста рашчлањивања у дизајну компајлера креира се уз помоћ неких софтверских алата.
Грешка - Методе опоравка
Уобичајене грешке које се јављају приликом рашчлањивања у системском софтверу
- Лексичко : Име нетачно откуцаног идентификатора
- Синтаксички : неуравнотежена заграда или тачка-зарез који недостаје
- Семантички : некомпатибилно додељивање вредности
- Логично : Бесконачна петља и недостижни код
Анализатор треба да буде у стању да открије и пријави сваку грешку пронађену у програму. Дакле, кад год је дошло до грешке, парсер. Требало би да буде у стању да то обради и настави са рашчлањивањем преосталог уноса. Програм може имати следеће врсте грешака у различитим фазама процеса компајлирања. Постоји пет уобичајених метода опоравка грешака које се могу применити у парсеру
Опоравак режима извода
- У случају да парсер наиђе на грешку, помаже вам да предузмете корективне кораке. Ово омогућава рашчлањивање осталих уноса и стања.
- На пример, додавање тачке са зарезом које недостаје долази у начину опоравка у режиму израза. Међутим, дизајнер рашчлањивања мора бити опрезан док прави ове промене јер једна погрешна корекција може довести до бесконачне петље.
Опоравак у режиму панике
- У случају када парсер наиђе на грешку, овај режим игнорише остатак израза и не обрађује унос из погрешног уноса у разграничник, попут тачке и тачке. Ово је једноставан метод опоравка грешке.
- У овој врсти методе опоравка, парсер одбија улазне симболе један по један све док се не пронађе једна одређена група синхронизујућих токена. Симболи за синхронизацију обично користе граничнике попут или.
Опоравак на нивоу фразе:
- Преводник исправља програм уметањем или брисањем токена. То му омогућава да настави са рашчлањивањем одакле је и био. Изводи корекцију на преосталом улазу. Префикс преосталог уноса може заменити неким низом, што помаже парсеру да настави процес.
Производња грешака
- Опоравак производње грешака проширује граматику језика који генерише погрешне конструкције. Парсер затим врши дијагностику грешке о тој конструкцији.
Глобална корекција:
- Компајлер треба да изврши што мањи број промена док обрађује нетачан улазни низ. С обзиром на нетачне улазне низове а и граматику ц, алгоритми ће тражити стабло рашчлањивања сродног низа б. Попут неких уметања, брисања и модификација направљених од жетона потребних за претварање ан у б је што мање.
Граматика:
Граматика је скуп структурних правила која описују језик. Граматике додељују структуру било којој реченици. Овај термин се такође односи на проучавање ових правила, а ова датотека укључује морфологију, фонологију и синтаксу. Способан је да опише многе, синтаксу програмских језика.
Правила обрасца Граматика
- Симбол који није терминал требао би се појавити лијево од најмање једне продукције
- Симбол циља никада не сме бити приказан десно од :: = било које продукције
- Правило је рекурзивно ако се ЛХС појављује у његовом РХС
Нотацијске конвенције
Симбол ознака конвенција може се означити затварањем елемента у углате заграде. То је произвољан редослед инстанци елемента који се може означити затварањем елемента у заграде након чега следи симбол звездице, {…} *.
То је избор алтернативе која може користити симбол унутар једног правила. По потреби се може приложити заградом ([,]).
Двије врсте нотацијских конвенција су подручје Терминал и Нон-терминал
1. терминали:
- Мала слова у абецеди као што су а, б, ц,
- Симболи оператора као што су +, -, * итд.
- Интерпункцијски симболи као што су заграде, хеш, зарез
- 0, 1,…, 9 цифара
- Низови подебљаног слова попут ид или иф, било чега што представља један терминални симбол
2.Норминали:
- Велика слова као што су А, Б, Ц.
- Мала курзивна имена: израз или нека друга
Контекст Бесплатна граматика
ЦФГ је лево-рекурзивна граматика која има бар једну продукцију тог типа. Правила у граматици без контекста углавном су рекурзивна. Анализатор синтаксе проверава да ли одређени програм задовољава сва правила граматике без контекста или не. Ако се испуни, анализатори синтаксе ових правила могу створити стабло рашчлањивања за тај програм.
expression -> expression -+ termexpression -> expression - termexpression-> termterm -> term * factorterm -> expression/ factorterm -> factor factorfactor -> ( expression )factor -> id
Извођење граматике
Извођење граматике је низ граматичких правила који претвара почетни симбол у низ. Извод доказује да низ припада граматичком језику.
Крајње лево извођење
Када се сентенцијални облик уноса скенира и замени у низу слева удесно, познат је као крајње лево извођење. Реченица облика која је изведена крајње левим извођењем назива се лево-реченица.
Потпуно десно Извођење
Скенирање скретнице удесно и унос замените продукцијским правилима, слијева с десна на лијево, секвенцом. Познато је као најдесније извођење. Реченица облика која је изведена из крајње десног извода позната је као облик деснорнице.
Синтакса у односу на лексички анализатор
Синтак Анализер |
Лексички анализатор |
Анализатор синтаксе углавном се бави рекурзивним конструкцијама језика. |
Лексички анализатор олакшава задатак анализатора синтаксе. |
Анализатор синтаксе ради на токенима у изворном програму да би препознао значајне структуре у програмском језику. |
Лексички анализатор препознаје токен у изворном програму. |
Прима улазе у облику токена од лексичких анализатора. |
Одговорна је за ваљаност токена који је испоручио анализатор синтаксе |
Мане употребе синтаксних анализатора
- Никада неће утврдити да ли је токен валидан или не
- Не помаже вам да утврдите да ли је операција изведена на типу токена важећа или не
- Не можете да одлучите да ли је токен декларисан и иницијализован пре него што се користи
Резиме
- Анализа синтаксе је друга фаза процеса дизајнирања компајлера која долази након лексичке анализе
- Синтаксички анализатор вам помаже да примените правила на код
- Реченица, Лексема, Токен, Кључне речи и резервисане речи, Речи буке, Коментари, Разграничитељи, Скуп знакова, Идентификатори су неки важни појмови који се користе у Анализи синтаксе у конструкцији компајлера
- Парсе проверава да ли је улазни низ добро обликован, а ако није, одбаци га
- Технике рашчлањивања подељене су у две различите групе: Рашчлањивање одозго према доле, Рашчлањивање одоздо према горе
- Лексичке, синтаксичке, семантичке и логичке су неке од уобичајених грешака које се јављају током метода рашчлањивања
- Граматика је скуп структурних правила која описују језик
- Симбол ознака конвенција може се означити затварањем елемента у углате заграде
- ЦФГ је лево-рекурзивна граматика која има бар једну продукцију тог типа
- Извођење граматике је низ граматичких правила који претвара почетни симбол у низ
- Анализатор синтаксе углавном се бави рекурзивним конструкцијама језика док лексички анализатор олакшава задатак анализатора синтаксе у ДБМС-у
- Недостатак методе Синтак анализатора је тај што никада неће утврдити да ли је токен валидан или не