 |
ÍÀÓ×ÍÀß ÁÈÁËÈÎÒÅÊÀ - ÐÅÔÅÐÀÒÛ - Ïîñòðîåíèå ôîðìàëüíîãî ÿçûêà
Ïîñòðîåíèå ôîðìàëüíîãî ÿçûêà
Ïîñòðîåíèå ôîðìàëüíîãî ÿçûêà
L
WHILE( <AB> ) [<FUNCTION([<PAR>, <PAR>, ...])>];
WHILE - âõîäíîé òåðìèíàëüíûé ñèìâîë
<AB > - óñëîâíîå âûðàæåíèå
<FUNCTION> - íåêîòîðàÿ ôóíêöèÿ,
êîòîðàÿ ìîæåò îòñóòñòâîâàòü
<PAR> - ïàðàìåòðû ôóíêöèè, êîòîðûå
òîæå ìîãóò îòñóòñòâîâàòü
Ïðèìåð
ïðàâèëüíîãî ñèíòàêñèñà:
WHILE(A>44<b=56+67)
clrscr();
A>44<b=56+67
- óñëîâíîå
âûðàæåíèå
clrscr() - ôóíêöèÿ, áåç ïàðàìåòðîâ
Ïîäáîð ãðàììàòèêè G[Z] ïî
ÿçûêó L
Ëþáàÿ ãðàììàòèêà, ê ïðèìåðó G[Z], ñîäåðæèò ñëåäóþùèå áàçèñíûå
ýëåìåíòû Vt, Vn,
Z, P, ãäå:
Vt - ñëîâàðü òåðìèíàëüíûõ
ñèìâîëîâ
Vn - ñëîâàðü íåòåðìèíàëüíûõ
ñèìâîëîâ
Z - íà÷àëüíûé íåòåðìèíàëüíûé ñèìâîë
P - ìíîæåñòâî ïðàâèë âûâîäà
G[<îïåðàòîð>]:
1.
<Îïåðàòîð> à while(<AB> ) [<Ôóíêöèÿ>];
2. <AB>à
T|<AB> <
T|<AB> > T|<AB> <= T
| <AB> >= T | <AB> != T
3. <T> à O | T*O |
T**O | T+O | T-O | T/O
4. <O> à (<AB>)
| <IDENT> | <ÖÁÇ>
5. <IDENT> à ÁÖ
6. <ÖÁÇ> à Ö{Ö}
7. <Ôóíêöèÿ> à <IDENT>([<PAR>{,<PAR>}])
8. <PAR> à <IDENT> | <ÖÁÇ> | Ω
Êëàññèôèêàöèÿ
G[Z]
G[<îïåðàòîð>]:
1.
<Îïåðàòîð> à while(<AB> ) [<Ôóíêöèÿ>];
2. <AB>à
T|<AB> <
T|<AB> > T|<AB> <= T
| <AB> >= T | <AB> != T
3. <T> à O | T*O |
T**O | T+O | T-O | T/O
4. <O> à (<AB>)
| <IDENT> | <ÖÁÇ>
5. <IDENT> à ÁÁ
6. <ÖÁÇ> à Ö{Ö}
7. <Ôóíêöèÿ> à <IDENT>([<PAR>{,<PAR>}])
8. <PAR> à <IDENT> | <ÖÁÇ> | Ω
Ñäåëàåì
çàìåíó íåòåðìèíàëüíûõ ñèìâîëîâ:
<Îïåðàòîð> à Z
<AB> à A
<T> à
B
<O> à C
<Ôóíêöèÿ > à D
<IDENT> à E
<ÖÁÇ> à
F
<PAR> à G
Ñäåëàåì
çàìåíó òåðìèíàëüíûõ ñèìâîëîâ:
WHILE à a
( à b
) à c
;
à d
Ö à f
Á à g
,
à h
G[Z]:
1. Z à abAc[D]d
2. Aà
B|A<B|A > B|A <= B |A >= B |A != B
3. B
à C | B*C | B**C | B+C | B-C | B/C
4. C
à bAc | E | F
5. E
à
gg
6. F
à
f{f}
7. D à
Eb[G{hG}]c
8. G
à
E | F |
Ω
Âûâîä
: G[Z] - êîíòåêñòíî-ñâîáîäíàÿ
ãðàììàòèêà.
Âûáîð
ìåòîäà àíàëèçà
Õîòÿ îäíîçíà÷íîñòü â îáùåì ñëó÷àå äëÿ
êîíòåêñòíî-çàâèñèìûõ ãðàììàòèê íå äîêàçàíà, åå èñïîëüçîâàíèå âîçìîæíî äëÿ
ãðàììàòèê â êîòîðûõ îäíîçíà÷íîñòü î÷åâèäíà. Íàèáîëåå õîðîøî ðàçðàáîòàííûì
ìåòîäîì àíàëèçà, äëÿ äàííîãî òèïà ãðàììàòèê ÿâëÿåòñÿ, ìåòîä ðåêóðñèâíîãî
ñïóñêà.
Äèàãíîñòèêà
è íåéòðàëèçàöèÿ îøèáîê
Ðàçðàáîòàííûé àëãîðèòì îòíîñèòñÿ ê îáùåèçâåñòíîìó
ìåòîäó ñèíòàêñè÷åñêîãî ðàçáîðà, ïðåäëîæåííûé Àéðîíñîì.
Îñíîâíàÿ èäåÿ ìåòîäà ñîñòîèò â òîì, ÷òî ïî êîíòåêñòó
áåç âîçâðàòà îòáðàñûâàþòñÿ òå ñèìâîëû, êîòîðûå ïðèâåëè â òóïèêîâóþ ñèòóàöèþ è
ðàçáîð ïðîäîëæàåòñÿ.
Ïðèâåäåì ïðèìåð ñèíòàêñè÷åñêîãî ðàçáîðà:
While (A > )
cls();
1. Z à abAc[D]d
2. Aà
B|A<B|A > B|A <= B |A >= B |A != B
3. B
à C | B*C | B**C | B+C | B-C | B/C
4. C
à bAc | E | F
5. E
à
gg
6. F
à
f{f}
7. D à
Eb[G{hG}]c
8. G
à
E | F |
Ω
Z
a b
A c D
B A E
C B g{g} b G c
E C Ω
g E
g
While
( A >
) cls ( ) ;
òóïèêîâàÿ ñèòóàöèÿ
Òåñòèðîâàíèå íà öåïî÷êàõ
Ïðîòîêîë ðàáîòû ñèíòàêñè÷åñêîãî ðàñïîçíàâàòåëÿ
îïåðàòîðà öèêëà while ÿçûêà Ñ.
_____________________________________________________________________
Îáðàáàòûâàåì ñòðî÷êó - While(a>)cls();
Íàéäåí While ïðîâåðêà íà÷àëàñü ñ ñèìâîëà - (
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - a
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - )
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - )
Ïðîâåðêà íà FUNC,
òåêóùèé ñèìâîë - c
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - c
Íàéäåííûå îøèáêè â
ñòðîêå While(a>)cls();
Ïðåäóïðåæäåíèå:
Îòñóòñòâóåò óñëîâèå ()
Íå íàéäåí
èäåíòèôèêàòîð èëè ÖÁÇ
_____________________________________________________________________
Îáðàáàòûâàåì ñòðî÷êó -
while(1<(3*(43+5*(3-4-(4<454)))) ;
Íàéäåí While ïðîâåðêà íà÷àëàñü ñ ñèìâîëà - (
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 1
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 1
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 4
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 4
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 5
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 5
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 4
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 4
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 4
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 4
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 4
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 4
Ïðîâåðêà íà FUNC,
òåêóùèé ñèìâîë - ;
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - ;
Íàéäåííûå îøèáêè â
ñòðîêå while(1<(3*(43+5*(3-4-(4<454)))) ;
Îòñóòñòâóåò )
Ïðåäóïðåæäåíèå:
îòñóòñòâóåò èìÿ ôóíêöèè
_____________________________________________________________________
Îáðàáàòûâàåì ñòðî÷êó - 435 4 whilei>>3t*(ewqw++()*we)
rscr(456,345,rtgrt,345444rtr,,,)
Íàéäåí While ïðîâåðêà íà÷àëàñü ñ ñèìâîëà - i
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - i
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - e
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - +
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - +
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - w
Ïðîâåðêà íà FUNC,
òåêóùèé ñèìâîë - r
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - r
Ïðîâåðêà íà PAR,
òåêóùèé ñèìâîë - 4
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 4
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 4
Ïðîâåðêà íà PAR,
òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà PAR,
òåêóùèé ñèìâîë - r
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - r
Ïðîâåðêà íà PAR,
òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà PAR,
òåêóùèé ñèìâîë - ,
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - ,
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - ,
Íàéäåííûå îøèáêè â
ñòðîêå 435 4 whilei>>3t*(ewqw++()*we) rscr(456,345,rtgrt,345444rtr,,,)
Îòñóòñòâóåò (
Îòñóòñòâóåò )
Ïðåäóïðåæäåíèå:
Îòñóòñòâóåò óñëîâèå ()
Îòñóòñòâóåò ; ïîñëå
ôóíêöèè
Ïàðàìåòð ôóíêöèè íå
ìîæåò íà÷èíàòñÿ ñ öèôðû
Íåèçâåñòíûé
èäåíòèôèêàòîð(û) -
435, 4,
Íå íàéäåí
èäåíòèôèêàòîð èëè ÖÁÇ
Èäåíòèôèêàòîð íå
ìîæåò íà÷èíàòüñÿ ñ öèôðû
Íå íàéäåí èëè íå
âåðíûé ïàðàìåòð
Íåèçâåñòíàÿ
çíàêîâàÿ êîíñòðóêöèÿ
_____________________________________________________________________
Îáðàáàòûâàåì ñòðî÷êó - whiLE(43-(sss<233)fewfew) sd(we)
Íàéäåí While ïðîâåðêà íà÷àëàñü ñ ñèìâîëà - (
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 4
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 4
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - s
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 2
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 2
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - f
Ïðîâåðêà íà FUNC,
òåêóùèé ñèìâîë -
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - s
Ïðîâåðêà íà PAR,
òåêóùèé ñèìâîë - w
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - w
Íàéäåííûå îøèáêè â
ñòðîêå whiLE(43-(sss<233)fewfew) sd(we)
Îòñóòñòâóåò ; ïîñëå
ôóíêöèè
Ïðîïóùåíî / èëè *
èëè ** èëè + èëè -
_____________________________________________________________________
Îáðàáàòûâàåì ñòðî÷êó -
while(i>344>(5445<<2323*343243+2343*(w))>23*232) clrscr(,)
Íàéäåí While ïðîâåðêà íà÷àëàñü ñ ñèìâîëà - (
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - i
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 5
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 5
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 2
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 2
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 2
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 2
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - w
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 2
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 2
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 2
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 2
Ïðîâåðêà íà FUNC,
òåêóùèé ñèìâîë -
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - c
Ïðîâåðêà íà PAR,
òåêóùèé ñèìâîë - ,
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - ,
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - ,
Íàéäåííûå îøèáêè â
ñòðîêå while(i>344>(5445<<2323*343243+2343*(w))>23*232)
clrscr(,)
Îòñóòñòâóåò ; ïîñëå
ôóíêöèè
Íå íàéäåí èëè íå
âåðíûé ïàðàìåòð
Íåèçâåñòíàÿ
çíàêîâàÿ êîíñòðóêöèÿ
_____________________________________________________________________
Îáðàáàòûâàåì ñòðî÷êó -
while(u>r+erhgeerg(e>=rwe+++r+788erwe++)) scr(eee,qee<)
Íàéäåí While ïðîâåðêà íà÷àëàñü ñ ñèìâîëà - (
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - u
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - r
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - e
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - e
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - r
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - r
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 7
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 7
Ïðîâåðêà íà FUNC,
òåêóùèé ñèìâîë -
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - s
Ïðîâåðêà íà PAR,
òåêóùèé ñèìâîë - e
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - e
Ïðîâåðêà íà PAR,
òåêóùèé ñèìâîë - q
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - q
Ïðîâåðêà íà PAR,
òåêóùèé ñèìâîë - <
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - <
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - <
Íàéäåííûå îøèáêè â
ñòðîêå while(u>r+erhgeerg(e>=rwe+++r+788erwe++)) scr(eee,qee<)
Îòñóòñòâóåò ; ïîñëå
ôóíêöèè
Ïðîïóùåíî / èëè *
èëè ** èëè + èëè -
Èäåíòèôèêàòîð íå
ìîæåò íà÷èíàòüñÿ ñ öèôðû
Íå íàéäåí èëè íå
âåðíûé ïàðàìåòð
_____________________________________________________________________
Îáðàáàòûâàåì ñòðî÷êó - while(i>77777u777) clrscr(,...,)
Íàéäåí While ïðîâåðêà íà÷àëàñü ñ ñèìâîëà - (
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - i
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 7
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 7
Ïðîâåðêà íà FUNC,
òåêóùèé ñèìâîë -
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - c
Ïðîâåðêà íà PAR,
òåêóùèé ñèìâîë - ,
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - ,
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - ,
Íàéäåííûå îøèáêè â
ñòðîêå while(i>77777u777) clrscr(,...,)
Îòñóòñòâóåò ; ïîñëå
ôóíêöèè
Èäåíòèôèêàòîð íå
ìîæåò íà÷èíàòüñÿ ñ öèôðû
Íå íàéäåí èëè íå
âåðíûé ïàðàìåòð
_____________________________________________________________________Îáðàáàòûâàåì
ñòðî÷êó - while(4545>>445--- ;
Íàéäåí While ïðîâåðêà íà÷àëàñü ñ ñèìâîëà - (
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 4
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 4
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 4
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 4
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë -
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë -
Ïðîâåðêà íà FUNC,
òåêóùèé ñèìâîë - ;
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - ;
Íàéäåííûå îøèáêè â
ñòðîêå while(4545>>445--- ;
Îòñóòñòâóåò )
Ïðåäóïðåæäåíèå:
îòñóòñòâóåò èìÿ ôóíêöèè
Íå íàéäåí
èäåíòèôèêàòîð èëè ÖÁÇ
Íåèçâåñòíàÿ
çíàêîâàÿ êîíñòðóêöèÿ
_____________________________________________________________________
Îáðàáàòûâàåì ñòðî÷êó - while(i>=0);
Íàéäåí While ïðîâåðêà íà÷àëàñü ñ ñèìâîëà - (
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - i
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 0
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 0
Ïðîâåðêà íà FUNC,
òåêóùèé ñèìâîë - ;
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - ;
Íàéäåííûå îøèáêè â
ñòðîêå while(i>=0);
Ïðåäóïðåæäåíèå:
îòñóòñòâóåò èìÿ ôóíêöèè
_____________________________________________________________________
Îáðàáàòûâàåì ñòðî÷êó - while(i>=0) 544();
Íàéäåí While ïðîâåðêà íà÷àëàñü ñ ñèìâîëà - (
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - i
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 0
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 0
Ïðîâåðêà íà FUNC,
òåêóùèé ñèìâîë -
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 5
Íàéäåííûå îøèáêè â
ñòðîêå while(i>=0) 544();
Îòñóòñòâóåò ; ïîñëå
ôóíêöèè
Ïðåäóïðåæäåíèå:
îòñóòñòâóåò èìÿ ôóíêöèè
_____________________________________________________________________
Îáðàáàòûâàåì ñòðî÷êó - whilei>=0) clrscr();13
Íàéäåí While ïðîâåðêà íà÷àëàñü ñ ñèìâîëà - i
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - i
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 0
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 0
Ïðîâåðêà íà FUNC,
òåêóùèé ñèìâîë -
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - c
Íàéäåííûå îøèáêè â
ñòðîêå whilei>=0) clrscr();13
Îòñóòñòâóåò (
Ïðåäóïðåæäåíèå:
Îòñóòñòâóåò óñëîâèå ()
_____________________________________________________________________
Îáðàáàòûâàåì ñòðî÷êó - whilertt<=243+++344-23!=345 wwqwq;
Íàéäåí While ïðîâåðêà íà÷àëàñü ñ ñèìâîëà - r
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - r
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 2
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 2
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 2
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 2
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - =
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - =
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà FUNC,
òåêóùèé ñèìâîë - w
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - w
Íàéäåííûå îøèáêè â
ñòðîêå whilertt<=243+++344-23!=345 wwqwq;
Îòñóòñòâóåò (
Îòñóòñòâóåò )
Íå íàéäåí
èäåíòèôèêàòîð èëè ÖÁÇ
Íå íàéäåí èëè íå
âåðíûé ïàðàìåòð
_____________________________________________________________________
Îáðàáàòûâàåì ñòðî÷êó - while(dd>>3432*23432)
Íàéäåí While ïðîâåðêà íà÷àëàñü ñ ñèìâîëà - (
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - d
Ïðîâåðêà íà AB
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 3
Ïðîâåðêà íà TERM
Ïðîâåðêà íà O
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë - 2
Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - 2
Ïðîâåðêà íà FUNC,
òåêóùèé ñèìâîë -
Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë -
Íàéäåííûå îøèáêè â
ñòðîêå while(dd>>3432*23432)
Îòñóòñòâóåò ; ïîñëå
ôóíêöèè
Ïðåäóïðåæäåíèå:
îòñóòñòâóåò èìÿ ôóíêöèè
Íåèçâåñòíàÿ
çíàêîâàÿ êîíñòðóêöèÿ
Ëèñòèíã ïðîãðàììû
ÂÀÐÈÀHÒ # 10
Ñèíòàêñè÷åñêèé ðàñïîçíîâàòåëü îïåðàòîðà öèêëà While
Ôàéë ïðîãðàììû
- À513.cpp
ñ
òåêñòîì äëÿ ðàñïîçíîâàíèÿ - test.513
ñ ïðîòîêîëîì ðàáîòû -
error.513
Êàôåäpà : ÀÑÓ
Ãpóïïà : À-513
Ñòóäåíò : Ñòàðèêîâ Äìèòðèé Àëåêñàíäðîâè÷
Ïpåïîäàâàòåëè :
êàíäèäàò òåõíè÷åñêèõ íàóê, äîöåíò
Øîpíèêîâ Þpèé Âëàäèìèpîâè÷,
àññèñòåíò Ïàíîâà Âåpà Áîpèñîâíà
Äàòà : 30 ìàÿ 1997ã.
//----------------------------------------------------------------------------
// Çàãîëîâî÷íûå ôàéëû.
//----------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
#include <dos.h>
#define UP
72 // ñòðåëêà ââåðõ
#define DOWN
80 // ñòðåëêà âíèç
#define ALTX
45 // âûõîä
#define F1 59
#define F2 60
#define F3 61
#define ESC 27
#define FL_NAME "test.513"
#define FL_TEST "error.513"
void open_fl(void); // îòêpûòü ôàéë
void work_space(void); // óïpàâëÿåò pàáî÷åé îáëàñòüþ
void print_page(void); // ïå÷àòàåò òåêñò íà ýêpàí
void help_line(void); // òåêñò ñ ïîìîùüþ íèæíÿÿ ñòpî÷êà
void help(int);
int scan(); // Äåëàåò ðàçáîð ñòðîêè
int my_while(); // îïåpàòîp
int AB(); // àðèôìåòè÷åñêîå âûðàæåíèå
int TERM(); // Òåðì
int O(); // Îïåðàíä
int IDENT(); // Èäåíòèôèêàòîð
int ZBZ(); // Öåëîå áåç çíàêà
int FUNC(); // Ôóíêöèÿ
int PAR(); // Ïàðàìåòð
char TEXT[22][80];
int position; // Íîìåð òåêóùåé ñòðàíèöû
int cur_y=3; // ïîëîæåíèå êópñîpà íà
ýêpàíå
int x,y; // Òåêóùàÿ ïîçèöèÿ ïðè
êîìïèëÿöèè â ñòðî÷êå
int f=0; // Ïðè f=1 îøèáêè äëÿ
ôóíêöèè
char screen[4096]; // Ñîõpàíÿåò ïîëíóþ êîïèþ ýêpàíà
char screen1[4096]; // Ñîõpàíÿåò ÷àñòü ýêpàíà
char *mistake[]={"Îøèáîê íåò!!!", //0
"Îïåpàòîp while íå íàéäåí", //1
"Îòñóòñòâóåò (", //2
"Îòñóòñòâóåò )", //3
"Ïðåäóïðåæäåíèå: Îòñóòñòâóåò óñëîâèå ()", //4
"Îòñóòñòâóåò ; ïîñëå ôóíêöèè", //5
"Ïðåäóïðåæäåíèå: îòñóòñòâóåò èìÿ ôóíêöèè", //6
"Ïðîïóùåíî / èëè * èëè ** èëè + èëè - ", //7
"", //8
"Ïàðàìåòð ôóíêöèè íå ìîæåò íà÷èíàòñÿ ñ öèôðû", //9
"Íåèçâåñòíûé èäåíòèôèêàòîð(û) - ", //10
"Íå íàéäåí èäåíòèôèêàòîð èëè ÖÁÇ", //11
"Èäåíòèôèêàòîð íå ìîæåò íà÷èíàòüñÿ ñ öèôðû", //12
"Íå íàéäåí èëè íå âåðíûé ïàðàìåòð", //13
"Íåèçâåñòíàÿ çíàêîâàÿ êîíñòðóêöèÿ", //14
""}; //15
FILE *fl_t;
int mistake_number[15]; //ìàññèâ õðàíÿùèé êîäû îøèáîê (0 èëè
1)
//ãäå 1-îøèáêà ïðèñóòñâóåò, 0 â ïðîòèâíîì ñëó÷àå
//mistake_number[i], ãäå i íîìåð îøèáêè èç mistake
char strange[100];
//ïåðå÷åíü íåèçâåñòíûõ èäåíòèôèêàòîðîâ
//íàéäåíûõ â ñòðîêå âî âðåìÿ ðàçáîðà
int s=0;
//òåêóùàÿ ïîçèöèÿ â strange
void main()
{
open_fl();
help_line();
print_page();
work_space();
}
//----------------------------------------------------------------------------
// Îòêðûòèå ôàéëà
//----------------------------------------------------------------------------
void open_fl(void)
{
FILE *fl;
int i;
window(1,1,80,25);
textbackground(BLACK);
textcolor(WHITE);
clrscr();
_setcursortype(_NOCURSOR);
if((fl_t=
fopen(FL_TEST,"w"))== NULL) exit(1);
if ((fl =
fopen(FL_NAME,"r"))==NULL)
{
window(18,10,60,16);
textbackground(GREEN);
textcolor(BLACK);
clrscr();
gotoxy(5,2);cprintf(" Íåìîãó íàéòè ôàéë test.513");
gotoxy(5,3);cprintf("Ïðîâåðòå åãî íàëè÷èå íà äèñêå");
gotoxy(5,4);cprintf("
èëè ñîçäàéòå íîâûé");
gotoxy(3,6);cprintf("Äëÿ ïðîäîëæåíèÿ íàæìèòå ëþáóþ êëàâèøó");
getch();
exit(0);
}
for(i=0;i<25;i++)
{
window(40-i,12-i/5,40+i,12+i/5);
textbackground(GREEN);
textcolor(BLACK);
clrscr();
delay(7);
}
textcolor(WHITE);
gotoxy(12,2);cprintf("×òåíèå ñòðîê äëÿ ðàçáîðà");
gotoxy(12,3);cprintf("
ïðîèçâåäåíîå èç");
gotoxy(12,4);cprintf(" ôàéëà ");
gotoxy(12,5);cprintf("
test.513 ");
gotoxy(7,8);cprintf(" Äëÿ ïðîäîëæåíèÿ íàæìèòå ëþáóþ êëàâèøó");
getch();
for (i=0;
i<20; i++)
{
if
(fgets(TEXT[i],78,fl)==NULL) break; //
÷èòàòü ñòðîêó ôàéëà
}
TEXT[i][0]=NULL;
position=0;
//îáíóëåíèå ïîçèöèè ñäâèãà ñòpàíèö
fclose(fl);
}
//----------------------------------------------------------------------------
// Ðàáî÷àÿ îáëàñòü
//----------------------------------------------------------------------------
void work_space(void)
{
char c;
while(1)
{
gotoxy(1,cur_y);
c=getch();
switch(c)
{
case UP:
if(cur_y!=3)
{
cur_y--;
print_page();
}
else
{
if(position!=0)
{
position--;
print_page();
cur_y=3;
}
}
break;
case DOWN:
if(cur_y!=7)
{
cur_y++;
if(TEXT[cur_y+position-3][0]==NULL) cur_y--;
print_page();
}
else
{
cur_y=7;
if(TEXT[cur_y+position-2][0]!=NULL)
{
position++;
print_page();
}
}
break;
case F1:
help(1);
break;
case F2:
help(2);
break;
case F3:
help(3);
break;
case ALTX:
window(1,1,80,25);
textbackground(BLACK);
textcolor(WHITE);
fclose(fl_t);
clrscr();
exit(1);
case ESC:
window(1,1,80,25);
textbackground(BLACK);
textcolor(WHITE);
clrscr();
fclose(fl_t);
exit(1);
}
}
}
//----------------------------------------------------------------------------
// Ðàñïå÷àòûâàåò òåêñò, âûâîäèò íà ýêðàí îøèáêè, íàéäåííûå â
îáðàáàòûâàåìîé
// (òåêóùåé) ñòðîêå
//----------------------------------------------------------------------------
void print_page()
{
int i,xx=10;
puttext(1,1,80,25,screen);
for(i=0;i<=15;i++)
//î÷èñòêà ìàññèâà îøèáîê
mistake_number[i] = 0;
strange[0]=NULL;
s=0;
x=cur_y+position-3;
y=0;
f=0;
fprintf(fl_t,"______________________________________________________________________________\n");
fprintf(fl_t,"Îáðàáàòûâàåì ñòðî÷êó - %s\n",TEXT[x]);
scan(); //âûçûâàåò ñêàíåð äëÿ
ðàçáîðà ñòðîêè
fprintf(fl_t,"\n Íàéäåííûå îøèáêè â ñòðîêå %s\n",TEXT[x]);
for(i=0;i<=15;i++)
if(mistake_number[i] == 1)
{
gotoxy(4,xx++);
printf("%s ",mistake[i]);
fprintf(fl_t,"
%s\n",mistake[i]);
if(i==10 && mistake_number[i] == 1)
{
printf(" %s",strange);
fprintf(fl_t,"
%s\n",strange);
}
}
if(xx ==
10) //îøèáîê íåò, ò.ê.
êîîðäèíàòû ñòðîêè
{ //íåèçìåíèëèñü
(xx)
gotoxy(4,xx++);
printf("%s ",mistake[0]);
}
textbackground(BLACK);
textcolor(WHITE);
if(TEXT[0][0]!=NULL)
{
for
(i=1;i<6;i++)
{
if(TEXT[i-1+position][0]==NULL) break;
gotoxy(1,i+2);
puts(TEXT[i-1+position]);
}
}
gotoxy(1,cur_y);
textbackground(RED);
clreol();
puts(TEXT[cur_y+position-3]);
}
//----------------------------------------------------------------------------
// Âûâîäèò íà ýêðàí òåêñò ñ ïîìîùüþ
//----------------------------------------------------------------------------
void help_line(void)
{
window(1,1,80,25);
textbackground(BLACK);
clrscr();
textbackground(GREEN);
textcolor(BLACK);
gotoxy(1,1);
clreol();
printf(" Borland
C++ Âåpñèÿ òîëüêî äëÿ îïåpàòîpà
WHILE");
gotoxy(1,25);
textbackground(LIGHTCYAN);
clreol();
cprintf(" F1 - Ïîìîùü F2 -
Ãðàììàòèêà F3 - ßçûê îïåðàòîðà ALT+X-Âûõîä");
gotoxy(1,2);
textbackground(LIGHTCYAN);
clreol();
printf("------------------------------- CÎÄÅÐÆÈÌÎÅ ÔÀÉËÀ
-------------------------------");
gotoxy(1,8);
textbackground(LIGHTCYAN);
clreol();
printf("------------------------------ ÑÎÎÁÙÅÍÈß ÎÁ ÎØÈÁÊÀÕ
----------------------------");
gotoxy(1,9);
gettext(1,1,80,25,screen);
gettext(1,9,80,24,screen1);
}
//----------------------------------------------------------------------------
// Âûâîäèò íà ýêðàí òåêñò, â çàâèñèìîñòè îò çíà÷åíèÿ n
//----------------------------------------------------------------------------
void help(int n)
{
char
string[4096];
gettext(1,8,80,22,string);
window(1,8,80,22);
textbackground(CYAN);
textcolor(BLACK);
clrscr();
gotoxy(1,1);
if(n ==1)
{
cprintf("\n
HÎÂÎÑÈÁÈÐÑÊÈÉ ÃÎÑÓÄÀÐÑÒÂÅHHÛÉ ÒÅÕHÈ×ÅÑÊÈÉ ÓHÈÂÅÐÑÈÒÅÒ\n\r\r");
cprintf(" Êópñîâàÿ
pàáîòà ïî äèñöèïëèíå ÑÈÑÒÅÌHÎÅ ÏÐÎÃÐÀÌÌÈÐÎÂÀHÈÅ\n\r\r");
cprintf("
Ñèíòàêñè÷åñêèé pàñïîçíàâàòåëü\n\n\r\r\r");
cprintf("
Èñïîëüçóåìûå êëàâèøè:\r\n");
cprintf(" F1 - äàííûé HELP.\r\n");
cprintf(" F2 - ãpàììàòèêà ÿçûêà.\r\n");
cprintf(" F3 - ÿçûê îïåðàòîðà.\r\n");
cprintf(" Esc - âûõîä èç ïðîãðàììû.\r\n");
cprintf(" Alt-X - âûõîä èç ïðîãðàììû.\r\n\n\n");
cprintf(" (c) 1997
Ñòàðèêîâ Äìèòðèé Àëåêñàíäðîâè÷");
}
if(n == 2)
{
cprintf("\n
ÃÐÀÌÌÀÒÈÊÀ ßÇÛÊÀ\n\n\r\r");
cprintf(" 1. <îïåðàòîð> -> WHILE
(<AB>)[<FUNCTION>];\n\r\r");
cprintf(" 2. <AB> -> T|<AB> >T |<AB> <T
|<AB> <=T |<AB> >=T |<AB> !=T\n\r\r\r");
cprintf(" 3. T -> O | T+O | T-O | T*O | T/O |
T**O\n\r\r\r");
cprintf(" 4. O ->(<AB>) | <IDENT> | <ÖÁÇ>\n\r\r\r");
cprintf(" 5. <IDENT> -> ÁÁ\r\r\r\r\n");
cprintf(" 6. <ÖÁÇ> -> Ö{Ö}\r\n");
cprintf(" 7. <FUNCTION> ->
<IDENT>([<PAR>{,<PAR>}])\r\n");
cprintf(" 8. <PAR> -> <IDENT> | <ÖÁÇ>
\r\n");
}
if(n == 3)
{
cprintf("\n ßÇÛÊ
ÎÏÅÐÀÒÎÐÀ\n\n\n\r\r");
cprintf(" WHILE(AB)
[FUNCTION([PAR,PAR,...])];\r\n\n");
cprintf(" AB - Âûðàæåíèå \r\n");
cprintf(" FUNCTION - ôóíêöèÿ\r\n");
cprintf(" PAR - ïàðàìåòðû ôóíêöèè, ìîãóò áûòü öèôðû
èëè òåêñò \r\n");
cprintf("
êîëè÷åñòâî èõ íå îãðàíè÷åíî\r\n\n");
cprintf(" Ïðîáåëû ìåæäó
ñèìâîëàìè íåäîïóñòèìû\r\n\n\n");
}
getch();
puttext(1,8,80,22,string);
window(1,1,80,25);
}
//----------------------------------------------------------------------------
// Ñêàíèðóåò äî ïîÿâëåíèÿ While
//----------------------------------------------------------------------------
int scan()
{
int
k,j,w; //ñ÷åò÷èêè
mistake_number[1]=1;
for(j=0;;j++)
{
if(TEXT[x][j] == NULL) break;
if(TEXT[x][j] == 'W')
{
y=j; //åñëè
íàøëè W èëè w
if(my_while() == 1) break; //òî âûçûâàåì
}
//my_while
if(TEXT[x][j] == 'w')
{
y=j;
if(my_while() == 1) break;
}
if(TEXT[x][j] != ' ')
{
strange[s++]=TEXT[x][j];
mistake_number[10]=1;
}
if(TEXT[x][j] == ' ')
{
strange[s++]=',';
strange[s++]=' ';
}
}
strange[s]=NULL;
return(1);
}
//----------------------------------------------------------------------------
// Îáðàáàòûâàåò While è âûçûâàåò îáðàáîòêó ôóíêöèé
//----------------------------------------------------------------------------
int my_while()
{
char str[10];
int
k,j,w;
//ñ÷åò÷èêè
for(w=0;w<5;w++)
{
if(TEXT[x][y] == NULL) break;
str[w]=toupper(TEXT[x][y++]); //Toupper - ïåðåâîäèò
}
//âñå áóêâû â çàãëàâíûå
str[w]=NULL;
if(strcmp(str,"WHILE") == 0) //Åñëè While íàéäåí òî ïðîèçâîäèì
{ //
äàëüíåéøèé ðàçáîð
fprintf(fl_t,"Íàéäåí While ïðîâåðêà íà÷àëàñü ñ ñèìâîëà -
%c\n",TEXT[x][y]);
if(TEXT[x][y] != '(') mistake_number[2]=1;
else y++;
AB();
if(TEXT[x][y] != ')') mistake_number[3]=1;
y++;
mistake_number[1]=0;
FUNC();
return(1);
}
else
return(0);
}
//----------------------------------------------------------------------------
// Îáðàáîòêà âûðàæåíèÿ
//----------------------------------------------------------------------------
int AB()
{
char
signal[4]="><!=";
int z;
fprintf(fl_t,"Ïðîâåðêà íà AB\n");
TERM();
if(TEXT[x][y]
== '<')
{
y++;
if(TEXT[x][y] == '=') y++;
for(z=0;z<4;z++)
if(TEXT[x][y] == signal[z])
//Åñëè ñëèøêîì
{ //ñëîæíàÿ çíàêîâàÿ
mistake_number[14]=1; //êîíñòðóêöèÿ
y++; //òî îøèáêà
z=0;
}
AB();
return(1);
}
if(TEXT[x][y]
== '>')
{
y++;
if(TEXT[x][y] == '=') y++;
for(z=0;z<4;z++)
if(TEXT[x][y] == signal[z])
{
mistake_number[14]=1;
y++;
z=0;
}
AB();
return(1);
}
if(TEXT[x][y]
== '=')
{
y++;
if(TEXT[x][y] == '=')
{
y++;
}
for(z=0;z<4;z++)
if(TEXT[x][y] == signal[z])
{
mistake_number[14]=1;
y++;
z=0;
}
AB();
return(1);
}
if(TEXT[x][y] == '!')
{
y++;
for(z=0;z<3;z++)
if(TEXT[x][y] == signal[z])
{
mistake_number[14]=1;
y++;
z=0;
}
if(TEXT[x][y+1] == '=')
{
y++;
}
AB();
return(1);
}
if(TEXT[x][y]
== NULL) return(1);
return(1);
}
//----------------------------------------------------------------------------
// Îáðàáîòêà òåðìà
//----------------------------------------------------------------------------
int TERM()
{
fprintf(fl_t,"Ïðîâåðêà íà TERM\n");
O();
if(TEXT[x][y]
== '/')
{
y++;
TERM();
}
else
if(TEXT[x][y] == '*')
{
y++;
if(TEXT[x][y] == '*') y++;
TERM();
}
else
if(TEXT[x][y] =='+')
{
y++;
if(TEXT[x][y] == '+' && TEXT[x][y+1] == ')' )
{ //âîçìîæíà
îáðàáîòêà âûðàæåíèÿ
y++; //òèïà y++
return(0); //èëè y+++e
}
if(TEXT[x][y] == '+'&& TEXT[x][y+1] == '+') y+=2;
TERM();
}
else
if(TEXT[x][y] =='-')
{
y++;
if(TEXT[x][y] == '-' && TEXT[x][y+1] == ')' )
{ //äëÿ y--
y++;
return(0);
}
if(TEXT[x][y] == '-'&& TEXT[x][y+1] == '-') y+=2;
TERM();
}
else
if(TEXT[x][y] ==NULL ) return(1);
else
if(TEXT[x][y] != '+' && TEXT[x][y]!='*' && TEXT[x][y]!=')'
&& TEXT[x][y] != '/' && TEXT[x][y]!='-' && TEXT[x][y]
!= '<' && TEXT[x][y]!='>' && TEXT[x][y]!='!' &&
TEXT[x][y]!=' '&& TEXT[x][y]!='=')
{
mistake_number[7]=1;
AB();
}
return(1);
}
//----------------------------------------------------------------------------
// Îáðàáîòêà îïåðàíäà
//----------------------------------------------------------------------------
int O()
{
fprintf(fl_t,"Ïðîâåðêà
íà O\n");
if(TEXT[x][y]
== '(')
{
y++;
if(TEXT[x][y] == ')')
{
mistake_number[4]=1;
y++;
}
else
{
AB();
if(TEXT[x][y] == '(')
{
AB();
}
if(TEXT[x][y] != ')')
{
mistake_number[3]=1;
y++;
}
else y++;
}
}
else
{
if(IDENT() == 0)
if(ZBZ() == 0)
if(f==0) mistake_number[11]=1;
return(0);
}
return(0);
}
//----------------------------------------------------------------------------
// Îáðàáîòêà èäåíòèôèêàòîðà
//----------------------------------------------------------------------------
int IDENT()
{
fprintf(fl_t,"Ïðîâåðêà íà IDENT, òåêóùèé ñèìâîë -
%c\n",TEXT[x][y]);
if((isalpha(TEXT[x][y])) != NULL)
isdigit(TEXT[x][y]))
else
return(0);
}
//----------------------------------------------------------------------------
// Öåëîå áåç çíàêà
//----------------------------------------------------------------------------
int ZBZ()
{
fprintf(fl_t,"Ïðîâåðêà íà ÖÁÇ,
òåêóùèé ñèìâîë - %c\n",TEXT[x][y]);
if((isdigit(TEXT[x][y])) != NULL)
{
y++;
while(1)
{
if((isalpha(TEXT[x][y])) != NULL)
/*åñëè f=1 òî â ïàðàìåòðå */ return(1);
if((isdigit(TEXT[x][y])) ==
NULL) break;
y++;
}
return(1);
}
else
return(0);
}
//----------------------------------------------------------------------------
// Îáðàáîòêà ôóíêöèè
//----------------------------------------------------------------------------
int FUNC()
{
f=1;
fprintf(fl_t,"Ïðîâåðêà íà FUNC,
òåêóùèé ñèìâîë - %c\n",TEXT[x][y]);
for(;;y++)
if(TEXT[x][y] != ' ') break;
if(IDENT()==0)
mistake_number[6]=1;
if(mistake_number[6] ==0)
if(TEXT[x][y]
=='(')
{
y++;
if(TEXT[x][y] == ')')
{
mistake_number[4]=1;
y++;
}
else
while(6)
{
if(PAR() != 0)
{
if(TEXT[x][y] == ')')
{
y++;
break;
}
if(TEXT[x][y] == ';') break;
if(TEXT[x][y] == ',') y++;
}
else
{
mistake_number[13]=1;
break;
}
}
}
else
{
mistake_number[2]=1;
mistake_number[13]=1;
}
if(mistake_number[13]==1)
{
for(;;y++)
{
if(TEXT[x][y] == NULL)
{
mistake_number[5]=1;
mistake_number[3]=1;
break;
}
if(TEXT[x][y] == ';')
{
mistake_number[3]=1;
break;
}
if(TEXT[x][y] == ')')
{
y++;
break;
}
}
}
if(TEXT[x][y]
!= ';') mistake_number[5]=1;
return(1);
}
//----------------------------------------------------------------------------
// Îáðàáîòêà ïàðàìåòðîâ ôóíêöèè
//----------------------------------------------------------------------------
int PAR()
{
fprintf(fl_t,"Ïðîâåðêà íà PAR,
òåêóùèé ñèìâîë - %c\n",TEXT[x][y]);
if(IDENT() ==
0)
if(ZBZ() == 0)
{
mistake_number[13]=1;
return(0);
}
return(1);
}
Ñïèñîê ëèòåðàòóðû:
1. Ä. Ãðèñ Êîíñòðóèðîâàíèå êîìïèëÿòîðîâ äëÿ öèôðîâûõ âû÷èñëèòåëüíûõ ìàøèí.
Ì., Ìèð, 1975.
2. Ëåáåäåâ Â.Í. Ââåäåíèå â ñèñòåìû ïðîãðàììèðîâàíèÿ. Ì., «Ñòàòèñòèêà»,
1975.
3. Øîðíèêîâ Þ.Â., Øåãàë Á.Ð. Ìåòîäè÷åñêîå ïîñîáèå äëÿ âûïîëíåíèÿ êóðñîâîé
ðàáîòû ïî ñèñòåìíîìó ïðîãðàììèðîâàíèþ. Íîâîñèáèðñê, 1992.
|  | |
|