Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«UNIX β€” ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ срСда программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 123

Автор ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½ Π‘Ρ€Π°ΠΉΠ°Π½ Уилсон

_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
: для вас Ρ‚Π°ΠΊΠΎΠ΅ сравнСниС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

lex
ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π»ΠΎ написана М. ЛСском. ВСория lex освСщСна Π² ΠΊΠ½ΠΈΠ³Π΅ Ахо ΠΈ Ульмана, Π° сам язык
lex
описан Π² справочном руководствС ΠΏΠΎ UNIX.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

yacc
ΠΈ Π² мСньшСй стСпСни
lex
использовались для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… языковых процСссоров, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ пСрСносимый компилятор Π‘ΠΈ, процСссоры Π½Π° ПаскалС, Π€ΠΎΡ€Ρ‚Ρ€Π°Π½Π΅ 77, Π Π°Ρ‚Ρ„ΠΎΡ€Π΅,
awk
,
be
,
egn
ΠΈ
pick
.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

make
создана Π‘. ЀСльдманом ΠΈ описана Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ "MAKE a program for maintaining computer programs" (Software-Practice & Experience, April, 1979).

Π’ ΠΊΠ½ΠΈΠ³Π΅ Π”. Π‘Π΅Π½Ρ‚Π»ΠΈ "Writing Efficient Programs" (Prentice-Hall, 1982) обсуТдаСтся Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° ускорСния выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. АкцСнт Π² Π½Π΅ΠΉ дСлаСтся Π½Π° созданиС подходящСго Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π° ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, Ссли Π² этом Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ.