Кодиране, Разработка на парсер, Лексикален анализатор, Парсер,

В процедурата TForm1.FormCreate(Sender: TObject) се уточняват функциите за преход на автомати за натискане и изтегляне. Процедурата TForm1.analyze1Click(Sender: TObject) имплементира анализатор и лексер. Процедурата postfix формира списък, който е постфиксна полска нотация на израза, който се оценява, а функцията cntr:byte изчислява стойността на израза от дадения списък.

Разработка на анализатор

При разработването на анализатора е използвана следната схема

лексикален
лексикален

Фигура 1 - Схема на анализатора

разработка

Анализаторът се състои от две части:

- P1 - блок на лексикален анализатор

- P2 - анализатор блок.

Изходният текст, подаден на входа на P1, се подлага на лексикален анализ, а на изхода на P1 се формира списък от токени. Получената последователност от жетони се подава към входа P2. Използвайки списъка с получени токени, анализаторът проверява дали програмата е правилно компилирана и дали има някакви синтактични грешки в изходния текст.

За да се създаде лексикален анализатор, бяха внедрени следните списъчни структури:

Vrb=^VarList; - списък с идентификатори

Lex=^Lexem; - списък с токени

Маг=^Списание; - списък, използван при изграждането на магазин

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

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

Всички лексеми могат да бъдат разделени на запазени лексеми и лексеми-идентификатори (Таблица 2). След като получи изходния текст като вход, лексикалния анализатор получава достъп до всеки ред на свой ред. При анализиране на всеки ред се избират отделни токени и съответните числа се въвеждат в създадения списък. Акотекущият токен не е равен на нито един запазен токен, той е идентификатор (числото, съответстващо на идентификатора, е 35). Лексема от този вид се проверява за дължина, тя не трябва да надвишава 12, както и за това, че името на идентификатора съдържа само букви. Ако всички изисквания са изпълнени, номерът на токена се добавя към списъка. Тъй като номерът, съответстващ на идентификатора, е единица, успоредно с основния списък се създава списък на самите идентификатори. В резултат на работата на лексикалния анализатор на изхода получаваме следната структура на списъка

преводач на граматика на обект Паскал

лексикален

Фигура No2 - схема на структурата на изхода на лексикалния анализатор

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

Работата на анализатора е да анализира граматиката, да намира синтактични грешки и да ги докладва. Ако програмата е компилирана правилно, тогава управлението се прехвърля към интерпретатора, но ако се открият синтактични грешки в текста, програмата не може да бъде изпълнена. Анализаторът изисква функции за преход, които са посочени в процедурата за създаване на формуляр TForm1.FormCreate(Sender: TObject).

Тестване

След това програмата беше стартирана за изпълнение. Резултатът е на фигура 2.

При втория тест въведената програма противоречи на дадения език и лексикалния анализатор генерира грешка (Фигура 6).

При третия тест операторните скоби на цикъла while не бяха затворени във въведения програмен текст и анализаторът генерира грешка.