Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
ѓ…Ќ…ђЂ’Ћђ џ‡›ЉЋ‚›• ЏђЋ–…‘‘ЋђЋ‚
(GLP)
ђгЄ®ў®¤бвў® ®ЇҐа в®а
‹Ёбв®ў 17
Њ®бЄў 1994
.
- 2 -
Љ®¬ЁвҐв Ї® ўлб襩 иЄ®«Ґ ¬ЁЁбвҐабвў гЄЁ ђ”
ЊЋ‘ЉЋ‚‘Љ€‰ ѓЋ‘“„Ђђ‘’‚…ЌЌ›‰ €Ќ‘’€’“’ ќ‹…Љ’ђЋЌЌЋ‰ ’…•Ќ€Љ€
’…•Ќ€—…‘Љ€‰ “Ќ€‚…ђ‘€’…’
" “⢥ত о "
Џа®аҐЄв®а Њ€ќ’
____________ — Ї«лЈЁ ћ.Ђ.
"___"________ 1994Ј.
ѓ…Ќ…ђЂ’Ћђ џ‡›ЉЋ‚›• ЏђЋ–…‘‘ЋђЋ‚
(GLP)
ђгЄ®ў®¤бвў® ®ЇҐа в®а
‹Ёбв®ў 17
Ђўв®ал:
1. __________ мЈЁ ‚.”.
"___"________1994 Ј.
2. __________ ’Ё¬®дҐҐў Џ.Ђ.
"___"________1994 Ј.
Њ®бЄў 1994
.
- 3 -
ЂЌЌЋ’Ђ–€џ
ѓҐҐа в®а п§лЄ®ўле Їа®жҐбб®а®ў ЇаҐ¤ § зҐ ¤«п ўв®¬ вЁ§ жЁЁ
Їа®жҐбб а §а Ў®вЄЁ ва б«пв®а®ў а §«Ёзле п§лЄ®ў.
Ћб®ўл¬ ҐЈ® ЇаҐЁ¬гйҐбвў®¬ пў«пҐвбп в®, зв® д®а¬ «м п Ја ¬¬ вЁ-
Є , § ЇЁб п ¬Ґв п§лЄҐ, пў«пҐвбп з бвмо ва б«пв®а . ѓҐҐа в®а
а Ў®в Ґв Ї® ЇаЁжЁЇг ЇаҐЇа®жҐбб®а . ”®а¬ «м п Ја ¬¬ вЁЄ , б Їа®бв ў-
«Ґ®© ў Ґ© ᥬ вЁЄ®© п§лЄҐ ‘€++, ўв®¬ вЁзҐбЄЁ ЇаҐ®Ўа §гҐвбп ЈҐ-
Ґа в®а®¬ ў Їа®Ја ¬¬г п§лЄҐ ‘€++. ‘ЈҐҐаЁа®ў п Їа®Ја ¬¬ ўлЇ®«-
пҐв Ї®«л© бЁв ЄбЁзҐбЄЁ© «Ё§, в Є¦Ґ ᥬ вЁзҐбЄЁҐ ¤Ґ©бвўЁп ў
ᮮ⢥бвўЁЁ б гЄ § л¬Ё дгЄжЁп¬Ё. ‚ § ўЁбЁ¬®бвЁ ®в ўЁ¤ Ја ¬¬ вЁЄЁ Ё
дгЄжЁ© ва б«пв®а ¬®¦Ґв Ўлвм бᥬЎ«Ґа®¬, Є®¬ЇЁ«пв®а®¬, ¬ Єа®Їа®жҐб-
б®а®¬, ᥬ вЁзҐбЄЁ¬ «Ё§ в®а®¬ Ё в.¤.
.
- 4 -
‘Ћ„…ђ†ЂЌ€…
1. ЌЂ‡ЌЂ—…Ќ€… ЏђЋѓђЂЊЊ› 5
2. “‘‹Ћ‚€џ ‚›ЏЋ‹Ќ…Ќ€џ ЏђЋѓђЂЊЊ› 8
3. ‚›ЏЋ‹Ќ…Ќ€… ЏђЋѓђЂЊЊ› 9
3.1. ‡ ЇгбЄ ЈҐҐа в®а ўҐабЁЁ 2.0 9
3.2. ЏаЁ¬Ґа п§лЄ®ў®Ј® Їа®жҐбб®а 11
4. ‘ЋЋЃ™…Ќ€џ ЋЏ…ђЂ’Ћђ“ 17
4.1. ЋиЁЎЄЁ ў Їа®Ја ¬¬Ґ. 17
4.2. ”®а¬ в б®®ЎйҐЁп ® бЁв ЄбЁзҐбЄ®© ®иЁЎЄҐ. 17
.
- 5 -
1. ЌЂ‡ЌЂ—…Ќ€… ЏђЋѓђЂЊЊ›
ѓҐҐа в®а ЇаҐ¤ § зҐ ¤«п ўв®¬ вЁ§ жЁЁ Їа®жҐбб а §а Ў®вЄЁ Ё
®в« ¤ЄЁ Їа®Ја ¬¬ а §Ў®а д®а¬ «мле п§лЄ®ў. Љ в ЄЁ¬ Їа®Ја ¬¬ ¬ а §Ў®а
®в®бпвбп ўбҐ Їа®Ја ¬¬л, ®Ўа Ў влў ойЁҐ Є Є®© «ЁЎ® ⥪бв.
Ќ ўе®¤ ЈҐҐа в®а Ї®¤ Ґвбп ®ЇЁб ЁҐ ва б«пв®а ¬Ґв п§лЄҐ. Ќ
ўл室Ґ ЈҐҐа в®а ва б«пв®а п§лЄҐ Їа®Ја ¬¬Ёа®ў Ёп ‘€ Ё«Ё ‘€++ Ё
Ў®а бЁв ЄбЁзҐбЄЁе вҐбв®ў ¤«п Їа®ўҐаЄЁ нв®Ј® ва б«пв®а .
ѓҐҐа в®а ва б«пв®а®ў ЇаҐ¤бв ў«пҐв б®Ў®© ®¤г Їа®Ја ¬¬г Ё Ў®а
дгЄжЁ©. Џ®б«Ґ ЈҐҐа жЁЁ Ї®«гз Ґ¬ § Ј®«®ў®зл© д ©« п§лЄҐ ‘€ б Ја -
䮬 б®бв®пЁ© Ё д ©« б дгЄжЁҐ©, ᮤҐа¦ йЁ© ўл§®ўл дгЄжЁ© Ї®«м§®ў вҐ-
«п. ’ ЄЁ¬ ®Ўа §®¬, ва б«пв®а ЇаҐ¤бв ў«пҐв б®Ў®© Ў®а дгЄжЁ© п§л-
ЄҐ ‘€ Ё ®¤Ё § Ј®«®ў®зл© д ©«.
ЏаҐ¤« Ј Ґ¬л© ¬Ґв п§лЄ ®ЇЁб Ёп ва б«пв®а®ў - нв® ®Ў®ЎйҐЁҐ Ё ¤®-
Ї®«ҐЁҐ § ЇЁбЁ Ја ¬¬ вЁЄЁ п§лЄ ў ўЁ¤Ґ ¬®¤ЁдЁЄ жЁ© а §«Ёзле д®а¬ Ѓн-
Єгб -Ќ га . „®Ї®«ҐЁҐ § Є«оз Ґвбп ў ў®§¬®¦®бвЁ § ЇЁбЁ ᥬ вЁЄЁ п§л-
Є ў ўЁ¤Ґ ЇаҐ¤«®¦ҐЁ© п§лЄ Їа®Ја ¬¬Ёа®ў Ёп ‘€ Ё ўўҐ¤ҐЁЁ ®ўле д®а¬
®ЇЁб Ёп вҐа¬ЁЁ «мле Ё ҐвҐа¬Ё «мле бЁ¬ў®«®ў.
ЏаЁ ЁбЇ®«м§®ў ЁЁ ЈҐҐа в®а
- я1㢥«ЁзЁў Ґвбп Їа®Ё§ў®¤ЁвҐ«м®бвм ваг¤ ЇаЁ а §а Ў®вЄҐ бЁв ЄбЁ-
я1зҐбЄ®Ј® «Ё§ в®а Ў®«ҐҐ, 祬 ў 16 а §, ЇаЁ а §а Ў®вЄҐ Ї®«®Ј® ва б-
я1«пв®а Ў®«ҐҐ 祬 ў 2 а § ;я0
я1-я0 я1Ґв ¤®Ї®«ЁвҐ«мле ®Ја ЁзҐЁ© вЁЇ Є®вҐЄбв®-бў®Ў®¤®©
я1Ја ¬¬ вЁЄЁ Єа®¬Ґ ®¤®§ з®бвЁ;
я1- бЈҐҐаЁа®ў л© ва б«пв®а Ё¬ҐҐв ўлб®Є®Ґ ЎлбвதҐ©бвўЁҐя0;
я1-я0 я1Ї®«м§®ў ⥫м нЄ®®¬Ёв ўаҐ¬п а §а Ў®вЄҐ бЁв ЄбЁзҐбЄЁе вҐбв®ў;
я1-я0 я1®ЎҐбЇҐзЁў Ґвбп «®Є «Ё§ жЁп ®иЁЎ®Є б в®з®бвмо ¤® ®иЁЎ®з®Ј®
я1бЁ¬ў®« , ўлпў«ҐЁҐ ЁЎ®«м襣® зЁб« ®иЁЎ®Є ЇаЁ Ї®«®¬ Їа®б¬®вॠЁб-
я1室®Ј® д ©« .
ЋЎ« бвм ЇаЁ¬ҐҐЁп ЈҐҐа в®а :
- 6 -
- а §а Ў®вЄ бЁв ЄбЁзҐбЄЁе, ᥬ вЁзҐбЄЁе «Ё§ в®а®ў Ё ва б«п-
в®а®ў Є®вҐЄбв®-бў®Ў®¤ле п§лЄ®ў;
- а §а Ў®вЄ бЁб⥬®Ј® Їа®Ја ¬¬®Ј® ®ЎҐбЇҐзҐЁп, бЁб⥬ ўв®¬ вЁ-
§ жЁЁ Їа®Ја ¬¬Ёа®ў Ёп ( п§лЄ®ў Їа®Ја ¬¬Ёа®ў Ёп, । Єв®а®ў
⥪бв®ў, бᥬЎ«Ґа®ў, ЁвҐаЇаҐв в®а®ў, Є®¬ЇЁ«пв®а®ў, Є®ўҐавҐа®ў,
¬ Єа®Їа®жҐбб®а®ў, Є®¬Ї®®ўйЁЄ®ў, । Єв®а®ў бўп§Ґ©, ®в« ¤зЁЄ®ў,
ЁвҐЈаЁа®ў ле б।, ®ЎкҐ¤ЁпойЁе ўбҐ ўлиҐ ЇҐаҐзЁб«ҐлҐ Є®¬Ї®-
Ґвл );
- а §а Ў®вЄ Єа®бб®ў®Ј® Їа®Ја ¬¬®Ј® ®ЎҐбЇҐзҐЁп (ЏЋ);
- ўв®¬ вЁ§ жЁп а §а Ў®вЄЁ ва б«пв®а®ў ¤«п ‘ЂЏђ;
- ЈҐҐа жЁп бЁв ЄбЁзҐбЄЁ Їа ўЁ«мле вҐбв®ў.
ѓҐҐа в®а ЇаҐ¤ § зҐ ¤«п:
- ўлбиЁе Ё б।Ґ-вҐеЁзҐбЄЁе г祡ле § ўҐ¤ҐЁ©, Ј¤Ґ ЇаҐЇ®¤ Ґвбп
Єгаб "‘Ёб⥬®Ґ Їа®Ја ¬¬Ёа®ў ЁҐ" Ё«Ё Ґ¬г Ї®¤®Ўл©;
- дЁа¬, § Ё¬ ойЁебп а §а Ў®вЄ®© Їа®Ја ¬¬®Ј® ®ЎҐбЇҐзҐЁп;
- ®в¤Ґ«мле Їа®Ја ¬¬Ёбв®ў Ё ЈагЇЇ Їа®Ја ¬¬Ёбв®ў, а Ў®в ойЁе Ї® § -
Є § ¬ ®вҐзҐб⢥ле Ё § агЎҐ¦ле дЁа¬.
ЋЎлз® бЁв ЄбЁзҐбЄЁҐ «Ё§ в®ал а §а Ў влў овбп п§лЄҐ ўлб®-
Є®Ј® га®ўп б ЇаЁ¬ҐҐЁҐ¬ в®Ј® Ё«Ё Ё®Ј® ¬Ґв®¤ а §Ў®а . Ћ¤ Є® ў а §-
®Ґ ўаҐ¬п Ўл« а §а Ў®в ап¤ бЁб⥬ Ї®бв஥Ёп ва б«пв®а®ў (‘Џ’).
Ѓ®«миЁбвў® Ё§ Ёе в Є Ё Ґ Ї®«гзЁ«Ё иЁа®Є®Ј® а бЇа®бва ҐЁп.
Ќ ЁЎ®«ҐҐ Ў«Ё§ЄЁ¬ «®Ј®¬ ЈҐҐа в®а ¬®¦Ґв б«г¦Ёвм Є®¬ЇЁ«пв®а
Є®¬ЇЁ«пв®а®ў YACC. ќв® ЈҐҐа в®а Їа®Ја ¬¬ Ја ¬¬ вЁзҐбЄ®Ј® а §Ў®а , Є®-
в®ал© ЁбЇ®«м§гҐвбп ў а ¬Є е ®ЇҐа жЁ®®© бЁб⥬л UNIX. Џ®а®¦¤ҐлҐ
бЁб⥬®© YACC Їа®жҐбб®ал Ја ¬¬ вЁзҐбЄ®Ј® а §Ў®а ЁбЇ®«м§гов ¬Ґв®¤ а §-
Ў®а бЁ§г ўўҐае, ®б®ў л© Ја ¬¬ вЁЄ е LALR(1). Џ®а®¦¤ҐлҐ Їа®-
жҐбб®ал Ё¬Ґов е®а®иго бЁб⥬㠮Ў а㦥Ёп ®иЁЎ®Є.
ЏаҐ¤« Ј Ґ¬л© ЈҐҐа в®а бЁв ЄбЁзҐбЄЁе «Ё§ в®а®ў Ё ва б«пв®а®ў
®б®ў ¬Ґв®¤Ґ а §Ў®а ᢥаег ўЁ§, Є®в®ал© Ї®§ў®«пҐв б®еа Ёвм ўбо
ЇаҐ¤лбв®аЁо а §Ў®а . Џ®б«Ґ¤ҐҐ ®ЎҐбЇҐзЁў Ґв Ґ в®«мЄ® Ї®ЁбЄ ¬ ЄбЁ¬ «м-
®Ј® зЁб« ®иЁЎ®Є, ® Ё ў®§¬®¦®бвЁ ўв®¬ вЁзҐбЄ®Ј® гбва ҐЁп бЁв Є-
- 7 -
бЁзҐбЄЁе ®иЁЎ®Є. Ља®¬Ґ в®Ј® Ё¬ҐҐвбп ЇаЁжЁЇЁ «м п ў®§¬®¦®бвм Їа®ўҐа-
ЄЁ бЁв ЄбЁзҐбЄ®© Їа ўЁ«м®бвЁ ®в¤Ґ«м®© з бвЁ Ёб室®Ј® ⥪бв б®-
®вўҐвбвўЁҐ бЁв ЄбЁб㠢뤥«Ґ®© Є®бвагЄжЁЁ Ја ¬¬ вЁЄЁ. ќв® Ї®§ў®«пҐв
Їа®ў®¤Ёвм бЁв ЄбЁзҐбЄЁ© «Ё§ Ё§¬ҐҐ®© з б⨠⥪бв ў бЁв ЄбЁзҐб-
ЄЁ ®аЁҐвЁа®ў ле । Єв®а е.
€б室®© Ёд®а¬ жЁҐ© ¤«п ЈҐҐа в®а пў«пҐвбп Ја ¬¬ вЁЄ п§лЄ ,
Є®в®а п ®Ўлз® б«г¦Ёв Ґ®вꥬ«Ґ¬®© з бвмо ®ЇЁб Ёп п§лЄ . ќв Ја ¬¬ -
вЁЄ ЇаЁў®¤Ёвбп Є ®¤®§ 箬㠢Ё¤г, ¤®ЇгбЄ о饬㠯ап¬го «Ґўго ४га-
бЁо, ®Ўлзл¬Ё ¬Ґв®¤ ¬Ё ЇаҐ®Ўа §®ў Ёп Ја ¬¬ вЁЄ. „ «ҐҐ ў Їа ўЁ« Ја ¬-
¬ вЁЄЁ ҐЇ®б।б⢥® ўбв «повбп ўл§®ўл дгЄжЁ©. ЏаЁ ЁбЇ®«м§®ў ЁЁ
YACC Єа®¬Ґ ЇаҐ®Ўа §®ў Ёп Ја ¬¬ вЁЄЁ Ґ®Ўе®¤Ё¬® § вм п§лЄ ®ЇЁб Ёп
бЄ Ґа Ё б ¬®Ј® Ја ¬¬ вЁзҐбЄ®Ј® а §Ў®а . ‚ ЇаҐ¤« Ј Ґ¬®¬ ў аЁ вҐ,
Єа®¬Ґ д®а¬ «м®© Ја ¬¬ вЁЄЁ Ё § Ё© п§лЄ Їа®Ја ¬¬Ёа®ў Ёп ¤«п Є®в®-
а®Ј® Ї®бв ў«пҐвбп ЈҐҐа в®а, § вм ЁзҐЈ® Ґ ¤®.
я1Џ® бў®Ё¬ вҐеЁзҐбЄЁ¬ е а ЄвҐаЁбвЁЄ ¬, ЇҐаҐзЁб«Ґл¬ ў а §¤Ґ«Ґ ЈҐ-
я1Ґа в®а Ґ гбвгЇ Ґв, Ї® ҐЄ®в®ал¬ ЇаҐў®б室Ёв «®ЈЁзлҐ Їа®Ја ¬¬-
я1лҐ Їа®¤гЄвл. Ћ Ў®«ҐҐ Їа®бв ў ®Ўа 饨Ё, ® ЇаЁЈ®¤Ґ ¤«п ўбҐЈ® ¬®-
я1¦Ґбвў Є®вҐЄбв®-бў®Ў®¤ле п§лЄ®ў.я0
„ л© ЈҐҐа в®а пў«пҐвбп а биЁапҐ¬л¬ Їа®¤гЄв®¬. …Ј® ¤ «мҐ©иҐҐ
а §ўЁвЁҐ Ўг¤Ґв Їа®ў®¤Ёвбп ў б«Ґ¤гойЁе Їа ў«ҐЁпе.
- ЋЎҐбЇҐзҐЁҐ ўв®¬ вЁзҐбЄ®Ј® ЇаЁўҐ¤ҐЁп Ја ¬¬ вЁЄЁ Є ®¤®§ з®-
¬г ўЁ¤г.
- ђ §а Ў®вЄ бЁв ЄбЁзҐбЄЁ ®аЁҐвЁа®ў ®Ј® । Єв®а ¤«п ўў®¤
Їа®Ја ¬¬ ¬Ґв п§лЄҐ.
- ЋЎҐбЇҐзҐЁҐ ўв®¬ вЁзҐбЄ®© ЈҐҐа жЁЁ бЁв ЄбЁзҐбЄЁ-®аЁҐвЁа®-
ў ле । Єв®а®ў ¤«п а §а Ў влў Ґ¬ле п§лЄ®ў.
- ѓҐҐа жЁп ᥬ вЁзҐбЄЁе «Ё§ в®а®ў Ё вҐбв®ў Їа®ўҐаЄЁ Ґ в®«м-
Є® бЁв ЄбЁб , ® Ё ᥬ вЁЄЁ.
- ЋЎҐбЇҐзҐЁҐ д®а¬ «м®Ј® ®ЇЁб Ёп ᥬ вЁЄЁ п§лЄ®ў Ё ЇаҐ¤¬Ґв®©
®Ў« бвЁ ¤«п ЈҐҐа жЁЁ ЇаЁЄ« ¤ле Їа®Ја ¬¬.
.
- 8 -
2. “‘‹Ћ‚€џ ‚›ЏЋ‹Ќ…Ќ€џ ЏђЋѓђЂЊЊ›
Џа®Ја ¬¬®Ґ ®ЎҐбЇҐзҐЁҐ а §а Ў®в ® п§лЄҐ ‘€ ў ®ЇҐа жЁ®®©
б।Ґ „Ћ‘ ЏЉ IBM PC/AT 286/386. Ћ¤ Є® Ґв ЇаҐЇпвбвўЁ© ¤«п ЇҐаҐ®б
ҐЈ® ў ¤агЈЁҐ ®ЇҐа жЁ®лҐ бЁбвҐ¬л Ё ЏЉ, Ё¬ҐойЁҐ бв ¤ авл© Є®¬ЇЁ«пв®а
п§лЄ ‘€. ‘«Ґ¤гҐв ®в¬ҐвЁвм, зв® ЈҐҐа жЁп Їа®Ја ¬¬ бЁв ЄбЁзҐбЄ®Ј®
«Ё§ ¬®¦Ґв Ўлвм ўлЇ®«Ґ ЏЉ б ®ЎкҐ¬®¬ ®ЇҐа вЁў®© Ї ¬пвЁ 1ЊЎ.
ђҐ§г«мвЁагойЁ© Є®¤ Ї®б«Ґ ва б«пжЁЁ Ё¬ҐҐв ҐЎ®«ми®© ®ЎкҐ¬ Ё Ґ вॡгҐв
Ї ¬пвЁ бўлиҐ 1ЊЎ.
.
- 9 -
3. ‚›ЏЋ‹Ќ…Ќ€… ЏђЋѓђЂЊЊ›
3.1. ‡ ЇгбЄ ЈҐҐа в®а ўҐабЁЁ 2.0
‡ ЇгбЄ Їа®Ё§ў®¤Ёвбп Ё§ Є®¬ ¤®© бва®ЄЁ б«Ґ¤гойЁ¬ ®Ўа §®¬
gener2 <list_of_options> <name of source file>
€¬п Їа®Ја ¬¬л gener2,
‘ЇЁб®Є Ґ®Ўп§ ⥫мле ®ЇжЁ© ᮤҐа¦Ёв ®ЇжЁЁ:
[-d <directory>] - Їгвм ¤® ¤ЁаҐЄв®аЁп б Ёб室묨 д ©« ¬Ё
[-s <file_name>] - ўл室®© д ©« б гЇ Є®ў ®© ᥬ вЁЄ®©
[-l <file_name>] - ўл室®© д ©« ¤«п ўлў®¤ Їа®¬Ґ¦гв®зле ¤ ле
ў Їа®жҐбᥠва б«пжЁЁ. Љ Ё¬ ®в®бпвбп ®иЁЎ-
ЄЁ Ё бва®ЄЁ Ёб室®© Їа®Ја ¬¬л ¬Ґв п§лЄҐ
[-o <file_name>] - ўл室®© д ©«, ᮤҐа¦ йЁ© ¤ лҐ ¤«п бЁв ЄбЁ-
зҐбЄ®Ј® «Ё§ п§лЄҐ ‘€++
[-v ] - а §аҐи Ґв ўлў®¤ Ёб室®Ј® ⥪бв ў ўле®а¤®©
Ї®в®Є
[+scr ] - а §аҐи Ґв ўлў®¤ ўл室®Ј® Ї®в®Є б ®иЁЎЄ ¬Ё Ё
Ёбе®¤л¬ вҐЄб⮬ нЄа
<name of source file> - ўе®¤®© д ©« б Ёб室®© Їа®Ја ¬¬®© ва б-
«пв®а ¬Ґв п§лЄҐ.
Ќ ЇаЁ¬Ґа, ¤«п Є®¬ ¤®© бва®ЄЁ
gener2 meta2
Ї® 㬮«з Ёо Ё¬Ґ д ©«®ў Ўг¤гв б«Ґ¤гойЁҐ
meta2.grm - Ёбе®¤л© д ©«
- 10 -
meta2.sem - бЈҐҐаЁа®ў л© д ©« б ᥬ вЁЄ®© (-s)
meta2.cpp - бЈҐҐаЁа®ў л© д ©« б бЁв ЄбЁб®¬ (-o)
meta2.log - ўл室®© д ©« б Ёд®а¬ жЁҐ© ® Їа®жҐбᥠЈҐҐа жЁЁ (-l)
„ п Є®¬ ¤ нЄўЁў «Ґв б«Ґ¤го饩.
gener2 meta2.grm -s meta2.sem -o meta2.cpp -l meta2.log
‚ १г«мв вҐ а Ў®вл ЈҐҐа в®а Ї®«гзЁ¬ ¤ў ®в¤Ґ«м® ва б«Ёа㥬ле
д ©« meta2.sem Ё meta2.cpp. ЏаЁзҐ¬ ¤«п ва б«пжЁЁ ᥬ вЁЄЁ Ґ®Ўе®¤Ё-
¬®, зв®Ўл ўбҐ Ј«®Ў «млҐ ЇҐаҐ¬ҐлҐ Ё Їа®в®вЁЇл дгЄжЁ© , ЁбЇ®«м§гҐ¬лҐ
ў дгЄжЁпе Ї®«м§®ў ⥫п, Ўл«Ё ®ЇЁб л ў д ©«Ґ б Ё¬ҐҐ¬
< з «мл© бЁ¬ў®« Ја ¬¬ вЁЄЁ>.h
„«п Ї®¤¤Ґа¦ЄЁ Їа®жҐбб а §Ў®а ЁбЇ®«м§говбп ¤ўҐ дгЄжЁЁ:
int fparser(char *name_file, struct syntax *name)
int fparser(char *string, struct syntax *name)
ЏҐаў п дгЄжЁп бзЁв Ґв ўе®¤®© «Ґв®© д ©« б Ё¬ҐҐ¬ name_file,
ўв®а п бва®Єг б Ё¬ҐҐ¬ string.
”гЄжЁЁ ў®§ўа й ов иҐбвм § 票©:
0 - ўбҐ ў Ї®ап¤ЄҐ
1 - ” ©« Ґ бгйҐбвўгҐв
2 - ” ©« Їгбв
3 - ЌҐ¤®бв в®з® ®ЇҐа вЁў®© Ї ¬пвЁ
4 - бЁв ЄбЁзҐбЄ п ®иЁЎЄ
5 - ” ©« Їа®б¬®ваҐ, а §Ў®а ҐйҐ Ґ ®Є®зҐ
‚в®а®© Ї а ¬Ґва - &< з «мл© бЁ¬ў®« Ја ¬¬ вЁЄЁ>
ЏаЁ¬Ґа ®Ўа йҐЁп Ё§ Ј« ў®© Їа®Ја ¬¬л.
#include "syntax.h"
extern struct syntax gram;
char log_File[MAXIDENT]; // 㦮 Їа®ЁЁжЁ«Ё§Ёа®ў вм
if ((outfile = fopen(log_File,"w")) == NULL)
{print_error(30);exit(0);};
gram.outfile = outfile;
fparser(filegrm,&gram));
- 11 -
gram - з «мл© бЁ¬ў®« ў 襩 Ја ¬¬ вЁЄЁ.
‚ Їа®жҐббҐ а Ў®вл Ї®«м§®ў вҐ«м Ё¬ҐҐв ¤®бвгЇ Є б«Ґ¤гойЁ¬ н«Ґ¬Ґв ¬
бвагЄвгал ¤ ле.
struct syntax {
FILE *outfile; // ўл室®© Ї®в®Є, Єг¤
// ўлў®¤Ёвбп Ёбе®¤л© вҐЄбв
NULL - ўл室®Ј® Ї®в®Є Ґв
char * tape; // ўе®¤ п «Ґв
// ¤«п parser а ў NULL
// Ё«Ё ᮤҐа¦Ёв ®иЁЎ®зго бва®Єг
int number; // ®¬Ґа ⥪г饩 бва®ЄЁ
// ¤«п parser а ў 0
char * current_symbol; // гЄ § ⥫м
// ⥪гйЁ© бЁ¬ў®«
char * token; // ⥪гй п «ҐЄбҐ¬
char scr; // ЇаЁ§ Є ЇҐз вЁ
// 0 - ЇҐз вЁ нЄа Ґв
char sem; // ЇаЁ§ Є != 0 ўлЇ®«пҐвбп
// в®«мЄ® бЁв ЄбЁзҐбЄЁ© «Ё§
int (*func)(int); // дгЄжЁп ®Ўа Ў®вЄЁ ®иЁЎ®Є
// NULL - Ґв дгЄжЁЁ
};
3.2. ЏаЁ¬Ґа п§лЄ®ў®Ј® Їа®жҐбб®а
ђ бᬮваЁ¬ ЇаЁ¬Ґа Їа®Ја ¬¬л ¬Ґв п§лЄҐ, ®бгйҐбвў«по饩 а бзҐв
ўла ¦ҐЁ©.
‚뤥«Ё¬ Ја ¬¬ вЁЄг ¤«п Їа®ЇгбЄ Їа®ЎҐ«мл© бЁ¬ў®«®ў Ё ЇЁ-
襬 «ҐЄбЁзҐбЄЁ© «Ё§ в®а ¬Ґв п§лЄҐ (д ©« lex.grm).
- 12 -
<lex> ::= <* < Ў®а_⥪бв®ў> *>
< Ў®а_⥪бв®ў>
::= <* <⥪бв> *> '='
#{ int a;
printf(" %s = ", string);
if ( (a=parser(string,&f_expr)) != 0)
return a;
printf ("%f \n", MEMORY);
}#
<⥪бв> ::= {09,+,-,*,(,),/,.}
#{ strcat(string,lex.token); }#
||= {\11\13,\15,\40}
ѓ« ўл© ¬®¤г«м .
/* ------------------------------------------------------*/
/* ђ бзҐв ўла ¦ҐЁ© */
/* ------------------------------------------------------*/
/*********************************************************/
#include <stdio.h>
#include <stdlib.h>
#include "syntax.h"
extern struct syntax lex;
extern struct syntax f_expr;
extern char string[400];
int print_error (int cod, struct syntax * gram);
// FILE *infile;
char filegrm[] = "expr.txt";
main()
- 13 -
{ int a;
string[0] = '\0';
if ( (a = fparser(filegrm,&lex)) != 0)
{print_error(a,&lex);// exit(0);
printf(" \n %s ",f_expr.current_symbol);
};
return(0);
}
” ©« lex.h ᮤҐа¦Ёв б«Ґ¤гойЁҐ ®ЇЁб Ёп.
#include <stdio.h>
#include <string.h>
#include "syntax.h"
// int print_error (int cod, struct syntax * gram);
extern struct syntax lex;
extern struct syntax f_expr;
extern float MEMORY;
char string[400];
‚лЇ®«Ё¬ ЈҐҐа жЁо.
gener2 lex.grm -v -s lexsem.cpp -l
Ё ®вва б«Ёа㥬 ¬®¤г«Ё lex.cpp lexsem.cpp Ё Ј« ўл© ¬®¤г«м.
<f_expr> /* з «мл© бЁ¬ў®« Ја ¬¬ вЁЄЁ*/
::= <EXPR>
#{ MEMORY = Expression[i]; }#
<EXPR> /* ђ бзҐв ўла ¦ҐЁп */
::= <EXPR> ( '+' <SU>
#{ Expression[i] += Summand[i];}#
| '-' <SU>
#{ Expression[i] -= Summand[i];}#
- 14 -
)
||= <SU>
#{ Expression[i] = Summand[i];}#
<SU> /* ђ бзҐв § 票п б« Ј Ґ¬®Ј® */
::= <MU>
#{ Summand[i] = Multiplier;}#
||= <SU> ( '*' <MU>
#{ Summand[i] *= Multiplier;}#
| '/' <MU>
#{ Summand[i] /= Multiplier;}#
)
<MU> /* ђ §Ў®а Ё ўлзЁб«ҐЁҐ ¬®¦ЁвҐ«п */
::= <DEC>
#{ Multiplier = Decimal; }#
||= 'M'
#{ Multiplier = MEMORY;}#
||= '('
#{ i++;}#
<EXPR>
')'
#{ Multiplier = Expression[i];
i--;
}#
<DEC> /*Їа®Ја ¬¬ а §Ў®а ¤ҐбпвЁз®Ј® зЁб« */
::= {09}
#{ strcpy(str,f_expr.token);}#
- 15 -
<A>
#{ Decimal = atof(str);}#
<A> ::= .{09}
#{ strcat(str,f_expr.token);}#
||= *
‚ ¬®¤г«Ґ f_expr.h 室пвбп ®ЇЁб Ёп
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "syntax.h"
extern struct syntax f_expr;
char str[400];
int i;
float MEMORY;
float Expression[100],Summand[100];
float Multiplier;
float Decimal;
‚лЇ®«Ё¬ ЈҐҐа жЁо.
gener2 f_expr.grm -s f_exprsem.cpp-v -l
Ё ®вва б«Ёа㥬 ¬®¤г«Ё f_expr.cpp, f_exprsem.cpp. ’ ЄЁ¬ ®Ўа §®¬,
Їа®ҐЄв Ўг¤Ґв б®бв®пвм Ё§ ¬®¤г«Ґ© Ї®«м§®ў ⥫п.
- Ј« ўл© ¬®¤г«м
- lex.h
- lex.cpp бЈҐҐаЁа®ў Ё§ lex.grm
- lexsem.cpp бЈҐҐаЁа®ў Ё§ lex.grm
- f_expr.h
- f_expr.cpp бЈҐҐаЁа®ў Ё§ f-expr.grm
- f_exprsem.cpp. бЈҐҐаЁа®ў Ё§ f_expr.grm
- 16 -
Ё бв ¤ авле ¬®¤г«Ґ©
syntax.h
fparser.obj
parser.obj
.
- 17 -
4. ‘ЋЋЃ™…Ќ€џ ЋЏ…ђЂ’Ћђ“
4.1. ЋиЁЎЄЁ ў Їа®Ја ¬¬Ґ.
- Error in program parser: <error_code>
„ п ®иЁЎЄ ўл¤ Ґвбп ў б«гз Ґ Ґ¤®ЇгбвЁ¬®© ¬®¤ЁдЁЄ жЁЁ Їа®Ја ¬¬л
parser Ё«Ё Ја д б®бв®пЁ©. ‚ н⮬ б«гз Ґ Ї®«м§®ў вҐ«о Ґ®Ўе®¤Ё¬® ®Ў-
а вЁвм ўЁ¬ ЁҐ а Ў®вг бў®Ёе дгЄжЁ© б ®ЇҐа вЁў®© Ї ¬пвмо.
- Parser stack overflow
‚ б«гз Ґ ўв®а®© ®иЁЎЄЁ Ґ®Ўе®¤Ё¬® 㢥«ЁзЁвм а §¬Ґа а Ў®зҐЈ® б⥪ ў
д ©«Ґ gener2.cpp Ё ЇҐаҐва б«Ёа®ў вм д ©«.
- Input file Ё¬п_д ©« empty file
- Input file Ё¬п_д ©« not found
€бе®¤л© д ©« Їгбв, Ґ®Ўе®¤Ё¬® Їа ўЁ«м® § ¤ вм ўе®¤го Ёд®а¬ жЁо.
- Option uncorrect usage: error characters
ЋиЁЎЄ ў § ¤ ЁЁ ®ЇжЁ©.
- Option Ё¬п_®ЇжЁЁ: multiple usage
Њ®¦Ґб⢥®Ґ § ¤ ЁҐ ®ЇжЁЁ.
4.2. ”®а¬ в б®®ЎйҐЁп ® бЁв ЄбЁзҐбЄ®© ®иЁЎЄҐ.
‚ б«гз Ґ гбЇҐи®Ј® § ўҐаиҐЁп Їа®Ја ¬¬л ўл¤ Ґвбп б®®ЎйҐЁҐ
- Analysis of the file "<file_name>" completed successfully
‘®®ЎйҐЁҐ ®Ў ®иЁЎЄҐ Ё¬ҐҐв д®а¬ в
- syntax error: filename: "<file_name>" line: "<line_number>" column:
"<column_number>"
error_token -> "<erroneous_token>"
ЋиЁЎЄ ўл¤ Ґвбп б в®з®бвмо ¤® ®иЁЎ®з®Ј® бЁ¬ў®« .