8.7 ΠΡΠ΅Π½ΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
ΠΡ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π»ΠΈ hoc Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ-ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡΠ°ΠΌΠΈ UNIX, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠ΅Π½ΠΈΡΡ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΡΠΎΡΠΎ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π ΡΠ°Π±Π»ΠΈΡΠ΅, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅ (ΡΠ°Π±Π». 8.1), ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΎΡΠ½Π΅ΡΡΠΈΡΡ ΡΠΊΠ΅ΠΏΡΠΈΡΠ΅ΡΠΊΠΈ, Π½ΠΎ ΠΎΠ½Π° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ "ΡΠ°Π·ΡΠΌΠ½ΠΎΡΡΡ" Π½Π°ΡΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π² Π½Π΅ΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ Π΄Π°Π½Ρ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°Ρ . Π Π°Π±ΠΎΡΠ° Π²Π΅Π»Π°ΡΡ Π½Π° PDP-11/70. ΠΡΠ»ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π΄Π²Π° ΡΠ΅ΡΡΠ°. ΠΠ΅ΡΠ²ΡΠΉ, Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΠΊΠΊΠ΅ΡΠΌΠ°Π½Π½Π° ack(3,3), β Ρ ΠΎΡΠΎΡΠΈΠΉ ΡΠ΅ΡΡ Π΄Π»Ρ ΠΎΡΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ΄Π΅ΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ 2432 Π²ΡΠ·ΠΎΠ²Π°, ΠΏΡΠΈΡΠ΅ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π³Π»ΡΠ±ΠΎΠΊΠΎ Π²Π»ΠΎΠΆΠ΅Π½Ρ.
func ack() {
if ($1 == 0) return ($2+1)
if($2 == 0) return (ack($1 - 1, 1))
return (ack($1 - 1, ack($1, $2 - 1)))
}
ack(3,3)
ΠΡΠΎΡΠΎΠΉ ΡΠ΅ΡΡ β ΡΡΠΎΠΊΡΠ°ΡΠ½ΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΠΈΡΠ΅Π» Π€ΠΈΠ±ΠΎΠ½Π°ΡΡΠΈ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΌΠ΅Π½ΡΡΠΈΠΌΠΈ 1000. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠΌ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ:
proc fib() {
a = 0
b = 1
while (b < $1) {
Ρ = b
b = a+b
a = c
}
}
i = 1
while (i < 100) {
fib(1000)
i = i + 1
}
Π’Π΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΡΡ Π½Π° ΡΠ΅ΡΡΡΠ΅Ρ ΡΠ·ΡΠΊΠ°Ρ : hoc, bc(1), bas (Π΄ΡΠ΅Π²Π½ΠΈΠΉ Π΄ΠΈΠ°Π»Π΅ΠΊΡ ΠΠ΅ΠΉΡΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° PDP-11) ΠΈ Π‘ΠΈ (ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ ΡΠΈΠΏ PDP-11 Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ) .
Π§ΠΈΡΠ»Π°, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π² ΡΠ°Π±Π». 8.1, ΡΠ²Π»ΡΡΡΡΡ ΡΡΠΌΠΌΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ time.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° (3,3) 100*fib(1000) hoc 5.5 5.0 bas 1.3 0.7 bc 39.7 14.9 c <0.1 0.1Π’Π°Π±Π»ΠΈΡΠ° 8.1: ΠΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ Π½Π° PDP-11/70 (Π² ΡΠ΅ΠΊΡΠ½Π΄Π°Ρ )
ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΡΠΏΠΎΡΠΎΠ±ΠΈΡΡ Π‘ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π²Π²Π΅Π΄Ρ ΡΠ»Π°Π³ -p Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΠΈ Π‘ΠΈ ΠΈ ΠΏΡΠΈ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ. ΠΡΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ°ΠΉΠ» makefile Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ:
hoc6: $(OBJS)
ΡΡ $(CFLAGS) $(OBJS) -lm -ΠΎ hoc6
ΡΡΠΎΠ±Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΡ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π»Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ CFLAGS, Π° Π·Π°ΡΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ
$ make clean; make CFLAGS=-p
ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Ρ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΡΡΠ°Π΅ΡΡΡ ΡΠ°ΠΉΠ» mon.out, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠΌ prof.
ΠΠ»Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ hoc6 Π½Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²ΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π€ΠΈΠ±ΠΎΠ½Π°ΡΡΠΈ:
$ hoc6 <fibtest ΠΠ°ΠΏΡΡΠΊ ΡΠ΅ΡΡΠ°
$ prof hoc6 | sed 15q ΠΠ½Π°Π»ΠΈΠ·
name %time cumsec #call ms/call
_pop 15.6 0.85 32182 0.03
_push 14.3 1.63 32182 0.02
mcount 11.3 2.25
csv 10.1 2.80
cret 8.8 3.28
_assign 8.2 3.73 5050 0.09
_eval 8.2 4.18 8218 0.05
_execute 6.0 4.51 3567 0.09
_varpush 5.9 4.83 13268 0.02
_lt 2.7 4.98 1783 0.08
_constpu 2.0 5.09 497 0.22
_add 1.7 5.18 1683 0.05
_getarg 1.5 5.26 1683 0.05
_yyparse 0.6 5.30 3 11.11
$
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²ΡΠΈΠΊΠ°, ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π²Π΅ΡΠΆΠ΅Π½Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ Π²Π°ΡΠΈΠ°ΡΠΈΡΠΌ, ΠΊΠ°ΠΊ ΠΈ ΡΠ΅, ΡΡΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ time, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΠΈΡΠ°ΡΡ Π»ΠΈΡΡ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π½Π°ΡΡΠΎΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, Π° Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π·Π° Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΡ ΠΈΡΡΠΈΠ½Ρ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΌΠΎΡΡ ΠΏΠΎΠ²ΡΡΠΈΡΡ Π±ΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ hoc. ΠΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠ΅ΡΡΡ ΡΠ°ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΠ°ΡΠΈΡΡΡ Π½Π° Π·Π°ΠΏΠΈΡΡ ΠΈ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΡΠ΅ΠΊΠ°. ΠΠ°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ Π΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ Π²ΠΎΠ·ΡΠ°ΡΡΡΡ, Π΅ΡΠ»ΠΈ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΡΠΈΡΡΠ²Π°ΡΡ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ²ΡΠ·ΠΈ csv ΠΈ cret ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ Π‘ΠΈ (ΡΡΠ½ΠΊΡΠΈΡ mcount ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ°ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΅Π΅ -Ρ.). ΠΠ°ΠΌΠ΅Π½Π° Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π° ΠΌΠ°ΠΊΡΠΎΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ Π΄Π°ΡΡ Π·Π°ΠΌΠ΅ΡΠ½ΡΡ ΡΠ°Π·Π½ΠΈΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ code.c, Π·Π°ΠΌΠ΅Π½ΠΈΠ² Π²ΡΠ·ΠΎΠ²Ρ push ΠΈ pop Π½Π° ΠΌΠ°ΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΡΠ΅ΠΊΠΎΠΌ:
#define push(d) *stackp++ = (d)
#define popm() *--stackp = pop() /* ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ Π½ΡΠΆΠ½Π° */
(Π€ΡΠ½ΠΊΡΠΈΡ pop Π²ΡΠ΅-ΡΠ°ΠΊΠΈ Π½ΡΠΆΠ½Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠΎΠ΄Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°ΡΠ΅ΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅Π»ΡΠ·Ρ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π²ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ Π½Π΅ΠΉ.) ΠΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π° 35% Π±ΡΡΡΡΠ΅Π΅; Π²ΡΠ΅ΠΌΡ Π² ΡΠ°Π±Π». 8.1 ΡΠΎΠΊΡΠ°ΡΠ°Π΅ΡΡΡ ΠΎΡ 5.5 Π΄ΠΎ 3.7 Ρ ΠΈ ΠΎΡ 5.0 Π΄ΠΎ 3.1 Ρ.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 8.22Π ΠΌΠ°ΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ push ΠΈ popm Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΡΠΎΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΡΠΉΡΠ΅ ΡΠ°Π·ΡΠΌΠ½ΠΎΡΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ. ΠΠ°ΠΊ Π±Ρ Π²Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡΠΉ Π² Π²Π΅ΡΡΠΈΠΈ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, Π½Π΅ ΡΠ½ΠΈΠΆΠ°Ρ Π±ΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠ°ΠΊΡΠΎΠΊΠΎΠΌΠ°Π½Π΄?
8.8 ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ²ΡΠΈΡΡ Ρ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠΌ ΡΡΠΎΠΉ Π³Π»Π°Π²Ρ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ Π²Π°ΠΆΠ½ΡΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΡΠ·ΡΠΊΠΎΠ² ΠΎΡΠ΅Π½Ρ Π½ΡΠΆΠ½Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΊΠΎΠ½ΡΠ΅Π½ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ·ΡΠΊΠ° (Ρ Π½ΠΈΠΌ Π»Π΅Π³ΠΊΠΎ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ). ΠΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΡΡΠ΅ΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ ΠΏΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ: ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΊ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠ΅ ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π² ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π·Π±ΠΎΡΠ°.
ΠΠΎ-Π²ΡΠΎΡΡΡ , ΠΈ ΡΡΠΎ ΡΠΆΠ΅ ΡΠΈΠ»ΠΎΡΠΎΡΡΠΊΠΈΠΉ Π°ΡΠΏΠ΅ΠΊΡ, ΡΠ΅Π½Π½Π° ΡΠ°ΠΌΠ° ΠΏΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ ΡΠ΅ΡΡ ΠΈΠ΄Π΅Ρ ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠ·ΡΠΊΠ°, Π° Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠ°ΠΊ ΡΠ·ΡΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° (Ρ.Π΅. Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ), Π΄Π΅Π»Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π³Π°ΡΠ°Π½ΡΠΈΡ, ΡΡΠΎ Π½ΠΎΠ²ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Π±ΡΠ΄ΡΡ Ρ ΠΎΡΠΎΡΠΎ ΡΠΎΠ³Π»Π°ΡΠΎΠ²ΡΠ²Π°ΡΡΡΡ Ρ ΡΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ. ΠΠΎΠ΄ "ΡΠ·ΡΠΊΠ°ΠΌΠΈ", ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΎ ΠΈ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π²ΡΠΈΠ΅ΡΡ Π²ΡΡΠ΅ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΡΠ·ΡΠΊΠΈ eqn ΠΈ pick, Π° ΡΠ°ΠΊΠΆΠ΅ yacc, lex, ΠΈ make.
Π Π°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Π·Π΄Π΅ΡΡ ΠΈ Π²ΠΎΠΏΡΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΡΡΠ΅Π΄ΡΡΠ². Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΡΠΎΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ make, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π»ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ Π·Π°Π±ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π½ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊΡΡ-ΡΠΎ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ). ΠΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ Π»ΠΈΡΠ½Π΅ΠΉ ΡΠ°Π±ΠΎΡΡ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΌΠ°ΠΊΡΠΎΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ , Π΄ΠΎΡΡΡΠΏΠ½ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅. ΠΡΠΎΠ²ΠΎΠ΄Ρ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΎΠ½ΠΈ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ, Π²ΡΠ·Π²Π°Π½Π½ΡΠ΅ Π½Π΅ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ Π²Π΅ΡΡΠΈΠΉ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π΅ΡΠ»ΠΈ Π΄Π΅ΠΉΡΡΠ²ΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ make. ΠΠ΅ΡΡΠΌΠ° Π²Π°ΠΆΠ½ΠΎ ΡΠ°Π·Π±ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ°ΠΉΠ»Ρ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ Π½Π΅ Π±ΡΠ»ΠΈ Π²ΠΈΠ΄ΠΈΠΌΡ, Π΅ΡΠ»ΠΈ Π² ΡΡΠΎΠΌ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ.
Π₯ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΈΠ·-Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ° ΠΊΠ½ΠΈΠ³ΠΈ ΠΌΡ ΠΌΠ°Π»ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠ΄Π΅Π»ΠΈΠ»ΠΈ ΡΠ΅ΠΌ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌ UNIX, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ hoc. ΠΠ°ΠΆΠ΄Π°Ρ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, Π΄Π»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ²ΡΠ·ΠΈ; ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ls ΠΈ du, ΡΡΠΎΠ±Ρ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° ΡΠ΅ΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ Π³Π΄Π΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ. ΠΠ° ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΎΡΠ²Π΅ΡΡ Π΄Π°ΡΡ ΡΠ°ΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° Π²ΠΎΠΏΡΠΎΡ: "ΠΠ΄Π΅ ΠΎΠΏΠΈΡΠ°Π½Π° Π΄Π°Π½Π½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ?" ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° grep. "ΠΠ°ΠΊ ΠΌΡ Π²Π½Π΅ΡΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π΄Π°Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ?" ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ idiff. "ΠΠ°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π΅Π»ΠΈΠΊ ΡΠ°ΠΉΠ»?" ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ wc. ΠΠΎΡΠ° Π΄Π΅Π»Π°ΡΡ ΠΊΠΎΠΏΠΈΡ ΡΠ°ΠΉΠ»Π° ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ cp. ΠΡΠΆΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ? ΠΠ°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π² ΡΡΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° make.
Π’Π°ΠΊΠΎΠΉ ΠΎΠ±ΡΠΈΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΠΈΠΏΠΈΡΠ΅Π½ Π΄Π»Ρ ΠΏΠΎΠ²ΡΠ΅Π΄Π½Π΅Π²Π½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ UNIX: ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΡΡΠ΅Π΄ΡΡΠ², ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΠ»ΠΈ ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ½Π°ΡΠ΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π±Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π²ΡΡΡΠ½ΡΡ.
ΠΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΠ³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠΏΡΠ°Π²ΠΊΠ°ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° yacc ΡΠΎΠ·Π΄Π°Π½Π° Π‘. ΠΠΆΠΎΠ½ΡΠΎΠ½ΠΎΠΌ. ΠΠ»Π°ΡΡ ΡΠ·ΡΠΊΠΎΠ², Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ yacc ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°Π·Π±ΠΎΡΠ°, Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ LALR-(1): ΡΠ°Π·Π±ΠΎΡ Π·Π΄Π΅ΡΡ Π²Π΅Π΄Π΅ΡΡΡ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ ΠΈ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π½Π° ΠΎΠ΄Π½Ρ Π»Π΅ΠΊΡΠ΅ΠΌΡ Π²ΠΏΠ΅ΡΠ΅Π΄. ΠΠΎΠ½ΡΡΠΈΠ΅ ΡΠ°Π·Π΄Π΅Π»ΡΠ½ΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΉ Π΄Π»Ρ Π·Π°Π΄Π°Π½ΠΈΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ² ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΡΡΠ΅ΠΉ Π² Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠ΅ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ yacc. ΠΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ Π² ΡΡΠ°ΡΡΠ΅ Π. Π. ΠΡ ΠΎ, Π‘. Π. ΠΠΆΠΎΠ½ΡΠΎΠ½Π° ΠΈ Π. Π. Π£Π»ΡΠΌΠ°Π½Π° "Deterministic parsing of ambiguous grammars" (CACM, August, 1975). Π’Π°ΠΌ ΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π½ΠΎΠ²ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΈ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°Π±Π»ΠΈΡ ΡΠ°Π·Π±ΠΎΡΠ°.
ΠΡΠ½ΠΎΠ²Ρ ΡΠ΅ΠΎΡΠΈΠΈ, Π½Π° Π±Π°Π·Π΅ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΡΡΡΠΎΠ΅Π½Ρ yacc ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡ, ΠΈΠ·Π»Π°Π³Π°ΡΡΡΡ Π² ΠΊΠ½ΠΈΠ³Π΅ Π. Π. ΠΡ ΠΎ ΠΈ Π. Π. Π£Π»ΡΠΌΠ°Π½Π° "Principles of Compiler Design" (Addison Wesley, 1977). Π‘Π°ΠΌΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° yacc ΠΎΠΏΠΈΡΠ°Π½Π° Π² ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΏΠΎ UNIX (ΡΠΎΠΌ 2B). Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΊΠ°Π»ΡΠΊΡΠ»ΡΡΠΎΡ, ΡΡΠ°Π²Π½ΠΈΠΌΡΠΉ Ρ hoc2: Π΄Π»Ρ Π²Π°Ρ ΡΠ°ΠΊΠΎΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ.