50 }
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 11.3.1 FIFO-ΡΡΡΠΊΡΡΡΠ° channel.l ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π΄Π°Π½Π½ΡΡ , Π° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 11.3.2 ΡΠ° ΠΆΠ΅ FIFO-ΡΡΡΡΠΊΡΡΡΠ° channel. 1 β Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½ΡΡ . Π‘Π»Π΅Π»ΡΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ FIFO-ΡΡΡΡΠΊΡΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΡΠ²ΡΠ·ΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ ΠΏΡΡΠ°ΠΉΡΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ»Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΎΠ±ΠΎΠΈΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ ! ΠΠΎΡΡΠΎΠΈΠ½ΡΡΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ iostreams -ΠΊΠ»Π°ΡΡΠΎΠ² Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ FIFO-ΡΡΡΡΠΊΡΡΡΠ°ΠΌΠΈ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ iostreams -ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ FIFO-ΡΡΡΡΠΊΡΡΡΠ°ΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΡΡΠΎΠΊΠ΅ΠΠ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ is_open() ΠΊΠ»Π°ΡΡΠ° basic_filebuf, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΎΡΠΊΡΡΡΠ° Π»ΠΈ FIFO-ΡΡΡΡΠΊΡΡΡΠ°. ΠΡΠ»ΠΈ ΠΎΠ½Π° Π½Π΅ ΠΎΡΠΊΡΡΡΠ°, ΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 11.3.2 Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ. ΠΠ΅ΡΠ°Π»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ 11.3.2 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Β«ΠΡΠΎΡΠΈΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ 11.3.2Β».
ΠΡΠΎΡΠΈΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ 11.3.2
ΠΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
programll-3b.ee
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠ· FIFO-ΡΡΡΡΠΊΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΈΠΏΠ° ifstream. ΠΠ»Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΠΈ Π΄Π°Π½Π½ΡΡ ΡΠ΅ΡΠ΅Π· FIFO-ΡΡΡΡΠΊΡΡΡΡ Π·Π΄Π΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ ΡΠΈΠΏΠ° ostream_iterator ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ transform.
Π’ΡΠ΅Π±ΡΠ΅ΠΌΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ
><unistd.h>, <iomanip>, <algorithm>, <fstream.h>, <vector>, <iterator>, <strstream.h>, <stdlib.h>, <sys/wait.h>, <sys/types.h>, <sys/stat.h>, ^<fcntl .h>, <numeric>.
ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ
Ρ++ -ΠΎ programll-3b programll-3b.ΡΡ
; Π‘ΡΠ΅Π΄Π° Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
SuSE Linux 7.1, GCC 2.95.2, Solaris 8, Sun Workshop 6.0.
ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
program11.3a & program11-3b
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ
CΠ½Π°ΡΠ°Π»Π° Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°11.3.1. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°11.3.2 ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Sleep, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΡΠ΅ FIFO-ΠΊΠ»Π°ΡΡΡ
Π£ΠΏΡΠΎΡΡΠΈΡΡ ΠΌΠ΅ΠΆΠΏΡΠΎΡΠ΅ΡΡΠ½ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ (IPC) ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ iostreams-ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ² istream_iterator ΠΈ ostream_iterator, Π½ΠΎ ΠΈ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΠΈ FIFO-ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π² FIFO-ΠΊΠ»Π°ΡΡΠ΅ (Π»ΠΈΡΡΠΈΠ½Π³ 11.23).
// ΠΠΈΡΡΠΈΠ½Π³ 11.23. ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ FIFO-ΠΊΠ»Π°ΡΡΠ°
class fifo{
mutex Mutex;
//.. .
protected:
string Name; public:
fifo &operator<<(fifo &In, int X);
fifo &operator<<(fifo &In, char X);
fifo &operator>>(fifo &Out, float X);
//.. .
};
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠ»Π°ΡΡΠ° fifo Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΡ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ². ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠΊΡΠ°ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π°, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ FIFO-ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Β«ΠΊΠ»Π°ΡΡΠΎΠ²ΡΠΉΒ» ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΡΠ»ΠΎΠ²ΠΈΡ Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ²ΠΎΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅.
ΠΠ°ΡΠΊΠ°ΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ
ΠΠΎΠ΄ ΠΊΠ°ΡΠΊΠ°ΡΠ½ΡΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΊΠ»Π°ΡΡ (ΠΈΠ»ΠΈ ΡΠ΅Π»Π°Π» ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ²), ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ. Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ ΠΎΠ±ΡΠΈΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π·Π°Π΄Π°Ρ, ΠΊΠ°ΡΠΊΠ°ΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΎΠ² Π·Π°Π΄Π°Ρ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΊΠ°ΡΠΊΠ°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ±ΡΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΡΠ΅Π»ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΡΠ°ΡΡ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠ°ΡΠΊΠ°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΠ΄Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° Π·Π°Π΄Π°Ρ, ΡΠΎ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°ΡΡ ΠΎΠ±ΠΎΡΠ΅Π½Π½ΡΠΌΠΈ Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΠΌΠΈ ΠΌΠΈΠ½ΠΈ-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ. .ΠΠ°ΡΠΊΠ°ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ ΡΠ»ΡΠΆΠΈΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Π΄Π»Ρ ΠΌΠΈΠ½ΠΈ-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ½ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΡΠ½Π΄Π° ΠΌ Π΅Π½ΡΠ°Π»ΡΠ½ΡΡ ΡΡΡΡΠΊΡΡΡΡ (ΡΠΊΠ΅Π»Π΅Ρ), ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½Π΅ Π½Π°Π²ΡΠ·ΡΠ²Π°Π» Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π΄Π΅ΡΠ°Π»Π΅ΠΉ. ΠΠ°ΡΠΊΠ°ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ, ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ, Π½Π°ΠΌΠ΅ΡΠ°Π΅Ρ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°ΡΡΡΠΌΠΈ ΠΠ Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ ΡΠ·ΡΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΎΠ±ΡΡΡ ΡΡ Π΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ Π΄Π»Ρ ΡΠ΅Π»ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΡΠ° ΡΡ Π΅ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° Π² Π·Π° Π΄ Π°Π½Π½ΡΠΉ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΠΎΡΠΌΠ°Ρ. Π’Π°ΠΊΠΎΠΉ ΠΊΠ°ΡΠΊΠ°Ρ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΎΠ± Ρ ΠΈΡ ΡΠ°ΡΡΠ΅ΠΉ ΠΠ:
β’Β ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄ΠΎΡΡΠΎΠ²Π΅ΡΠ½ΠΎΡΡΠΈ;
β’Β ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ Π»Π΅ΠΊΡΠ΅ΠΌ;
β’Β ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°Π·Π±ΠΎΡΠ°;
β’Β ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°;
β’Β ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°.
ΠΡΠΈ ΡΠ°ΡΡΠΈ ΠΠ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ, ΡΡΠΎΠ±Ρ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡΡ Π½Π°ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ (Π»ΠΈΡΡΠΈΠ½Π³11.24).
// ΠΠΈΡΡΠΈΠ½Π³ 11.24. ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° language_processor
//Β ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° process_input
class language_processor {
//...
protected:
virtual bool getString(void) = 0;
virtual bool validateString(void) = 0;
virtual bool parseString(void) = 0;
//...
public:
bool process_input(void);
};
bool language_processor::process_input(void) {
getString();
validateString();
parseString();
//.. .
compareTokens();
//.. .
}
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΊΠ»Π°ΡΡ language_processor ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΌ ΠΈ Π±Π°Π·ΠΎΠ²ΡΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΈΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:
virtual bool getString(void) = 0;
virtual bool validateString(void) = 0;
virtual bool parseString(void) = 0;
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ language_processor Π½Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΠ½ ΡΠ»ΡΠΆΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΡΠΎΠΈΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π΅ process_input (). ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΠ»Π°Π½ ΡΠ°Π±ΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠΎΠΈ Ρ ΠΎΠ±ΠΎΠ±ΡΠΈΡ Ρ ΠΊΠ»Π°ΡΡΡ language_processor. ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎ ΠΈ ΠΎΡΠ»ΠΈΡΠ°Π΅Ρ ΠΊΠ°ΡΠΊΠ°ΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΎΡ ΠΊΠ»Π°ΡΡΠΎΠ² Π΄ΡΡΠ³ΠΈΡ ΡΠΈΠΏΠΎΠ². ΠΠ°ΡΠΊΠ°ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ, Π½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ. ΠΠ΄Π½Π°ΠΊΠΎ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ²ΠΎΠ΅ΠΎΠ±ΡΠ°Π·Π½ΠΎΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π΄Π΅ΡΠ°Π»ΠΈ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π·Π°Π΄Π°Π΅ΡΡΡ Π½Π°Π±ΠΎΡΠΎΠΌ ΡΠΈΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ°ΡΠΊΠ°ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ, β Π²Π°ΠΆΠ½ΠΎ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ, ΠΏΡΠΈΡΠ΅ΠΌ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. Π ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΡΠ΅Ρ ΡΠΈΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ Π·Π° ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ Π²ΠΎΠ·Π»Π°Π³Π°Π΅ΡΡΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΠΊΠ»Π°ΡΡ. ΠΠ°ΡΠΊΠ°ΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ β Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ. ΠΠ»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π°Π΄Π»Π΅ΠΆΠ°ΡΠ΅Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Π΅ΠΈΡ ΡΠ°ΡΡΠ΅ΠΉ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠ°. ΠΠ°ΡΠΊΠ°ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ Π½Π°ΠΌΠ΅ΡΠ°Π΅Ρ ΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠ»Π°Π½, Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΡΠΎΡ ΠΏΠ»Π°Π½ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΡΡΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, Β«Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½Π°ΡΒ» ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ process_input (), ΡΠΎΠ±Π»ΡΠ΄Π°Π΅ΡΡΡ Π² ΡΠ°ΠΊΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ .
β’ ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ
β’ ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ ΠΊΠΎ ΠΌ Π°Π½Π΄
β’ ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠ·ΡΠΊΠΎΠ²
β’ ΠΡΠΎΠ³ΡΠ° ΠΌΠΌ Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ-Π΄Π΅ΡΠΈΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
β’ Π£ΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°-ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°
β’ ΠΡΠΎΡΠΎΠΊΠΎΠ»Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ»ΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²
β’ ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ
β’ ΠΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²
ΠΠΎΡΡΠ΅ΠΊΡΠ½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠ°ΡΠΊΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° language_processsor (ΠΏΡΠΈ Π½Π°Π΄Π»Π΅ΠΆΠ°ΡΠ΅ΠΌ Π΅Π³ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ΅) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΠΊΠΎΡΠΈΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
ΠΠΎΠ½ΡΡΠΈΠ΅ ΠΊΠ°ΡΠΊΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΡΠ΅Π΄ΡΡΠ²Π»ΡΡΡΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ°. Π’Π°ΠΊ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Π³Π΅Π½Ρ-Π½ΡΡ ΠΊΠ°ΡΠΊΠ°ΡΠΎΠ² ΠΈ ΠΊΠ°ΡΠΊΠ°ΡΠΎΠ² Β«ΠΊΠ»Π°ΡΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈΒ» ΡΠΈΠΊΡΠΈΡΡΠ΅Ρ Π±Π°Π·ΠΎΠ²ΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° ΠΈ ΡΡ Π΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ Π² ΡΡΠΈΡ ΡΡΡΡΠΊΡΡΡΠ°Ρ . ΠΠ°ΠΉΠΊΠ» ΠΡΠ»Π΄ΡΠΈΠ΄ΠΆ Π² ΡΠ²ΠΎΠ΅ΠΉ ΠΊΠ½ΠΈΠ³Π΅ [51] ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π°Π³Π΅Π½ΡΠ°ΠΌΠΈ.
ΠΠ»Π³ΠΎΡΠΈΡΠΌ: ΡΠΈΠΊΠ» ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π°Π³Π΅Π½ΡΠ°ΠΌΠΈ
Π = ΠΠ