Ïîñòðîåíèå ôîðìàëüíîãî ÿçûêà L
Ïîñòðîåíèå ôîðìàëüíîãî ÿçûêà 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],
ñîäåðæèò ñëåäóþùèå áàçèñíûå
ýëåìåíòû 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[<îïåðàòîð>]:
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)
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)
mistake_number[12]=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)
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.
|