Анализ на синтаксиса: Компилатор отгоре надолу & Типове за разбор отдолу нагоре

Съдържание:

Anonim

Какво е синтаксисен анализ?

Анализът на синтаксиса е втора фаза от процеса на проектиране на компилатора, в която даден входен низ се проверява за потвърждение на правилата и структурата на официалната граматика. Той анализира синтактичната структура и проверява дали даденият вход е в правилния синтаксис на програмния език или не.

Анализът на синтаксиса в процеса на проектиране на компилатор идва след фазата на лексикален анализ. Известно е също като дърво за разбор или дърво на синтаксиса. Дървото за разбор е разработено с помощта на предварително дефинирана граматика на езика. Анализаторът на синтаксиса също така проверява дали дадена програма отговаря на правилата, подразбирани от граматика без контекст. Ако удовлетворява, парсерът тогава създава дървото за синтактичен анализ на тази програма източник. В противен случай ще покаже съобщения за грешка.

Процес на анализатор на синтаксис

В този урок ще научите

  • Защо се нуждаете от Syntax Analyzer?
  • Важна терминология на анализатора на синтаксиса
  • Защо се нуждаем от разбор?
  • Техники за анализиране
  • Грешка - Методи за възстановяване
  • Граматика:
  • Нотационни конвенции
  • Безплатна граматика на контекста
  • Извеждане на граматика
  • Синтаксис срещу лексикален анализатор
  • Недостатъци на използването на анализатори на синтаксис

Защо се нуждаете от Syntax Analyzer?

  • Проверете дали кодът е валиден граматически
  • Синтактичният анализатор ви помага да приложите правила към кода
  • Помага да се уверите, че всяка отваряща скоба има съответстващ баланс на затваряне
  • Всяка декларация има тип и този тип трябва да съществува

Важна терминология на анализатора на синтаксиса

Важни терминологии, използвани в процеса на анализ на синтаксиса:

  • Изречение: Изречението е група от знаци над някаква азбука.
  • Лексема: Лексема е синтактичната единица от най-ниското ниво на даден език (напр. Общо, начало).
  • Токен: Токенът е просто категория лексеми.
  • Ключови думи и запазени думи - Това е идентификатор, който се използва като фиксирана част от синтаксиса на израз. Това е запазена дума, която не можете да използвате като име на променлива или идентификатор.
  • Думи за шум - думите за шум не са задължителни, които се вмъкват в изявление за подобряване на четливостта на изречението.
  • Коментари - Това е много важна част от документацията. Показва се предимно от, / * * / или // празно (интервали)
  • Разделители - Това е синтактичен елемент, който маркира началото или края на някаква синтактична единица. Подобно на изявление или израз, "начало" ... '' край 'или {}.
  • Набор от символи - ASCII, Unicode
  • Идентификатори - Това е ограничение на дължината, което ви помага да намалите четливостта на изречението.
  • Символите на оператора - + и - изпълняват две основни аритметични операции.
  • Синтактични елементи на езика

Защо се нуждаем от разбор?

Анализът също така проверява дали входният низ е добре оформен и ако не, го отхвърлете.

Следват важни задачи, изпълнявани от анализатора в дизайна на компилатора:

  • Помага ви да откриете всички видове грешки в синтаксиса
  • Намерете позицията, при която е възникнала грешка
  • Ясно и точно описание на грешката.
  • Възстановяване след грешка, за да продължите и да намерите допълнителни грешки в кода.
  • Не трябва да влияе на компилацията на "правилните" програми.
  • Анализът трябва да отхвърли невалидни текстове, като докладва синтаксични грешки

Техники за анализиране

Техниките за синтактичен анализ са разделени на две различни групи:

  • Разбор отгоре надолу,
  • Разбор отдолу нагоре

Разбор отгоре надолу:

При синтактичната синтаксична конструкция на синтактичното дърво започва от корена и след това продължава към листата.

Два вида разбор отгоре са:

  1. Предсказуемо анализиране:

Предсказуем анализ може да предскаже коя продукция трябва да се използва за заместване на конкретния входен низ. Сигналът за предсказване използва точка за поглед напред, която сочи към следващите символи за въвеждане. Обратното проследяване не е проблем с тази техника за синтактичен анализ. Той е известен като LL (1) Parser

  1. Рекурсивно анализиране на спускане:

Тази техника на синтактичен разбор рекурсивно анализира входните данни, за да се направи дърво за хващане. Състои се от няколко малки функции, по една за всеки нетерминал в граматиката.

Разбор отдолу нагоре:

При разбор отдолу нагоре в дизайна на компилатора, изграждането на дървото за синтактичен анализ започва с отпуск и след това се обработва към корена си. Нарича се също като разбор с намаляване на смяната. Този тип разбор в дизайна на компилатора се създава с помощта на някои софтуерни инструменти.

Грешка - Методи за възстановяване

Често срещани грешки, възникващи при разбор в системния софтуер

  • Лексикално : Име на неправилно въведен идентификатор
  • Синтактично : небалансирана скоба или липсваща точка и запетая
  • Семантично : несъвместимо присвояване на стойност
  • Логично : Безкраен цикъл и недостижим код

Анализаторът трябва да може да открива и докладва всяка грешка, открита в програмата. Така че, всеки път, когато възникне грешка, парсерът. Той трябва да може да се справи и да продължи да анализира останалия вход. Програмата може да има следните видове грешки на различни етапи на процеса на компилация. Има пет често срещани метода за възстановяване на грешки, които могат да бъдат внедрени в анализатора

Възстановяване на режим на изявление

  • В случай, че парсерът срещне грешка, това ви помага да предприемете коригиращи стъпки. Това позволява на останалите входове и състояния да се анализират напред.
  • Например добавянето на липсваща точка и запетая идва в метод за възстановяване на оператор. Дизайнерът на синтактичен анализ обаче трябва да бъде внимателен, докато прави тези промени, тъй като една грешна корекция може да доведе до безкраен цикъл.

Възстановяване в режим на паника

  • В случая, когато анализаторът срещне грешка, този режим игнорира останалата част от израза и не обработва въвеждане от грешен вход към разделител, като точка с двоеточие. Това е прост метод за възстановяване на грешки.
  • При този тип метод за възстановяване анализаторът отхвърля входните символи един по един, докато не бъде намерена единична обозначена група синхронизиращи маркери. Синхронизиращите символи обикновено използват разделители като или.

Възстановяване на ниво фраза:

  • Компилаторът коригира програмата, като вмъква или изтрива маркери. Това му позволява да продължи да анализира от мястото, където е било. Той извършва корекция на останалия вход. Той може да замени префикса на останалия вход с някакъв низ, което помага на анализатора да продължи процеса.

Производство на грешки

  • Възстановяването при производство на грешки разширява граматиката за езика, който генерира грешни конструкции. След това анализаторът извършва диагностика на грешки за тази конструкция.

Глобална корекция:

  • Компилаторът трябва да направи възможно най-малко промени, докато обработва неправилен входен низ. При грешен входен низ a и граматика c, алгоритмите ще търсят дърво за синтактичен анализ за свързан низ b. Подобно на някои вмъквания, изтривания и модификации, направени от маркери, необходими за трансформиране на един в b, е възможно най-малко.

Граматика:

Граматиката е набор от структурни правила, които описват даден език. Граматиките присвояват структура на всяко изречение. Този термин също се отнася до изучаването на тези правила и този файл включва морфология, фонология и синтаксис. Той е способен да опише много от синтаксиса на програмните езици.

Правила за граматика на формуляра

  • Нетерминалният символ трябва да се появи отляво на поне една продукция
  • Символът за цел никога не трябва да се показва вдясно от :: = на която и да е продукция
  • Правилото е рекурсивно, ако LHS се появява в неговия RHS

Нотационни конвенции

Символът за нотационни конвенции може да бъде посочен чрез заграждане на елемента в квадратни скоби. Това е произволна последователност от екземпляри на елемента, която може да бъде посочена чрез затваряне на елемента в скоби, последвано от звездичка, {…} *.

Това е избор на алтернатива, която може да използва символа в рамките на едно правило. Той може да бъде заграден със скоби ([,]), когато е необходимо.

Два типа нотационни конвенции област Терминал и Нетерминали

1. Терминали:

  • Малки букви в азбуката като a, b, c,
  • Символи на оператора като +, -, * и др.
  • Пунктуационни символи като скоби, хеш, запетая
  • 0, 1,…, 9 цифри
  • Удебелени низове като id или if, каквото и да е, което представлява един терминален символ

2. Нетерминали:

  • Главни букви като A, B, C
  • Курсивни имена с малки букви: изразът или някои

Безплатна граматика на контекста

CFG е ляво-рекурсивна граматика, която има поне една продукция от типа. Правилата в граматика без контекст са главно рекурсивни. Синтаксисният анализатор проверява дали конкретна програма удовлетворява всички правила на безконтекстната граматика или не. Ако тя отговаря, анализаторите на синтаксиса на тези правила могат да създадат дърво за синтактичен анализ за тази програма.

expression -> expression -+ termexpression -> expression - termexpression-> termterm -> term * factorterm -> expression/ factorterm -> factor factorfactor -> ( expression )factor -> id

Извеждане на граматика

Извеждането на граматика е последователност от граматични правила, която трансформира началния символ в низа. Деривация доказва, че низът принадлежи на езика на граматиката.

Най-лявото извеждане

Когато сентенциалната форма на въвеждане се сканира и замени в последователност отляво надясно, тя е известна като най-лявата деривация. Формата на изречение, която се извежда от най-лявата деривация, се нарича лява изречение.

Най-дясното извеждане

Сканиране на най-дясната деривация и подмяна на входа с производствени правила, отдясно наляво, последователност. Известно е като най-дясната деривация. Формата на изречението, която е получена от най-дясната деривация, е известна като дясно-изречение.

Синтаксис срещу лексикален анализатор

Синтаксисен анализатор

Лексикален анализатор

Синтаксисният анализатор се занимава главно с рекурсивни конструкции на езика.

Лексикалният анализатор улеснява задачата на анализатора на синтаксиса.

Синтаксисният анализатор работи върху маркери в изходна програма, за да разпознава значими структури в езика за програмиране.

Лексикалният анализатор разпознава маркера в програма източник.

Той получава входове под формата на символи от лексикални анализатори.

Той е отговорен за валидността на предоставен от

анализатора на синтаксиса

Недостатъци на използването на анализатори на синтаксис

  • Никога няма да определи дали знакът е валиден или не
  • Не ви помага да определите дали операция, извършена върху тип маркер, е валидна или не
  • Не можете да решите, че маркерът е деклариран и инициализиран, преди да бъде използван

Обобщение

  • Синтаксисният анализ е втора фаза от процеса на проектиране на компилатора, която идва след лексикален анализ
  • Синтактичният анализатор ви помага да приложите правила към кода
  • Изречение, Лексема, Жетон, Ключови думи и запазени думи, Шум думи, Коментари, Разделители, Набор от символи, Идентификатори са някои важни термини, използвани в Синтаксисния анализ в конструкцията на компилатора
  • Parse проверява дали входният низ е добре оформен и ако не, го отхвърля
  • Техниките за синтактичен анализ са разделени на две различни групи: Анализиране отгоре надолу, Анализиране отдолу нагоре
  • Лексикални, синтактични, семантични и логически са някои често срещани грешки, възникващи по време на метода на синтактичния анализ
  • Граматиката е набор от структурни правила, които описват даден език
  • Символът за нотационни конвенции може да бъде посочен чрез заграждане на елемента в квадратни скоби
  • CFG е ляво-рекурсивна граматика, която има поне една продукция от типа
  • Извеждането на граматика е последователност от граматични правила, която трансформира началния символ в низа
  • Синтаксисният анализатор се занимава главно с рекурсивни конструкции на езика, докато лексикалният анализатор улеснява задачата на синтактичния анализатор в СУБД
  • Недостатъкът на метода на анализатора Syntax е, че той никога няма да определи дали даден маркер е валиден или не