Uploaded by abisan_1990

Sintaksis analizator

advertisement
Мавзу: Синтаксис анализаторлар. Эркин-тиллар занжирини аниқлаш
Умумий тушунчалар.
Синтаксис тахлилчини белгиланиши.
Асосий функциялар:
1) асосий синтаксис конструкцияларни топиш ва ажратиш
2) хар бир конструкцияни турини урнатиш ва текшириш.
3) матнни генерация килиниши учун кулай синтаксис конструкция куринишида
тасвирлаш.
Амаллар дарахти.
Синтаксис дарахтда барча чуккилар амалларга мос келади, барглар операндларга мос
келади ва синтаксис дарахт барглари идентификаторлар жадвалининг ёзувлари билан
богликдир.
Тахлил фазасининг кейинги булаги – синтаксис анализатордир (parser).
Бу булакда компилятор тилнинг барча конструкцияларини тулик синтаксис
текширувини бажаради.
Конструкция – маънога эга булган лексемаларниг кандайдир кетма-кетлигидир.
Бу булак констукцияларни ажратиш ва тугрилигини аниклашни бажаради
(лексемларни кетма-кетлиги ва мажбурий ва мажбурий булмаган тушунчаларни
борлигини). Бу булак мос ёзувлар килинадиган хатоликларни топади. Хатоликларни
топилгандан сунг иш ёки давом эттирилади, ёки тухтатилади.
Синтаксик анализатор ишининг кириш маълумотлари булиб лексем кодлари жадвали
хисобланади.
Бошлангич берилганлар.
Чикиш дарахтини куришни дастурий реализациясини амалга ошириш учун кирувчи
дастур матнини лексик тахлилини бажарувчи, лексема кодлари жадвалини ташкил этувчи
ва дастур матнини синтаксис тахлил килувчи дастурни ёзиш талаб килинади. Кирувчи тил
матни белгили файл куринишида берилади. Дастур кирувчи матндаги учрайдиган
хатоликлар хакида маълумот бериши керак.
Синтаксис тахлилчи
Бошлангич грамматика:
G ({ program, end., if, then, else, endif, begin, end, repeat, until, and, or, not, <<, >>, =, <,
>, <>, (, ), -, +, a, c, ;, :=}, {S, L, O, B, C, K, D, H, E, T}, P, S)
S → program L end.
L→O|O;O|L;
O → if B then O else O endif | if B then O endif | begin L end | repeat O until B | a := E
B → B or C | C
C → C and D | D
D → not D | H
H → E < E | E > E | E = E | E <> E | (B) | E << E | E >> E
E→E–T|E+T|T
T → (E) | a | c
Грамматиканинг барча нотерминал белгиларга нисбатан энг четки чап ва энг четки
унг белгилар туплами L(U), R(U) 5.1 жадвалда келтирилган. 5.2 жадвалда эса
грамматиканинг барча нотерминал белгиларга нисбатан энг четки чап ва энг четки унг
белгилар тупламининг йигинди тупламлари L(U), R(U) келтирилган.
5.1 жадвал
U
T
E
L(U)
(, a, c
E, T
R(U)
), a, c
T
H
D
C
B
O
L
S
5.2 жадвал
U
T
E
H
D
C
B
O
L
S
(, E
not, H
C, D
B, C
if, begin, repeat, a
L, O
Program
E, )
D, H
D
C
endif, E, end, B
O, ;
end.
L(U)
(, a, c
E, T, (, a, c
(, E, T, a, c
not, H, (, E, T, a, c
not, H, (, E, T, a, c
B, C
if, begin, repeat, a
L, O, if, begin, repeat, a
Program
R(U)
), a, c
T, ), a, c
E, ), T, a, c
D, H, E, ), T, a, c
D, H, E, ), T, a, c
C, D, H, E, ), T, a, c
endif, E, end, B
O, ;, endif, E, end, B
end.
Грамматиканинг барча нотерминал белгиларга нисбатан энг четки чап ва энг четки
унг терминал белгилар туплами Lt(U), Rt(U) ва грамматиканинг барча нотерминал
белгиларга нисбатан энг четки чап ва энг четки унг терминал белгилар тупламининг
йигинди тупламлари Lt(U), Rt(U) 5.3 ва 5.4 жадвалларда келтирилган.
5.3 жадвал
U
Lt(U)
Rt(U)
T
(, a, c
), a, c
E
-, +
-, +
H
<, >, =, <>, (, <<
<, >, =, <>, ), >>
D
Not
not
C
And
and
B
Or
or
O
if, begin, repeat, a
endif, end, :=, until
L
;
;
S
Program
end.
5.4 жадвал
U
Lt(U)
Rt(U)
T (, a, c
), a, c
E -, +, (,a, c
-, +, ), a, c
H <, >, =, <>, (, <<, -, +, a, c
<, >, =, <>, ), >>, -, +, a, c
D not, <, >, =, <>, (, <<, -, +, a, c
not, <, >, =, <>, ), >>, -, +, a, c
C and, not, <, >, =, <>, (, <<, -, +, a, c
and, not, <, >, =, <>, ), >>, -, +, a, c
B or, and, not, <, >, =, <>, (, <<, -, +, a, c
or, and, not, <, >, =, <>, ), >>, -, +, a, c
O if, begin, repeat, a
endif, end, :=, until, or, and, not, <, >, =,
<>, ), >>, -, +, a, c
L ;, if, begin, repeat, a
;, endif, end, :=, until, or, and, not, <, >, =,
<>, ), >>, -, +, a, c
S Program
end.
Бошлангич грамматика асосида олинган остов грамматика:
G' ({ program, end., if, then, else, endif, begin, end, repeat, until, and, or, not, <<, >>, =, <,
>, <>, (, ), -, +, a, c, ;, :=}, {E}, P, S)
E → program E end.
E→E|E;E|E;
E → if E then E else E endif | if E then E endif | begin E end | repeat E until E | a := E
E → E or E | E
E → E and E | E
E → not E | E
E → E < E | E > E | E = E | E <> E | (B) | E << E | E >> E
E→E–E|E+E|E
E → (E) | a | c
Арифметик ва мантикий амалларни приоритетини аникловчи кавсларни фарклаш
учун асосий грамматикага кушимча нотерминал белги В ни кушамиз, ва у мантикий
ифодаларни белгилайди.
Келтириб чикарилган остов грамматика куйидаги куринишни олади:
G' ({ program, end., if, then, else, endif, begin, end, repeat, until, and, or, not, <<, >>, =, <,
>, <>, (, ), -, +, a, c, ;, :=}, {E, B}, P, S)
E → program E end.
E→E|E;E|E;
E → if B then E else E endif | if B then E endif | begin E end | repeat E until B | a := E
B → B or B | B
B → B and B | B
B → not B | B
B → E < E | E > E | E = E | E <> E | (B) | E << E | E >> E
E→E–E|E+E|E
E → (E) | a | c
Натижалар
Синтаксис тахлилчининг дастурий реализацияси SynAnalyser модули ва SynTab
график модул куринишида берилган. SynAnalyser модул асосий грамматика коидалари
асосида лексик тахлилчидан келиб тушаётган кетма-кет лексемалар тупламини синтаксис
тахлилини утказади. Унинг иш натижаси булиб синтаксис чикиш дарахтини акс эттирувчи
структура хисобланади. Хатолик юз берган холда экранда синтаксис хатолик хакидаги
маълумот ва хато катор кизил рангда чикади. График модуль SynTab чикиш дарахтини
график куриниши учун жавоб беради ва синтаксис тахлилчи томонидан амалга оширилган
харакатлар кетма-кетлиги хакидаги ва уларнинг натижалари хакидаги тулик хисоботни
экранга чикаради.
Куйидаги файлни кайта ишлаш жараёнидаги синтаксис тахлилчи ишини караб
чикамиз:
program
(* Это
комментарий * (* *
*)
begin
c:= c - b +d;
repeat
if a>3 then a
:=3
else i:=0 endif
until i= 0
end
;
end.
Дастур матни
main.cpp
#include <QtGui/QApplication>
#include "MainDialog.h"
#include <QTextCodec>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec::setCodecForTr(QTextCodec::codecForName("CP1251"));
a.setStyle("windowsxp");
MainDialog w;
w.show();
a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));
return a.exec();
}
Чикиш дарахтининг график натижалари 5.5 расмда келтирилган.
5.5 расм – Чикиш дарахтини куриш натижалари
Дастур ишини ифодаланиши
Синтаксис тахлилчининг дастурий реализацияси
Синтаксис тахлил реализацияси лексик тахлилчининг реализациясига ухшашдир.
"Синтаксис" вкладкасида чикиш дарахти яъни синтаксис тахлил ишининг натижалари
чикарилади (5.6 расм). Ушбу вкладкада яна унинг мантикий иш алгоритмни чикарилади.
5.6- расм – "Синтаксис" вкладкаси
Худди лексик тахлил хатоликлари каби синтаксис тахлил хатоликлари хакидаги
махълумотлар хам чикиши амалга оширилиши керак.
Масала бажарилиш жараёнида берилган Паскаль тилининг кисмтуплами учун
синтаксис тахлилни амалга оширувчи дастур ишлаб чикилди. Ушбу дастурни ишлаб
чикаришиш учун Microsoft Visual Studio .NET 2003 дастурлаш мухитининг кушимча
Trolltech Qt v4.0.1.интеграллашган кутубхоналари классларидан фойдаланилди.
Download