Чикиш дарахтини куриш
Бошлангич берилганлар.
Чикиш дарахтини куришни дастурий реализациясини амалга ошириш учун кирувчи дастур матнини лексик тахлилини бажарувчи, лексема кодлари жадвалини ташкил этувчи ва дастур матнини синтаксис тахлил килувчи дастурни ёзиш талаб килинади. Кирувчи тил матни белгили файл куринишида берилади. Дастур кирувчи матндаги учрайдиган хатоликлар хакида маълумот бериши керак.
Синтаксис тахлилчи
Бошлангич грамматика:
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) 2 жадвалда келтирилган. 3 жадвалда эса грамматиканинг барча нотерминал белгиларга нисбатан энг четки чап ва энг четки унг белгилар тупламининг йигинди тупламлари L(U), R(U) келтирилган.
2 жадвал
U
|
L(U)
|
R(U)
|
T
|
(, a, c
|
), a, c
|
E
|
E, T
|
T
|
H
|
(, E
|
E, )
|
D
|
not, H
|
D, H
|
C
|
C, D
|
D
|
B
|
B, C
|
C
|
O
|
if, begin, repeat, a
|
endif, E, end, B
|
L
|
L, O
|
O, ;
|
S
|
program
|
end.
|
3 жадвал
U
|
L(U)
|
R(U)
|
T
|
(, a, c
|
), a, c
|
E
|
E, T, (, a, c
|
T, ), a, c
|
H
|
(, E, T, a, c
|
E, ), T, a, c
|
D
|
not, H, (, E, T, a, c
|
D, H, E, ), T, a, c
|
C
|
not, H, (, E, T, a, c
|
D, H, E, ), T, a, c
|
B
|
B, C
|
C, D, H, E, ), T, a, c
|
O
|
if, begin, repeat, a
|
endif, E, end, B
|
L
|
L, O, if, begin, repeat, a
|
O, ;, endif, E, end, B
|
S
|
Program
|
end.
|
Грамматиканинг барча нотерминал белгиларга нисбатан энг четки чап ва энг четки унг терминал белгилар туплами Lt(U), Rt(U) ва грамматиканинг барча нотерминал белгиларга нисбатан энг четки чап ва энг четки унг терминал белгилар тупламининг йигинди тупламлари Lt(U), Rt(U) 4 ва 5 жадвалларда келтирилган.
4 жадвал
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 жадвал
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
#include "MainDialog.h"
#include
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 расм – Чикиш дарахтини куриш натижалари
Дастур ишини ифодаланиши
Синтаксис тахлилчининг дастурий реализацияси
Синтаксис тахлил реализацияси лексик тахлилчининг реализациясига ухшашдир.
"Синтаксис" вкладкасида чикиш дарахти яъни синтаксис тахлил ишининг натижалари чикарилади (6 расм). Ушбу вкладкада яна унинг мантикий иш алгоритмни чикарилади.
6- расм – "Синтаксис" вкладкаси
Худди лексик тахлил хатоликлари каби синтаксис тахлил хатоликлари хакидаги махълумотлар хам чикиши амалга оширилиши керак.
Dastur kodi.
R asmda dastur foydalangan belgi va raqamlarni massivi keltirilgan agar dasturda bundan bosshqa belgilar qatnashsa dastur xato xaqida ma’lumot beradi.
Bu qismida dasturdagi belgilar ni tekshiradi va agar belgilar to’g’ri kelmasi xato xabar chiqaradi aks xolda kiritilgan ma’lumotlarga qaram dasturni to’g’ri taxlil qiladi va dastur ishini bajaradi.
=>
Agar dastur to’g’ri ishlasa yuqoridagi tenglikni ishlab beradi.
Хулоса
Тажриба ишининг бажарилиш жараёнида берилган Паскаль тилининг кисмтуплами учун синтаксис тахлилни амалга оширувчи дастур ишлаб чикилди. Ушбу дастурни ишлаб чикаришиш учун Microsoft Visual Studio .NET 2003 дастурлаш мухитининг кушимча Trolltech Qt v4.0.1.интеграллашган кутубхоналари классларидан фойдаланилди.
Фойдаланилган адабиётлар руйхати
1. Системное программное обеспечение: Учебник для вузов/ А.Ю. Молчанов- СПб.: Питер, 2003.- 396 с.
2. Системное программное обеспечение. Лабораторный практикум/ А.Ю. Молчанов- СПб.: Питер, 2005.- 284 с.
3. Разработка графического интерфейса с помощью библиотеки Qt3/ Дж. Бланшетт, М. Саммерфелд, 2003.
4. http://www.fi.ru/~mill/ Личная страничка А.Ю. Молчанова.
Do'stlaringiz bilan baham: |