home *** CD-ROM | disk | FTP | other *** search
Text File | 1988-11-18 | 46.3 KB | 1,268 lines |
- - 128 -
-
- 6. æΓαπ¬Γπαδ.
- æΓαπ¬Γπαá - φΓ« ¡áí«α ¿º «ñ¡«⌐ ¿½¿ í«½ÑÑ »ÑαѼѡ¡δσ,
- 󫺼«ª¡« αẽ¿τ¡δσ Γ¿»«ó, ßúαπ»»¿α«óá¡¡δσ »«ñ «ñ¡¿¼ ¿¼Ñ¡Ñ¼
- ñ½∩ πñ«íßΓóá «íαáí«Γ¬¿. (é ¡Ñ¬«Γ«αδσ ∩ºδ¬áσ, ßá¼δ⌐ ¿ºóÑßΓ¡δ⌐
- ¿º ¬«Γ«αδσ »á߬á½∞, ßΓαπ¬Γπαδ ¡áºδóáεΓß∩ "ºá»¿ß∩¼¿").
- Æαáñ¿µ¿«¡¡δ¼ »α¿¼Ñα«¼ ßΓαπ¬Γπαδ ∩ó½∩ÑΓß∩ πτÑΓ¡á∩ ¬áαΓ«τ-
- ¬á αáí«ΓáεΘÑú«: "ß½πªáΘ¿⌐" «»¿ßδóáÑΓß∩ ¡áí«α«¼ áΓα¿íπΓ«ó Γá-
- ¬¿σ, ¬á¬ ΣἿ½¿∩, ¿¼∩, «ΓτÑßΓó« (Σ.¿.«.), áñαÑß, ¬«ñ ß«µ¿-
- á½∞¡«ú« «íÑß»ÑτÑ¡¿∩, ºáα»½áΓá ¿ Γ.ñ. ìѬ«Γ«αδÑ ¿º φΓ¿σ áΓα¿-
- íπΓ«ó ßἿ ¼«úπΓ «¬áºáΓ∞ß∩ ßΓαπ¬ΓπαἿ: Σ.¿.«. ê¼ÑÑΓ ¡Ñß-
- ¬«½∞¬« ¬«¼»«¡Ñ¡Γ, ¬á¬ ¿ áñαÑß, ¿ ñáªÑ ºáα»½áΓá.
- æΓαπ¬Γπαδ «¬áºδóáεΓß∩ »«½Ñº¡δ¼¿ »α¿ «αúá¡¿ºáµ¿¿ ß½«ª¡δσ
- ñá¡¡δσ «ß«íÑ¡¡« ó í«½∞Φ¿σ »α«úαá¼¼áσ, »«ß¬«½∞¬π ó« ¼¡«ú¿σ
- ß¿Γπᵿ∩σ «¡¿ »«ºó«½∩εΓ ßúαπ»»¿α«óáΓ∞ ßó∩ºá¡¡δÑ ñá¡¡δÑ Γᬿ¼
- «íαẫ¼, τΓ« ß ¡¿¼¿ ¼«ª¡« «íαáΘáΓ∞ß∩, ¬á¬ ß «ñ¡¿¼ µÑ½δ¼, á
- ¡Ñ ¬á¬ ß «Γñѽ∞¡δ¼¿ «íΩѬΓἿ. é φΓ«⌐ ú½áóÑ ¼δ »«ßΓáαáѼß∩
- »α«ñѼ«¡ßΓα¿α«óáΓ∞ Γ«, ¬á¬ ¿ß»«½∞ºπεΓß∩ ßΓαπ¬Γπαδ. Åα«úαá¼-
- ¼δ, ¬«Γ«αδÑ ¼δ ñ½∩ φΓ«ú« íπñѼ ¿ß»«½∞º«óáΓ∞, í«½∞ΦÑ, τѼ
- ¼¡«ú¿Ñ ñαπú¿Ñ ó φΓ«⌐ ¬¡¿úÑ, ¡« óßÑ ªÑ ñ«ßΓáΓ«τ¡« π¼ÑαÑ¡¡δσ
- αẼÑα«ó.
-
- 6.1. Äß¡«ó¡δÑ ßóÑñÑ¡¿∩.
- äáóá⌐ΓÑ ß¡«óá «íαáΓ¿¼ß∩ ¬ »α«µÑñπαá¼ »αÑ«íαẫóá¡¿∩ ñáΓδ
- ¿º ú½áóδ 5. äáΓá ß«ßΓ«¿Γ ¿º ¡Ñ߬«½∞¬¿σ τáßΓÑ⌐ Γᬿσ, ¬á¬
- ñÑ¡∞, ¼Ñß∩µ, ¿ ú«ñ, ¿, 󫺼«ª¡«, ñÑ¡∞ ú«ñá ¿ ¿¼∩ ¼Ñß∩µá. ¥Γ¿
- »∩Γ∞ »ÑαѼѡ¡δσ ¼«ª¡« «íΩÑñÑ¡¿Γ∞ ó «ñ¡π ßΓαπ¬Γπαπ ó¿ñá:
-
- STRUCT DATE \(
- INT DAY;
- INT MONTH;
- INT YEAR;
- INT YEARDAY;
- CHAR MON_NAME[4];
- \);
-
- Ä»¿ßá¡¿Ñ ßΓαπ¬Γπαδ, ß«ßΓ«∩ΘÑÑ ¿º ºá¬½ετÑ¡¡«ú« ó Σ¿úπα¡δÑ
- ߬«í¬¿ ß»¿ß¬á «»¿ßá¡¿⌐, ¡áτ¿¡áÑΓß∩ ß ¬½ετÑó«ú« ß½«óá STRUCT.
- çá ß½«ó«¼ STRUCT ¼«ªÑΓ ß½Ññ«óáΓ∞ ¡Ñ«í∩ºáΓѽ∞¡«Ñ ¿¼∩, ¡áºδóá-
- Ѽ«Ñ ∩α½δ¬«¼ ßΓαπ¬Γπαδ (ºñÑß∞ φΓ« DATÑ). Æá¬«⌐ ∩α½δ¬ ¿¼Ñ¡πÑΓ
- ßΓαπ¬Γπαδ φΓ«ú« ó¿ñá ¿ ¼«ªÑΓ ¿ß»«½∞º«óáΓ∞ß∩ ó ñá½∞¡Ñ⌐ΦѼ ¬á¬
- ß«¬αáΘÑ¡¡á∩ ºá»¿ß∞ »«ñα«í¡«ú« «»¿ßá¡¿∩.
- ¥½Ñ¼Ñ¡Γδ ¿½¿ »ÑαѼѡ¡δÑ, π»«¼∩¡πΓδÑ ó ßΓαπ¬ΓπαÑ, ¡áºδóá-
- εΓß∩ τ½Ñ¡á¼¿. ƒα½δ¬¿ ¿ τ½Ñ¡δ ßΓαπ¬Γπα ¼«úπΓ ¿¼ÑΓ∞ Γá¬¿Ñ ªÑ
- ¿¼Ñ¡á, τΓ« ¿ «íδτ¡δÑ »ÑαѼѡ¡δÑ (Γ.Ñ. ìÑ ∩ó½∩εΘ¿Ñß∩ τ½Ñ¡á¼¿
- ßΓαπ¬Γπα), »«ß¬«½∞¬π ¿σ ¿¼Ñ¡á óßÑúñá ¼«ª¡« αẽ¿τ¿Γ∞ »« ¬«¡-
- ΓѬßΓπ. è«¡Ñτ¡«, «íδτ¡« «ñ¿¡á¬«óδÑ ¿¼Ñ¡á »α¿ßóá¿óáεΓ Γ«½∞¬«
- ΓÑß¡« ßó∩ºá¡¡δ¼ «íΩѬΓá¼.
-
- - 129 -
-
- Æ«τ¡« ΓᬠªÑ, ¬á¬ ó ß½πτáÑ ½εí«ú« ñαπú«ú« íếߡ«ú« Γ¿-
- »á, ºá »αáó«⌐ Σ¿úπα¡«⌐ ߬«í¬«⌐, ºá¬αδóáεΘÑ⌐ ß»¿ß«¬ τ½Ñ¡«ó,
- ¼«ªÑΓ ß½Ññ«óáΓ∞ ß»¿ß«¬ »ÑαѼѡ¡δσ.
- Ä»ÑαáΓ«α
-
- STRUCT \( ...\) X,Y,Z;
-
- ß¿¡Γá¬ß¿τÑ߬¿ á¡á½«ú¿τÑ¡
-
- INT X,Y,Z;
-
- ó Γ«¼ ß¼δß½Ñ, τΓ« ¬áªñδ⌐ ¿º «»ÑαáΓ«α«ó «»¿ßδóáÑΓ X , Y ¿ Z ó
- ¬áτÑßΓóÑ »ÑαѼѡ¡δσ ß««ΓóÑßΓóπεΘ¿σ Γ¿»«ó ¿ »α¿ó«ñ¿Γ ¬ óδñÑ-
- ½Ñ¡¿ε ñ½∩ ¡¿σ »á¼∩Γ¿.
- Ä»¿ßá¡¿Ñ ßΓαπ¬Γπαδ, ºá ¬«Γ«αδ¼ ¡Ñ ß½ÑñπÑΓ ß»¿ß¬á »ÑαÑ-
- ¼Ñ¡¡δσ, ¡Ñ »α¿ó«ñ¿Γ ¬ óδñѽѡ¿ε ¬á¬«⌐-½¿í« »á¼∩Γ¿; «¡« Γ«½∞-
- ¬« «»αÑñѽ∩ÑΓ Φáí½«¡ ¿½¿ Σ«α¼π ßΓαπ¬Γπαδ. Äñ¡á¬«, Ñß½¿ ΓᬫÑ
- «»¿ßá¡¿Ñ ß¡áíªÑ¡« ∩α½δ¬«¼, Γ« φëà ∩α½δ¬ ¼«ªÑΓ íδΓ∞ ¿ß»«½∞-
- º«óá¡ »«ºñ¡ÑÑ »α¿ «»αÑñѽѡ¿¿ Σá¬Γ¿τÑ߬¿σ φ¬ºÑ¼»½∩α«ó ßΓαπ¬-
- Γπα. ìá»α¿¼Ñα, Ñß½¿ ñá¡« »α¿óÑñÑ¡¡«Ñ óδΦÑ «»¿ßá¡¿Ñ DATE, Γ«
-
- STRUCT DATE D;
-
- «»αÑñѽ∩ÑΓ »ÑαѼѡ¡πε D ó ¬áτÑßΓóÑ ßΓαπ¬Γπαδ Γ¿»á DATE.
- é¡ÑΦ¡εε ¿½¿ ßΓáΓ¿τÑ߬πε ßΓαπ¬Γπαπ ¼«ª¡« ¿¡¿µ¿á½¿º¿α«óáΓ∞,
- »«¼ÑßΓ¿ó óß½Ññ ºá ÑÑ «»αÑñѽѡ¿Ñ¼ ß»¿ß«¬ ¿¡¿µ¿á½¿ºáΓ«α«ó ñ½∩
- ÑÑ ¬«¼»«¡Ñ¡Γ:
-
- STRUCT DATE D=\( 4, 7, 1776, 186, "JUL"\);
-
- ù½Ñ¡ «»αÑñѽѡ¡«⌐ ßΓαπ¬Γπαδ ¼«ªÑΓ íδΓ∞ π¬áºá¡ ó óδαáªÑ-
- ¡¿¿ ß »«¼«Θ∞ε ¬«¡ßΓαπ¬µ¿¿ ó¿ñá
-
- ¿¼∩ ßΓαπ¬Γπαδ . ù½Ñ¡
- --------------------
- Ä»Ñαᵿ∩ π¬áºá¡¿∩ τ½Ñ¡á ßΓαπ¬Γπαδ "." ßó∩ºδóáÑΓ ¿¼∩ ßΓαπ¬Γπ-
- αδ ¿ ¿¼∩ τ½Ñ¡á. é ¬áτÑßΓóÑ »α¿¼Ñαá «»αÑñѽ¿¼ LEAP (»α¿º¡á¬
- ó¿ß«¬«ß¡«ßΓ¿ ú«ñá) ¡á «ß¡«óÑ ñáΓδ, ¡áσ«ñ∩ΘÑ⌐ß∩ ó ßΓαπ¬ΓπαÑ
- D,
-
- LEAP = D.YEAR % 4 == 0 && D.YEAR % 100 != 0
- \!\! D.YEAR % 400 == 0;
-
- ¿½¿ »α«óÑα¿¼ ¿¼∩ ¼Ñß∩µá
-
- IF (STRCMP(D.MON_NAME, "AUG") == 0) ...
-
- 꽿 »αÑ«íαáºπѼ »Ñαóδ⌐ ß¿¼ó«½ ¿¼Ñ¡¿ ¼Ñß∩µá Γá¬, τΓ«íδ «¡«
- ¡áτ¿¡á½«ß∞ ß« ßΓα«τ¡«⌐ íπ¬óδ
-
- D.MON_NAME[0] = LOWER(D.MON_NAME[0]);
-
- - 130 -
-
- æΓαπ¬Γπαδ ¼«úπΓ íδΓ∞ 󽫪ѡ¡δ¼¿; πτÑΓ¡á∩ ¬áαΓ«τ¬á ß½πªá-
- ΘÑú« ¼«ªÑΓ Σá¬Γ¿τÑ߬¿ óδú½∩ñÑΓ∞ Γá¬:
-
- STRUCT PERSON \(
- CHAR NAME[NAMESIZE];
- CHAR ADDRESS[ADRSIZE];
- LONG ZIPCODE; /* »«τΓ«óδ⌐ ¿¡ñÑ¬ß */
- LONG SS_NUMBER; /* ¬«ñ ß«µ. ÄíÑß»ÑτÑ¡¿∩ */
- DOUBLE SALARY; /* ºáα»½áΓá */
- STRUCT DATE BIRTHDATE; /* ñáΓá ᫪ñÑ¡¿∩ */
- STRUCT DATE HIREDATE; /* ñáΓá »«ßΓπ»½Ñ¡¿∩
- ¡á αáí«Γπ */
- \);
-
-
- æΓαπ¬Γπαá PERSON ß«ñÑαª¿Γ ñóÑ ßΓαπ¬Γπαδ Γ¿»á DATE . àß½¿ ¼δ
- «»αÑñѽ¿¼ EMP ¬á¬
-
- STRUCT PERSON EMP;
-
- Γ«
-
- EMP.BIRTHDATE.MONTH
-
- íπñÑΓ ßßδ½áΓ∞ß∩ ¡á ¼Ñß∩µ ᫪ñÑ¡¿∩. Ä»Ñαᵿ∩ π¬áºá¡¿∩ τ½Ñ¡á
- ßΓαπ¬Γπαδ "." áßß«µ¿¿απÑΓß∩ ß½Ñóá ¡á»αáó«.
-
- 6.2. æΓαπ¬Γπαδ ¿ Σπ¡¬µ¿¿.
- é ∩ºδ¬Ñ "C" ßπΘÑßΓóπÑΓ α∩ñ «úαá¡¿τÑ¡¿⌐ ¡á ¿ß»«½∞º«óá¡¿Ñ
- ßΓαπ¬Γπα. Äí∩ºáΓѽ∞¡δÑ »αáó¿½á ºá¬½ετáεΓß∩ ó Γ«¼, τΓ« Ññ¿¡ß-
- ΓóÑ¡¡δÑ «»Ñαᵿ¿, ¬«Γ«αδÑ óδ ¼«ªÑΓÑ »α«ó«ñ¿Γ∞ ß« ßΓαπ¬Γπαá-
- ¼¿, ß«ßΓ«∩Γ ó «»αÑñѽѡ¿¿ ÑÑ áñαÑßá ß »«¼«Θ∞ε «»Ñαᵿ¿ & ¿
- ñ«ßΓπ»Ñ ¬ «ñ¡«¼π ¿º ÑÑ τ½Ñ¡«ó. ¥Γ« ó½ÑτÑΓ ºá ß«í«⌐ Γ«, τΓ«
- ßΓαπ¬Γπαδ ¡Ñ½∞º∩ »α¿ßóá¿óáΓ∞ ¿½¿ ¬«»¿α«óáΓ∞ ¬á¬ µÑ½«Ñ, ¿ τΓ«
- «¡¿ ¡Ñ ¼«úπΓ íδΓ∞ »ÑαÑñá¡δ Σπ¡¬µ¿∩¼ ¿½¿ ó«ºóαáΘÑ¡δ ¿¼¿. (é
- »«ß½ÑñπεΘ¿σ óÑαß¿∩σ φΓ¿ «úαá¡¿τÑ¡¿∩ íπñπΓ ß¡∩Γδ). ìá π¬áºá-
- Γѽ¿ ßΓαπ¬Γπα φΓ¿ «úαá¡¿τÑ¡¿∩ «ñ¡á¬« ¡Ñ ¡á¬½áñδóáεΓß∩, Γá¬
- τΓ« ßΓαπ¬Γπαδ ¿ Σπ¡¬µ¿¿ óßÑ ªÑ ¼«úπΓ ß πñ«íßΓó«¼ αáí«ΓáΓ∞
- ß«ó¼ÑßΓ¡«. ê ¡á¬«¡Ñµ, áóΓ«¼áΓ¿τÑ߬¿Ñ ßΓαπ¬Γπαδ, ¬á¬ ¿ áóΓ«-
- ¼áΓ¿τÑ߬¿Ñ ¼áßß¿óδ, ¡Ñ ¼«úπΓ íδΓ∞ ¿¡¿µ¿á½¿º¿α«óá¡δ; ¿¡¿µ¿á-
- ½¿ºáµ¿∩ 󫺼«ª¡á Γ«½∞¬« ó ß½πτáÑ ó¡ÑΦ¡¿σ ¿½¿ ßΓáΓ¿τÑ߬¿σ
- ßΓαπ¬Γπα.
- äáóá⌐ΓÑ αáºíÑαѼ ¡Ñ¬«Γ«αδÑ ¿º φΓ¿σ ó«»α«ß«ó, »ÑαÑ»¿ßáó ß
- φΓ«⌐ µÑ½∞ε Σπ¡¬µ¿¿ »Ñα«íαẫóá¡¿∩ ñáΓδ ¿º »αÑñδñπΘÑ⌐ ú½áóδ
- Γá¬, τΓ«íδ «¡¿ ¿ß»«½∞º«ó὿ ßΓαπ¬Γπαδ. Æá¬ ¬á¬ »αáó¿½á ºá»-
- αÑΘáεΓ ¡Ñ»«ßαÑñßΓóÑ¡¡πε »ÑαÑñáτπ ßΓαπ¬Γπαδ Σπ¡¬µ¿¿, Γ« ¼δ
- ñ«½ª¡δ ½¿í« »ÑαÑñáóáΓ∞ «Γñѽ∞¡« ¬«¼»«¡Ñ¡Γδ, ½¿í« »ÑαÑñáΓ∞
- π¬áºáΓѽ∞ óßÑ⌐ ßΓαπ¬Γπαδ. ÅÑαóá∩ 󫺼«ª¡«ßΓ∞ ñѼ«¡ßΓα¿απÑΓß∩
- ¡á »α¿¼ÑαÑ Σπ¡¬µ¿¿ DAY_OF_YEAR, ¬á¬ ¼δ ÑÑ ¡á»¿ß὿ ó ú½áóÑ
- 5:
-
- D.YEARDAY = DAY_OF_YEAR(D.YEAR, D.MONTH, D.DAY);
-
- - 131 -
-
- ñαπú«⌐ ß»«ß«í ß«ßΓ«¿Γ ó »ÑαÑñáτÑ π¬áºáΓѽ∩. Ñß½¿ ¼δ «»¿ΦѼ
- HIREDATE ¬á¬
-
- STRUCT DATE HIREDATE;
-
- ¿ »ÑαÑ»¿ΦѼ DAY_OF_YEAR ¡πª¡δ¼ «íαẫ¼, ¼δ ß¼«ªÑ¼ Γ«úñá ¡á-
- »¿ßáΓ∞
-
- HIREDATE YEARDAY = DAY_OF_YEAR(&HIREDATE);
-
- »ÑαÑñáóá∩ π¬áºáΓѽ∞ ¡á HIREDATE Σπ¡¬µ¿¿ DAY_OF_YEAR . öπ¡¬-
- µ¿∩ ñ«½ª¡á íδΓ∞ ¼«ñ¿Σ¿µ¿α«óá¡á, »«Γ«¼π τΓ« ÑÑ áαúπ¼Ñ¡Γ ΓÑ-
- »Ñα∞ ∩ó½∩ÑΓß∩ π¬áºáΓѽѼ, á ¡Ñ ß»¿ß¬«¼ »ÑαѼѡ¡δσ.
-
- DAY_OF_YEAR(PD) /* SET DAY OF YEAR FROM MONTH, DAY */
- STRUCT DATE *PD;
- \(
- INT I, DAY, LEAP;
-
- DAY = PD->DAY;
- LEAP = PD->YEAR % 4 == 0 && PD->YEAR % 100 != 0
- \!\! PD->YEAR % 400 == 0;
- FOR (I =1; I < PD->MONTH; I++)
- DAY += DAY_TAB[LEAP][I];
- RETURN(DAY);
- \)
-
-
- Ä»¿ßá¡¿Ñ
-
- STRUCT DATE *PD;
-
- ú«ó«α¿Γ, τΓ« PD ∩ó½∩ÑΓß∩ π¬áºáΓѽѼ ßΓαπ¬Γπαδ Γ¿»á DATE.
- çỿß∞, »«¬áºá¡¡á∩ ¡á »α¿¼ÑαÑ
-
- PD->YEAR
-
- ∩ó½∩ÑΓß∩ ¡«ó«⌐. àß½¿ P - π¬áºáΓѽ∞ ¡á ßΓαπ¬Γπαπ, Γ«
- P-> τ½Ñ¡ ßΓαπ¬Γπαδ
- ------------------
- «íαáΘáÑΓß∩ ¬ ¬«¡¬αÑΓ¡«¼π τ½Ñ¡π. (Ä»Ñαᵿ∩ -> - φΓ« º¡á¬ ¼¿-
- ¡πß, ºá ¬«Γ«αδ¼ ß½ÑñπÑΓ º¡á¬ ">".)
- Æá¬ ¬á¬ PD π¬áºδóáÑΓ ¡á ßΓαπ¬Γπαπ, Γ« ¬ τ½Ñ¡π YEAR ¼«ª¡«
- «íαáΓ¿Γ∞ß∩ ¿ ß½ÑñπεΘ¿¼ «íαẫ¼
-
- (*PD).YEAR
-
- ¡« π¬áºáΓѽ¿ ßΓαπ¬Γπα ¿ß»«½∞ºπεΓß∩ ¡áßΓ«½∞¬« τáßΓ«, τΓ« ºá-
- »¿ß∞ -> «¬áºδóáÑΓß∩ πñ«í¡δ¼ ß«¬αáΘÑ¡¿Ñ¼. èαπú½δÑ ß¬«í¬¿ ó
- (*PD).YEAR ¡Ñ«íσ«ñ¿¼δ, »«Γ«¼π τΓ« «»Ñαᵿ∩ π¬áºá¡¿∩ τ½Ñ¡á
-
- - 132 -
-
- ßΓπ¬Γπαδ ßΓáαΦÑ , τѼ * . ÄíÑ «»Ñαᵿ¿, "->" ¿ ".", áßß«µ¿¿-
- απεΓß∩ ß½Ñóá ¡á»αáó«, ΓᬠτΓ« ¬«¡ßΓαπ¬µ¿¿ ß½Ñóá ¿ ß»αáóá
- º¬ó¿óá½Ñ¡Γ¡δ
-
- P->Q->MEMB (P->Q)->MEMB
- EMP.BIRTHDATE.MONTH (EMP.BIRTHDATE).MONTH
-
- ä½∩ »«½¡«Γδ ¡¿ªÑ »α¿ó«ñ¿Γß∩ ñαπúá∩ Σπ¡¬µ¿∩, MONTH_DAY, »ÑαÑ-
- »¿ßá¡¡á∩ ß ¿ß»«½∞º«ó᡿Ѽ ßΓαπ¬Γπα.
-
- MONTH_DAY(PD) /* SET MONTH AND DAY FROM DAY OF YEAR */
- STRUCT DATE *PD;
- \(
- INT I, LEAP;
-
- LEAP = PD->YEAR % 4 == 0 && PD->YEAR % 100 != 0
- \!\! PD->YEAR % 400 == 0;
- PD->DAY = PD->YEARDAY;
- FOR (I = 1; PD->DAY > DAY_TAB[LEAP][I]; I++)
- PD->DAY -= DAY_TAB[LEAP][I];
- PD->MONTH = I;
- \)
-
- Ä»Ñαᵿ¿ αáí«Γδ ß« ßΓαπ¬ΓπαἿ "->" ¿ "." ¡áα∩ñπ ß« ()
- ñ½∩ ß»¿ß¬á áαúπ¼Ñ¡Γ«ó ¿ [] ñ½∩ ¿¡ñѬ߫ó ¡áσ«ñ∩Γß∩ ¡á ßἫ¼
- óÑασπ ¿Ñαáασ¿¿ ßΓαáΦ¿¡ßΓóá «»Ñαᵿ⌐ ¿, ß½Ññ«óáΓѽ∞¡«, ßó∩ºδ-
- óáεΓß∩ «τÑ¡∞ ¬αÑ»¬«. àß½¿, ¡á»α¿¼Ñα, ¿¼ÑÑΓß∩ «»¿ßá¡¿Ñ
-
- STRUCT \(
- INT X;
- INT *Y;
- \) *P;
-
- Γ« óδαáªÑ¡¿Ñ
-
- ++P->X
-
- πóѽ¿τ¿óáÑΓ σ, á ¡Ñ α, Γᬠ¬á¬ «¡« φ¬ó¿óá½Ñ¡Γ¡« óδαáªÑ¡¿ε
- ++(P->σ). ä½∩ ¿º¼Ñ¡Ñ¡¿∩ »«α∩ñ¬á óδ»«½¡Ñ¡¿∩ «»Ñαᵿ⌐ ¼«ª¡«
- ¿ß»«½∞º«óáΓ∞ ¬απú½δÑ ß¬«í¬¿: (++P)->σ πóѽ¿τ¿óáÑΓ P ñ« ñ«ß-
- Γπ»á ¬ σ, á (P++)->X πóѽ¿τ¿óáÑΓ P »«ß½Ñ. (¬απú½δÑ ß¬«í¬¿ ó
- »«ß½Ññ¡Ñ¼ ß½πτáÑ ¡Ñ«í∩ºáΓѽ∞¡δ. Å«τѼπ ?)
- æ«óÑαΦÑ¡¡« á¡á½«ú¿τ¡« *P->Y ¿ºó½Ñ¬áÑΓ Γ«, ¡á τΓ« π¬áºδ-
- óáÑΓ Y; *P->Y++ πóѽ¿τ¿óáÑΓ Y »«ß½Ñ «íαáí«Γ¬¿ Γ«ú«, ¡á τΓ«
- «¡ π¬áºδóáÑΓ (Γ«τ¡« ΓᬠªÑ, ¬á¬ ¿ *S++); (*P->Y)++ πóѽ¿τ¿-
- óáÑΓ Γ«, ¡á τΓ« π¬áºδóáÑΓ Y; *P++->Y πóѽ¿τ¿óáÑΓ P »«ß½Ñ óδ-
- í«α¬¿ Γ«ú«, ¡á τΓ« π¬áºδóáÑΓ Y.
-
- - 133 -
-
- 6.3. îáßß¿óδ ßαπ¬Γπα.
- æΓαπ¬Γπαδ «ß«íÑ¡¡« »«ñσ«ñ∩Γ ñ½∩ π»αáó½Ñ¡¿∩ ¼áßß¿óἿ
- ßó∩ºá¡¡δσ »ÑαѼѡ¡δσ. Éáßß¼«Γα¿¼, ¡á»α¿¼Ñα, »α«úαá¼¼π »«ñß-
- τÑΓá τ¿ß½á óσ«ªñÑ¡¿⌐ ¬áªñ«ú« ¬½ετÑó«ú« ß½«óá ∩ºδ¬á "C". ìá¼
- ¡πªÑ¡ ¼áßß¿ó ß¿¼ó«½∞¡δσ ßΓ᫬ ñ½∩ σαá¡Ñ¡¿∩ ¿¼Ñ¡ ¿ ¼áßß¿ó µÑ-
- ½δσ ñ½∩ »«ñßτÑΓá. «ñ¡á ¿º 󫺼«ª¡«ßΓÑ⌐ ß«ßΓ«¿Γ ó ¿ß»«½∞º«óá-
- ¡¿¿ ñóπσ »áαώѽ∞¡δσ ¼áßß¿ó«ó KEYWORD ¿ KEYCOUNT:
-
- CHAR *KEYWORD [NKEYS];
- INT KEYCOUNT [NKEYS];
-
- ì« ßá¼ Σá¬Γ, τΓ« ¼áßß¿óδ »áαώѽ∞¡δ, π¬áºδóáÑΓ ¡á 󫺼«ª-
- ¡«ßΓ∞ ñαπú«⌐ «αúá¡¿ºáµ¿¿. èáªñ«Ñ ¬½ετÑó«Ñ ß½«ó« ºñÑß∞ »« ßπ-
- ΘÑßΓóπ ∩ó½∩ÑΓß∩ »áα«⌐:
-
- CHAR *KEYWORD;
- INT KEYCOUNT;
-
- ¿, ß½Ññ«óáΓѽ∞¡«, ¿¼ÑÑΓß∩ ¼áßß¿ó »áα. Ä»¿ßá¡¿Ñ ßΓαπ¬Γπαδ
-
- STRUCT KEY \(
- CHAR *KEYWORD;
- INT KEYCOUNT;
- \) KEYTAB [NKEYS];
-
- «»Ñαñѽ∩ÑΓ ¼áßß¿ó KEYTAB ßΓαπ¬Γπα Γᬫú« Γ¿»á ¿ «Γó«ñ¿Γ ñ½∩
- ¡¿σ »á¼∩Γ∞. èáªñδ⌐ φ½Ñ¼Ñ¡Γ ¼áßß¿óá ∩ó½∩ÑΓß∩ ßΓαπ¬Γπα«⌐. ¥Γ«
- ¼«ª¡« í佫 íδ ºá»¿ßáΓ∞ ¿ Γá¬:
-
- STRUCT KEY \(
- CHAR *KEYWORD;
- INT KEYCOUNT;
- \);
- STRUCT KEY KEYTAB [NKEYS];
-
- Æá¬ ¬á¬ ßΓαπ¬Γπαá KEYTAB Σá¬Γ¿τÑ߬¿ ß«ñÑαª¿Γ »«ßΓ«∩¡¡δ⌐
- ¡áí«α ¿¼Ñ¡, Γ« ½ÑúτÑ óßÑú« ¿¡¿µ¿á½¿º¿α«óáΓ∞ ÑÑ «ñ¿¡ αẠ¿
- ñ½∩ óßÑσ τ½Ñ¡«ó »α¿ «»αÑñѽѡ¿¿. ê¡¿µ¿á½¿ºáµ¿∩ ßΓαπ¬Γπα
- 󻫽¡Ñ á¡á½«ú¿τ¡á »αÑñδñπΘ¿¼ ¿¡¿µ¿á½¿ºáµ¿∩¼ - ºá «»αÑñѽѡ¿-
- Ѽ ß½ÑñπÑΓ ºá¬½ετÑ¡¡δ⌐ ó Σ¿úπα¡δÑ ß¬«í¬¿ ß»¿ß«¬ ¿¡¿µ¿á½¿ºá-
- Γ«α«ó:
-
- STRUCT KEY \(
- CHAR *KEYWORD;
- INT KEYCOUNT;
- \) KEYTAB[] =\(
- "BREAK", 0,
- "CASE", 0,
- "CHAR", 0,
- "CONTINUE", 0,
- "DEFAULT", 0,
- /* ... */
- "UNSIGNED", 0,
- "WHILE", 0
- \);
-
- ê¡¿µ¿á½¿ºáΓ«αδ »ÑαÑτ¿ß½∩εΓß∩ »áαἿ ß««ΓóÑΓßΓóÑ¡¡« τ½Ñ¡á¼
- ßΓαπ¬Γπαδ. ü佫 íδ í«½ÑÑ Γ«τ¡« ºá¬½ετáΓ∞ ó Σ¿úπα¡δÑ ß¬«í¬¿
- ¿¡¿µ¿á½¿ºáΓ«αδ ñ½∩ ¬áªñ«⌐ "ßΓ᫬¿" ¿½¿ ßΓαπ¬Γπαδ ß½ÑñπεΘ¿¼
- «íαẫ¼:
-
- \( "BREAK", 0 \),
- \( "CASE", 0 \),
- . . .
-
- - 134 -
-
- ì« ¬«úñá ¿¡¿µ¿á½¿ºáΓ«αδ ∩ó½∩εΓß∩ »α«ßΓ묨 »ÑαѼѡ¡δ¼¿ ¿½¿
- ß¿¼ó«½∞¡δ¼¿ ßΓα«¬á¼¿ ¿ óßÑ «¡¿ »α¿ßπΓßΓóπεΓ, Γ« ó« ó¡πΓαÑ¡-
- ¡¿σ Σ¿úπα¡δσ ߬«í¬áσ ¡ÑΓ ¡Ñ«íσ«ñ¿¼«ßΓ¿. èᬠ«íδτ¡«, ¬«¼»¿½∩-
- Γ«α ßá¼ óδτ¿ß½¿Γ τ¿ß½« φ½Ñ¼Ñ¡Γ«ó ¼áßß¿óá KEYTAB, Ñß½¿ ¿¡¿µ¿-
- ὿ºáΓ«αδ »α¿ßπΓßΓóπεΓ, á ߬«í¬¿ [] «ßΓáó½Ñ¡δ »πßΓ묨.
- Åα«úαá¼¼á »«ñßτÑΓá ¬½ετÑóδσ ß½«ó ¡áτ¿¡áÑΓß∩ ß «»αÑñѽÑ-
- ¡¿∩ ¼áßß¿óá KEYTAB. óÑñπΘá∩ »α«úαá¼¼á τ¿ΓáÑΓ ßó«⌐ Σá⌐½ óó«-
- ñá, »«ß½Ññ«óáΓѽ∞¡« «íαáΘá∩ß∞ ¬ Σπ¡¬µ¿¿ GETWORD, ¬«Γ«αá∩ ¿º-
- ó½Ñ¬áÑΓ ¿º óó«ñá »« «ñ¡«¼π ß½«óπ ºá «íαáΘÑ¡¿Ñ. èáªñ«Ñ ß½«ó«
- ¿ΘÑΓß∩ ó ¼áßß¿óÑ KEYTAB ß »«¼«Θ∞ε óáα¿á¡Γá Σπ¡¬µ¿¿ í¿¡áα¡«ú«
- »«¿ß¬á, ¡á»¿ßá¡¡«⌐ ¡á¼¿ ó ú½áóÑ 3. (è«¡Ñτ¡«, τΓ«íδ φΓá Σπ¡¬-
- µ¿∩ αáí«Γá½á, ß»¿ß«¬ ¬½ετÑóδσ ß½«ó ñ«½ªÑ¡ íδΓ∞ αáß»«½«ªÑ¡ ó
- »«α∩ñ¬Ñ ó«ºαáßΓá¡¿∩).
-
- #DEFINE MAXWORD 20
-
- MAIN() /* COUNT "C" KEYWORDS */
- \(
- INT N, T;
- CHAR WORD[MAXWORD];
-
- WHILE ((T = GETWORD(WORD,MAXWORD)) != EOF)
- IF (T == LETTER)
- IF((N = BINARY(WORD,KEYTAB,NKEYS)) >= 0)
- KEYTAB[N].KEYCOUNT++;
- FOR (N =0; N < NKEYS; N++)
- IF (KEYTAB[N].KEYCOUNT > 0)
- PRINTF("%4D %S\N",
- KEYTAB[N].KEYCOUNT, KEYTAB[N].KEYWORD);
- \)
- BINARY(WORD, TAB, N) /* FIND WORD IN TAB[0]...TAB[N-1] */
- CHAR *WORD;
- STRUCT KEY TAB[];
- INT N;
- \(
- INT LOW, HIGH, MID, COND;
-
- LOW = 0;
- HIGH = N - 1;
- WHILE (LOW <= HIGH) \(
- MID = (LOW+HIGH) / 2;
- IF((COND = STRCMP(WORD, TAB[MID].KEYWORD)) < 0)
- HIGH = MID - 1;
- ELSE IF (COND > 0)
- LOW = MID + 1;
- ELSE
- RETURN (MID);
- \)
- RETURN(-1);
- \)
- îδ ó߬«αÑ »α¿óÑñѼ Σπ¡¬µ¿ε GETWORD; »«¬á ñ«ßΓáΓ«τ¡« ߬áºáΓ∞,
- τΓ« «¡á ó«ºóαáΘáÑΓ LETTER ¬áªñδ⌐ αáº, ¬á¬ «¡á ¡áσ«ñ¿Γ ß½«ó«,
- ¿ ¬«»¿απÑΓ φΓ« ß½«ó« ó ßó«⌐ »Ñαóδ⌐ áαúπ¼Ñ¡Γ.
-
- - 135 -
-
- éѽ¿τ¿¡á NKEYS - φΓ« ¬«½¿τÑßΓó« ¬½ετÑóδσ ß½«ó ó ¼áßß¿óÑ
- KEYTAB . ò«Γ∩ ¼δ ¼«ªÑ¼ ß«ßτ¿ΓáΓ∞ φΓ« τ¿ß½« óαπτ¡πε, ú«αáºñ«
- ½ÑúτÑ ¿ ¡áñѪ¡ÑÑ »«απτ¿Γ∞ φΓ« ¼áΦ¿¡Ñ, «ß«íÑ¡¡« ó Γ«¼ ß½πτáÑ,
- Ñß½¿ ß»¿ß«¬ ¬½ετÑóδσ ß½«ó »«ñóÑαªÑ¡ ¿º¼Ñ¡Ñ¡¿∩¼. Äñ¡«⌐ ¿º
- 󫺼«ª¡«ßΓÑ⌐ í佫 íδ ºá¬«¡τ¿Γ∞ ß»¿ß«¬ ¿¡¿µ¿á½¿ºáΓ«α«ó π¬áºá-
- ¡¿Ñ¼ ¡á ¡π½∞ ¿ ºáΓѼ »α«⌐Γ¿ ó µ¿¬½Ñ ߬ó«º∞ ¼áßß¿ó KEYTAB,
- »«¬á ¡Ñ ¡á⌐ñÑΓß∩ ¬«¡Ñµ.
- ì«, »«ß¬«½∞¬π αẼÑα φΓ«ú« ¼áßß¿óá »«½¡«ßΓ∞ε «»αÑñѽѡ ¬
- ¼«¼Ñ¡Γ𠬫¼»¿½∩µ¿¿, ºñÑß∞ ¿¼ÑÑΓß∩ í«½ÑÑ »α«ßΓá∩ 󫺼«ª¡«ßΓ∞.
- ù¿ß½« φ½Ñ¼Ñ¡Γ«ó »α«ßΓ« ÑßΓ∞
-
- SIZE OF KEYTAB / SIZE OF STRUCT KEY
-
- ñѽ« ó Γ«¼, τΓ« ó ∩ºδ¬Ñ "C" »αÑñπß¼«ΓαÑ¡á π¡áα¡á∩ «»Ñαᵿ∩
- SIZEOF, óδ»«½¡∩Ѽá∩ ó« óαѼ∩ ¬«¼»¿½∩µ¿¿, ¬«Γ«αá∩ »«ºó«½∩ÑΓ
- óδτ¿ß½¿Γ∞ αẼÑα ½εí«ú« «íΩѬΓá. éδαáªÑ¡¿Ñ
-
- SIZEOF(OBJECT)
-
- óδñáÑΓ µÑ½«Ñ, αáó¡«Ñ αẼÑαπ π¬áºá¡¡«ú« «íΩѬΓá. (ÉẼÑα «»-
- αÑñѽ∩ÑΓß∩ ó ¡Ñ߻ѵ¿Σ¿µ¿α«óá¡¡δσ Ññ¿¡¿µáσ, ¡áºδóáѼδσ "íá⌐-
- ΓἿ", ¬«Γ«αδÑ ¿¼Ñεà ëà ªÑ αẼÑα, τΓ« ¿ »ÑαѼѡ¡δÑ Γ¿»á
- CHAR). ÄíΩÑ¬Γ ¼«ªÑΓ íδΓ∞ Σá¬Γ¿τÑ߬«⌐ »ÑαѼѡ¡«⌐, ¼áßß¿ó«¼ ¿
- ßΓαπ¬Γπα«⌐, ¿½¿ ¿¼Ñ¡Ñ¼ «ß¡«ó¡«ú« Γ¿»á, ¬á¬ INT ¿½¿ DOUBLE,
- ¿½¿ ¿¼Ñ¡Ñ¼ »α«¿ºó«ñ¡«ú« Γ¿»á, ¬á¬ ßΓαπ¬Γπαá. é ¡áΦѼ ß½πτáÑ
- τ¿ß½« ¬½ετÑóδσ ß½«ó αáó¡« αẼÑαπ ¼áßß¿óá, ñѽѡ¡«¼π ¡á αáº-
- ¼Ñα «ñ¡«ú« φ½Ñ¼Ñ¡Γá ¼áßß¿óá. ¥Γ« óδτ¿ß½Ñ¡¿Ñ ¿ß»«½∞ºπÑΓß∩ ó
- πΓóÑαªñÑ¡¿¿ #DEFINE ñ½∩ πßΓá¡«ó½Ñ¡¿∩ º¡áτÑ¡¿∩ NKEYS:
-
- #DEFINE NKEYS (SIZEOF(KEYTAB) / SIZEOF(STRUCT KEY))
-
- ÆÑ»Ñα∞ »ÑαÑ⌐ñѼ ¬ Σπ¡¬µ¿¿ GETWORD. îδ Σá¬Γ¿τÑ߬¿ ¡á»¿ßá-
- ½¿ í«½ÑÑ «íΘ¿⌐ óáα¿á¡Γ Σπ¡¬µ¿¿ GETWORD, τѼ ¡Ñ«íσ«ñ¿¼« ñ½∩
- φΓ«⌐ »α«úαá¼¼δ, ¡« «¡ ¡Ñ ¡á ¼¡«ú« í«½ÑÑ ß½«ªÑ¡. öπ¡¬µ¿∩
- GETWORD ó«ºóαáΘáÑΓ ß½ÑñπεΘÑÑ "ß½«ó«" ¿º óó«ñá, úñÑ ß½«ó«¼
- ßτ¿ΓáÑΓß∩ ½¿í« ßΓ᫬á íπ¬ó ¿ µ¿Σα, ¡áτ¿¡áεΘ¿σß∩ ß íπ¬óδ, ½¿-
- í« «Γñѽ∞¡δ⌐ ß¿¼ó«½. Æ¿» «íΩѬΓá ó«ºóαáΘáÑΓß∩ ó ¬áτÑΓóÑ º¡á-
- τÑ¡¿∩ Σπ¡¬µ¿¿; φΓ« - LETTER, Ñß½¿ ¡á⌐ñÑ¡« ß½«ó«, EOF ñ½∩
- ¬«¡µá Σá⌐½á ¿ ßá¼ ß¿¼ó«½, Ñß½¿ «¡ ¡Ñ íπ¬óÑ¡¡δ⌐.
-
- GETWORD(W, LIM) /* GET NEXT WORD FROM INPUT */
- CHAR *W;
- INT LIM;
- \(
- INT C, T;
- IF (TYPE(C=*W++=GETCH()) !=LETTER) \(
- *W='\0';
- RETURN(C);
- \)
-
- - 136 -
-
- WHILE (--LIM > 0) \(
- T = TYPE(C = *W++ = GETCH());
- IF (T ! = LETTER && T ! = DIGIT) \(
- UNGETCH(C);
- BREAK;
- \)
- \)
- *(W-1) - '\0';
- RETURN(LETTER);
- \)
-
- öπ¡¬µ¿∩ GETWORD ¿ß»«½∞ºπÑΓ Σπ¡¬µ¿¿ GETCH ¿ UNGETCH, ¬«Γ«αδÑ
- ¼δ ¡á»¿ß὿ ó ú½áóÑ 4: ¬«úñá ¡áí«α á½Σáó¿Γ¡δσ ß¿¼ó«½«ó »αÑ-
- αδóáÑΓß∩, Σπ¡¬µ¿∩ GETWORD »«½πτáÑΓ «ñ¿¡ ½¿Φ¡¿⌐ ß¿¼ó«½. é αÑ-
- ºπ½∞ΓáΓÑ ó맮óá UNGETCH φΓ«Γ ß¿¼ó«½ »«¼ÑΘáÑΓß∩ ¡áºáñ ó« óó«ñ
- ñ½∩ ß½ÑñπεΘÑú« «íαáΘÑ¡¿∩.
- öπ¡¬µ¿∩ GETWORD «íαáΘáÑΓß∩ ¬ Σπ¡¬µ¿¿ TYPE ñ½∩ «»αÑñѽÑ-
- ¡¿∩ Γ¿»á ¬áªñ«ú« «Γñѽ∞¡«ú« ß¿¼ó«½á ¿º Σá⌐½á óó«ñá. é«Γ óá-
- α¿á¡Γ, ß»αáóÑñ½¿óδ⌐ Γ«½∞¬« ñ½∩ á½Σáó¿Γá ASCII.
-
- TYPE(C) /* RETURN TYPE OF ASCII CHARACTER */
- INT C;
- \(
- IF (C>= 'A' && C<= 'Z' \!\! C>= 'A' && C<= 'Z')
- RETURN(LETTER);
- ELSE IF (C>= '0' && C<= '9')
- RETURN(DIGIT);
- ELSE
- RETURN(C);
- \)
-
-
- 濼󫽿τÑ߬¿Ñ ¬«¡ßΓá¡Γδ LETTER ¿ DIGIT ¼«úπΓ ¿¼ÑΓ∞ ½εíδÑ
- º¡áτÑ¡¿∩, ½¿Φ∞ íδ «¡¿ ¡Ñ óßΓπ»á½¿ ó ¬«¡Σ½¿¬Γ ß ß¿¼ó«½á¼¿,
- «Γ½¿τ¡δ¼¿ «Γ íπ¬óÑ¡¡«-µ¿Σα«óδσ, ¿ ß EOF; «τÑó¿ñ¡« 󫺼«ªÑ¡
- ß½ÑñπεΘ¿⌐ óδí«α
-
- #DEFINE LETTER 'A'
- #DEFINE DIGIT '0'
-
- Σπ¡¬µ¿∩ GETWORD ¼«ú½á íδ αáí«ΓáΓ∞ íδßΓαÑÑ, Ñß½¿ íδ «íαáΘÑ¡¿∩
- ¬ Σπ¡¬µ¿¿ TYPE í뫨 ºá¼Ñ¡Ñ¡δ «íαáΘÑ¡¿∩¼¿ ¬ ß««ΓóÑΓßΓóπεΘѼπ
- ¼áßß¿óπ TYPE[ ]. é ßΓá¡ñáαΓ¡«⌐ í¿í½¿«ΓÑ¬Ñ ∩ºδ¬á "C" »αÑñπß-
- ¼«ΓαÑ¡δ ¼á¬α«ßδ ISALPHA ¿ ISDIGIT, ñÑ⌐ßΓóπεΘ¿Ñ ¡Ñ«íσ«ñ¿¼δ¼
- «íαẫ¼.
- ô»α᪡ѡ¿Ñ 6-1.
- --------------
- æñѽá⌐ΓÑ Γá¬πε ¼«ñ¿Σ¿¬áµ¿ε Σπ¡¬µ¿¿ GETWORD ¿ «µÑ¡¿ΓÑ,
- ¬á¬ ¿º¼Ñ¡¿Γß∩ ߬«α«ßΓ∞ αáí«Γδ »α«úαá¼¼δ.
- ô»α᪡ѡ¿Ñ 6-2.
- --------------
- ìá»¿Φ¿ΓÑ óáα¿á¡Γ Σπ¡¬µ¿¿ TYPE, ¡Ñ ºáó¿ß∩Θ¿⌐ «Γ ¬«¡¬αÑΓ-
- ¡«ú« ¡áí«αáß¿¼ó«½«ó.
-
- - 137 -
-
- ô»α᪡ѡ¿Ñ 6-3.
- --------------
- ìá»¿Φ¿ΓÑ óáα¿á¡Γ »α«úαá¼¼δ »«ñßτÑΓá ¬½ετÑóδσ ß½«ó, ¬«Γ«-
- αδ⌐ íδ ¡Ñ πτ¿Γδóá½ »«∩ó½Ñ¡¿∩ φΓ¿σ ß½«ó ó ºá¬½ετÑ¡¡δσ ó ¬á-
- óδτ¬¿ ßΓ᫬áσ.
-
- 6.4. ô¬áºáΓѽ¿ ¡á ßΓαπ¬Γπαδ.
- ùΓ«íδ »α«¿½½εßΓα¿α«óáΓ∞ ¡Ñ¬«Γ«αδÑ ß««íαáªÑ¡¿∩, ßó∩ºá¡¡δÑ
- ß ¿ß»«½∞º«ó᡿Ѽ π¬áºáΓѽÑ⌐ ¿ ¼áßß¿ó«ó ßΓαπ¬Γπα, ñáóá⌐ΓÑ
- ß¡«óá ß«ßΓáó¿¼ »α«úαá¼¼π »«ñßτÑΓá ¬½ετÑóδσ ßΓ᫬, ¿ß»«½∞ºπ∩
- ¡á φëà αẠπ¬áºáΓѽ¿, á ¡Ñ ¿¡ñѬßδ ¼áßß¿ó«ó.
- é¡ÑΦ¡ÑÑ «»¿ßá¡¿Ñ ¼áßß¿óá KEYTAB ¡Ñ ¡πª¡« ¿º¼Ñ¡∩Γ∞, ¡«
- Σπ¡¬µ¿¿ MAIN ¿ BINARY ΓαÑíπεΓ ¼«ñ¿Σ¿¬áµ¿¿.
-
- MAIN() /* COUNT C KEYWORD; POINTER VERSION */
- \(
- INT T;
- CHAR WORD[MAXWORD];
- STRUCT KEY *BINARY(), *P;
- WHILE ((T = GETWORD(WORD, MAXWORD;) !=EOF)
- IF (T==LETTER)
- IF ((P=BINARY(WORD,KEYTAB,NKEYS)) !=NULL)
- P->KEYCOUNT++;
- FOR (P=KEYTAB; P>KEYTAB + NKEYS; P++)
- IF (P->KEYCOUNT > 0)
- PRINTF("%4D %S/N", P->KEYCOUNT, P->KEYWORD);
- \)
- STRUCT KEY *BINARY(WORD, TAB, N) /* FIND WORD */
- CHAR *WORD /* IN TAB[0]...TAB[N-1] */
- STRUCT KEY TAB [];
- INT N;
- \(
- INT COND;
- STRUCT KEY *LOW = &TAB[0];
- STRUCT KEY *HIGH = &TAB[N-1];
- STRUCT KEY *MID;
- WHILE (LOW <= HIGH) \(
- MID = LOW + (HIGH-LOW) / 2;
- IF ((COND = STRCMP(WORD, MID->KEYWORD)) < 0)
- HIGH = MID - 1;
- ELSE IF (COND > 0)
- LOW = MID + 1;
- ELSE
- RETURN(MID);
- \)
- RETURN(NULL);
- \)
-
- çñÑß∞ ¿¼ÑÑΓß∩ ¡Ñ߬«½∞¬« ¼«¼Ñ¡Γ«ó, ¬«Γ«αδÑ ßΓ«¿Γ «Γ¼Ñ-
- Γ¿Γ∞. é«-»Ñαóδσ, «»¿ßá¡¿Ñ Σπ¡¬µ¿¿ BINARI ñ«½ª¡« π¬áºδóáΓ∞,
- τΓ« «¡á ó«ºóαáΘáÑΓ π¬áºáΓѽ∞ ¡á ßΓαπ¬Γπαπ Γ¿»á KEY, á ¡Ñ ¡á
- µÑ½«Ñ; φΓ« «íΩ∩ó½∩ÑΓß∩ ¬á¬ ó Σπ¡¬µ¿¿ MAIN, Γᬠ¿ ó BINARY.
- àß½¿ Σπ¡¬µ¿∩ BINARI ¡áσ«ñ¿Γ ß½«ó«, Γ« «¡á ó«ºóαáΘáÑΓ π¬áºá-
- Γѽ∞ ¡á ¡Ñú«; Ñß½¿ ªÑ ¡ÑΓ, «¡á ó«ºóαáΘáÑΓ NULL.
-
- - 138 -
-
- é«-óΓ«αδσ, óßÑ «íαáΘÑ¡¿∩ ¬ φ½Ñ¼Ñ¡Γá¼ ¼áßß¿óá KEYTAB «ßπ-
- ΘÑßΓó½∩εΓß∩ τÑαѺ π¬áºáΓѽ¿. ¥Γ« ó½ÑτÑΓ ºá ß«í«⌐ «ñ¡« ßπΘÑß-
- ΓóÑ¡¡«Ñ ¿º¼Ñ¡Ñ¡¿Ñ ó Σπ¡¬µ¿¿ BINARY: ßαÑñ¡¿⌐ φ½Ñ¼Ñ¡Γ í«½∞ΦÑ
- ¡Ñ½∞º∩ óδτ¿ß½∩Γ∞ »α«ßΓ« »« Σ«α¼π½Ñ
-
- MID = (LOW + HIGH) / 2
-
- »«Γ«¼π τΓ« ß½«ªÑ¡¿Ñ ñóπσ π¬áºáΓѽÑ⌐ ¡Ñ ñáÑΓ ¬á¬«ú«-¡¿íπñ∞
- »«½Ñº¡«ú« αѺπ½∞ΓáΓá (ñáªÑ »«ß½Ñ ñѽѡ¿∩ ¡á 2) ¿ ó ñÑ⌐ßΓó¿-
- Γѽ∞¡«ßΓ¿ ∩ó½∩ÑΓß∩ ¡Ñºá¬«¡¡δ¼. φΓπ Σ«α¼π½π ¡áñ« ºá¼Ñ¡¿Γ∞ ¡á
-
- MID = LOW + (HIGH-LOW) / 2
-
- ó αѺπ½∞ΓáΓÑ ¬«Γ«α«⌐ MID ßΓá¡«ó¿Γß∩ π¬áºáΓѽѼ ¡á φ½Ñ¼Ñ¡Γ,
- αáß»«½«ªÑ¡¡δ⌐ »«ßÑαÑñ¿¡Ñ ¼Ñªñπ LOW ¿ HIGH.
- éá¼ Γá¬ªÑ ß½ÑñπÑΓ αẫíαáΓ∞ß∩ ó ¿¡¿µ¿á½¿ºáµ¿¿ LOW ¿
- HIGH. π¬áºáΓѽ∞ ¼«ª¡« ¿¡¿µ¿á½¿º¿α«óáΓ∞ áñαÑß«¼ αá¡ÑÑ «»αÑñÑ-
- ½Ñ¡¡«ú« «íΩѬΓá; ¿¼Ñ¡¡« ¬á¬ ¼δ ºñÑß∞ ¿ »«ßΓπ»¿½¿.
- é Σπ¡¬µ¿¿ MAIN ¼δ ¡á»¿ß὿
-
- FOR (P=KEYTAB; P < KEYTAB + NKEYS; P++)
-
- àß½¿ P ∩ó½∩ÑΓß∩ π¬áºáΓѽѼ ßΓαπ¬Γπαδ, Γ« ½εíá∩ áα¿Σ¼ÑΓ¿¬á ß
- P πτ¿ΓδóáÑΓ Σá¬Γ¿τÑ߬¿⌐ αẼÑα ñá¡¡«⌐ ßΓαπ¬Γπαδ, ΓᬠτΓ« P++
- πóѽ¿τ¿óáÑΓ P ¡á ¡πª¡πε óѽ¿τ¿¡π, ó αѺπ½∞ΓáΓÑ τÑú« P π¬áºδ-
- óáÑΓ ¡á ß½ÑñπεΘ¿⌐ φ½Ñ¼Ñ¡Γ ¼áßß¿óá ßΓαπ¬Γπα. ì« ¡Ñ ßτ¿Γá⌐ΓÑ,
- τΓ« αẼÑα ßΓαπ¬Γπαδ αáóÑ¡ ßπ¼¼Ñ αẼÑα«ó ÑÑ τ½Ñ¡«ó, - ¿º-ºá
- ΓαÑí«óá¡¿⌐ óδαáó¡¿óá¡¿∩ ñ½∩ αẽ¿τ¡δσ «íΩÑ¬Γ«ó ó ßΓαπ¬ΓπαÑ
- ¼«úπΓ ó«º¡¿¬áΓ∞ "ñδαδ".
- ê, ¡á¬«¡Ñµ, ¡Ñ߬«½∞¬« óΓ«α«ßΓѻѡ¡δ⌐ ó«»α«ß « Σ«α¼Ñ ºá-
- »¿ß¿ »α«úαá¼¼δ. àß½¿ ó«ºóαáΘáѼá∩ Σπ¡¬µ¿Ñ⌐ óѽ¿τ¿¡á ¿¼ÑÑΓ
- Γ¿», ¬á¬, ¡á»α¿¼Ñα, ó
-
- STRUCT KEY *BINARY(WORD, TAB, N)
-
- T« ¼«ªÑΓ «¬áºáΓ∞ß∩, τΓ« ¿¼∩ Σπ¡¬µ¿¿ Γαπñ¡« óδñѽ¿Γ∞ ßαÑñ¿
- ΓѬßΓá. é ßó∩º¿ ß φΓ¿¼ ¿¡«úñá ¿ß»«½∞ºπÑΓß∩ ñαπú«⌐ ßΓ¿½∞ ºá-
- »¿ß¿:
-
- STRUCT KEY *
- BINARY(WORD, TAB, N)
-
- ¥Γ« ú½áó¡δ¼ «íαẫ¼ ñѽ« ó¬πßá; óδíÑα¿ΓÑ Γπ Σ«α¼π, ¬«Γ«αá∩
- óá¼ ¡αáó¿Γß∩, ¿ »α¿ñÑনóá⌐ΓÑß∞ ÑÑ.
-
- 6.5. æΓαπ¬Γπαδ, ßßδ½áεΘ¿Ñß∩ ¡á ßÑí∩.
- ÅαÑñ»«½«ª¿¼, τΓ« ¡á¼ ¡áñ« ß»αáó¿Γ∞ß∩ ß í«½ÑÑ «íΘÑ⌐ ºáñá-
- τÑ⌐, ß«ßΓ«∩ΘÑ⌐ ó »«ñßτÑΓÑ τ¿ß½á »«∩ó½Ñ¡¿⌐ óßÑσ ß½«ó ó ¡Ñ¬«-
- Γ«α«¼ Σá⌐½Ñ óó«ñá. Æá¬ ¬á¬ ß»¿ß«¬ ß½«ó ºáαá¡ÑÑ ¡Ñ ¿ºóÑßΓÑ¡,
- ¼δ ¡Ñ ¼«ªÑ¼ ¿σ π»«α∩ñ«τ¿Γ∞ πñ«í¡δ¼ «íαẫ¼ ¿ ¿ß»«½∞º«óáΓ∞
- í¿¡áα¡δ⌐ »«¿ß¬. îδ ñáªÑ ¡Ñ ¼«ªÑ¼ «ßπΘÑßΓó½∩Γ∞ »«ß½Ññ«óáΓѽ∞-
- ¡δ⌐ »α«ß¼«Γα »α¿ »«ßΓπ»½Ñ¡¿¿ ¬áªñ«ú« ß½«óá, ß ΓѼ τΓ«íδ πß-
- Γá¡«ó¿Γ∞, ¡Ñ óßΓαÑτὫß∞ ½¿ «¡« αá¡ÑÑ; Γá¬á∩ »α«úαá¼¼á íπñÑΓ
- αáí«ΓáΓ∞ óÑτ¡«. (ü«½ÑÑ Γ«τ¡«, «ª¿ñáѼ«Ñ óαѼ∩ αáí«Γδ αáßΓÑΓ
- ¬á¬ ¬óáñαáΓ τ¿ß½á óó«ñ¿¼δσ ß½«ó). èᬠªÑ ¡á¼ «αúá¡¿º«óáΓ∞
- »α«úαá¼¼π, τΓ«íδ ß»αáó¿Γ∞ß∩ ß« ß»¿ß¬«¼ »α«¿ºó«½∞¡δσ ß½«ó?
-
- - 139 -
-
- Äñ¡« ¿º αÑΦÑ¡¿⌐ ß«ßΓ«¿Γ ó Γ«¼, τΓ«íδ óßÑ óαѼ∩ σαá¡¿Γ∞
- ¼áßß¿ó »«ßΓπ»áεΘ¿σ ñ« ß¿σ »«α ß½«ó ó π»«α∩ñ«τÑ¡¡«¼ ó¿ñÑ, »«-
- ¼ÑΘá∩ ¬áªñ«Ñ ß½«ó« ó ¡πª¡«Ñ ¼ÑßΓ« »« ¼ÑαÑ ¿σ »«ßΓπ»½Ñ¡¿∩.
- Oä¡á¬« φΓ« ¡Ñ ß½ÑñπÑΓ ñѽáΓ∞, »ÑαѼÑΘá∩ ß½«óá ó ½¿¡Ñ⌐¡«¼
- ¼áßß¿óÑ, - φΓ« Γá¬ªÑ »«ΓαÑíπÑΓ ß½¿Φ¬«¼ ¼¡«ú« óαѼѡ¿. é¼ÑßΓ«
- φΓ«ú« ¼δ ¿ß»«½∞ºπѼ ßΓαπ¬Γπαπ ñá¡¡δσ, ¡áºδóáѼπε ñ«¿τ¡δ¼ ñÑ-
- αÑó«¼.
- èáªñ«¼π ¡«ó«¼π ß½«óπ ß««ΓóÑΓßΓóπÑΓ «ñ¿¡ "πºÑ½" ñÑαÑóá;
- ¬áªñδ⌐ πºÑ½ ß«ñÑনΓ:
- π¬áºáΓѽ∞ ΓѬßΓá ß½«óá
- ----------------------
- ßτÑΓτ¿¬ τ¿ß½á »«∩ó½Ñ¡¿⌐
- -----------------------
- π¬áºáΓѽ∞ πº½á ½Ñó«ú« »«Γ«¼¬á
- -----------------------------
- π¬áºáΓѽ∞ πº½á »αáó«ú« »«Γ«¼¬á
- ------------------------------
- 쿬ᬫ⌐ πºÑ½ ¡Ñ ¼«ªÑΓ ¿¼ÑΓ∞ í«½ÑÑ ñóπσ ñÑΓÑ⌐; 󫺼«ª¡« «Γ-
- ßπΓßó¿Ñ ñÑΓÑ⌐ ¿½¿ ¡á½¿τ¿Ñ Γ«½∞¬« «ñ¡«ú« »«Γ«¼¬á.
- ôº½δ ß«ºñáεΓß∩ Γᬿ¼ «íαẫ¼, τΓ« ½Ñó«Ñ »«ññÑαÑó« ¬áªñ«-
- ú« πº½á ß«ñÑαª¿Γ Γ«½∞¬« ΓÑ ß½«óá, ¬«Γ«αδÑ ¼Ñ¡∞ΦÑ ß½«óá ó
- φΓ«¼ πº½Ñ, á »αáó«Ñ »«ññÑαÑó« Γ«½∞¬« ΓÑ ß½«óá, ¬«Γ«αδÑ í«½∞-
- ΦÑ. ùΓ«íδ «»αÑñѽ¿Γ∞, ¡áσ«ñ¿Γß∩ ½¿ ¡«ó«Ñ ß½«ó« πªÑ ó ñÑαÑóÑ,
- ¡áτ¿¡áεΓ ß ¬«α¡∩ ¿ ßαáó¡¿óáεΓ ¡«ó«Ñ ß½«ó« ß« ß½«ó«¼, σαá¡∩-
- Θ¿¼ß∩ ó φΓ«¼ πº½Ñ. àß½¿ ß½«óá ß«ó»áñáεΓ, Γ« ó«»α«ß αÑΦáÑΓß∩
- πΓóÑαñ¿Γѽ∞¡«. àß½¿ ¡«ó«Ñ ß½«ó« ¼Ñ¡∞ΦÑ ß½«óá ó ñÑαÑóÑ, Γ«
- »ÑαÑσ«ñ∩Γ ¬ αáßß¼«ΓαÑ¡¿ε ½Ñó«ú« »«Γ«¼¬á; ó »α«Γ¿ó¡«¼ ß½πτáÑ
- ¿ßß½ÑñπÑΓß∩ »αáóδ⌐ »«Γ«¼«¬. àß½¿ ó ¡πª¡«¼ ¡á»αáó½Ñ¡¿¿ »«Γ«-
- ¼«¬ «ΓßπΓßΓóπÑΓ, Γ« º¡áτ¿Γ ¡«ó«Ñ ß½«ó« ¡Ñ ¡áσ«ñ¿Γß∩ ó ñÑαÑóÑ
- ¿ ¼ÑßΓ« φΓ«ú« ¡Ññ«ßΓáεΘÑú« »«Γ«¼¬á ¬á¬ αẠ¿ ∩ó½∩ÑΓß∩ ¼Ñß-
- Γ«¼, ¬πñá ß½ÑñπÑΓ »«¼ÑßΓ¿Γ∞ ¡«ó«Ñ ß½«ó«. ū߬«½∞¬π »«¿ß¬ ¿º
- ½εí«ú« πº½á »α¿ó«ñ¿Γ ¬ »«¿ß¬π «ñ¡«ú« ¿º Ñú« »«Γ«¼¬«ó, Γ« ßá¼
- »α«µÑßß »«¿ß¬á »« ßπΘÑßΓóπ ∩ó½∩ÑΓß∩ αѬπαß¿ó¡δ¼. é ß««ΓóÑΓß-
- Γó¿¿ ß φΓ¿¼ ¡á¿í«½ÑÑ ÑßΓÑßΓóÑ¡¡« ¿ß»«½∞º«óáΓ∞ αѬπαß¿ó¡δÑ
- »α«µÑñπαδ óó«ñá ¿ óδó«ñá.
- 髺óαáΘá∩ß∞ ¡áºáñ ¬ «»¿ßá¡¿ε πº½á, ∩ß¡«, τΓ« φΓ« íπñÑΓ
- ßΓαπ¬Γπαá ß τÑΓδα∞¼∩ ¬«¼»«¡Ñ¡ΓἿ:
-
- STRUCT TNODE \( /* THE BASIC NODE */
- CHAR *WORD; /* POINTS TO THE TEXT */
- INT COUNT; /* NUMBER OF OCCURRENCES */
- STRUCT TNODE *LEFT; /* LEFT CHILD */
- STRUCT TNODE *RIGHT; /* RIGHT CHILD */
- \);
-
- ¥Γ« "αѬπαß¿ó¡«Ñ" «»¿ßá¡¿Ñ πº½á ¼«ªÑΓ »«¬áºáΓ∞ß∩ α¿ß¬«óá¡-
- ¡δ¼, ¡« ¡á ßἫ¼ ñÑ½Ñ «¡« 󻫽¡Ñ ¬«ααÑ¬Γ¡«. æΓαπ¬Γπαá ¡Ñ
- ¿¼ÑÑΓ »αáóá ß«ñÑαªáΓ∞ ßß佬π ¡á ßá¼π ßÑí∩, ¡«
-
- STRUCT TNODE *LEFT;
-
- «»¿ßδóáÑΓ LEFT ¬á¬ π¬áºáΓѽ∞ ¡á πºÑ½, á ¡Ñ ¬á¬ ßá¼ πºÑ½.
-
- - 140 -
-
- ÆÑ¬ßΓ ßἫ⌐ »α«úαá¼¼δ «¬áºδóáÑΓß∩ πñ¿ó¿Γѽ∞¡« ¼á½Ñ¡∞¬¿¼,
- Ñß½¿, ¬«¡Ñτ¡«, ¿¼ÑΓ∞ ó αáß»«α∩ªÑ¡¿¿ ¡áí«α ¡á»¿ßá¡¡δσ ¡á¼¿
- αá¡ÑÑ »α«µÑñπα, «íÑß»Ñτ¿óáεΘ¿σ ¡πª¡δÑ ñÑ⌐ßΓó¿∩. îδ ¿¼ÑѼ ó
- ó¿ñπ Σπ¡¬µ¿ε GETWORD ñ½∩ ¿ºó½ÑτÑ¡¿∩ ¬áªñ«ú« ß½«óá ¿º Σá⌐½á
- óó«ñá ¿ Σπ¡¬µ¿ε ALLOC ñ½∩ óδñѽѡ¿∩ ¼ÑßΓá ñ½∩ σαá¡Ñ¡¿∩ ß½«ó.
- éÑñπΘá∩ »α«úαá¼¼á »α«ßΓ« ßτ¿ΓδóáÑΓ ß½«óá ß »«¼«Θ∞ε Σπ¡¬-
- µ¿¿ GETWORD ¿ »«¼ÑΘáÑΓ ¿σ ó ñÑαÑó«, ¿ß»«½∞ºπ∩ Σπ¡¬µ¿ε TREE.
-
- #DEFINE MAXWORD 20
- MAIN() /* WORD FREGUENCY COUNT */
- \(
- STRUCT TNODE *ROOT, *TREE();
- CHAR WORD[MAXWORD];
- INT T;
- ROOT = NULL;
- WHILE ((T = GETWORD(WORD, MAXWORD)) \! = EOF)
- IF (T == LETTER)
- ROOT = TREE(ROOT, WORD);
- TREEPRINT(ROOT);
- \)
-
- öπ¡¬µ¿∩ TREE ßá¼á »« ßÑíÑ »α«ßΓá. æ½«ó« »ÑαÑñáÑΓß∩ Σπ¡¬-
- µ¿Ñ⌐ MAIN ¬ óÑασ¡Ñ¼π πα«ó¡ε (¬«α¡ε) ñÑαÑóá. ìá ¬áªñ«¼ φΓá»Ñ
- φΓ« ß½«ó« ßαáó¡¿óáÑΓß∩ ß« ß½«ó«¼, πªÑ σαá¡∩Θ¿¼ß∩ ó φΓ«¼ πº-
- ½Ñ, ¿ ß »«¼«Θ∞ε αѬπαß¿ó¡«ú« «íαáΘÑ¡¿∩ ¬ TREE »α«ßáτ¿óáÑΓß∩
- 󡿺 ½¿í« ¬ ½Ñó«¼π, ½¿í« ¬ »αáó«¼π »«ññÑαÑóπ. é ¬«¡µÑ ¬«¡µ«ó
- φΓ« ß½«ó« ½¿í« ß«ó»áñáÑΓ ß ¬á¬¿¼-Γ« ß½«ó«¼, πªÑ ¡áσ«ñ∩Θ¿¼ß∩
- ó ñÑαÑóÑ (ó φΓ«¼ ß½πτáÑ ßτÑΓτ¿¬ πóѽ¿τ¿óáÑΓß∩ ¡á Ññ¿¡¿µπ),
- ½¿í« »α«úαá¼¼á ¡áΓ«½¬¡ÑΓß∩ ¡á ¡π½Ñó«⌐ π¬áºáΓѽ∞, ßó¿ñÑΓѽ∞-
- ßΓóπεΘ¿⌐ « ¡Ñ«íσ«ñ¿¼«ßΓ¿ ß«ºñá¡¿∩ ¿ ñ«íáó½Ñ¡¿∩ ¬ ñÑαÑóπ ¡«-
- ó«ú« πº½á. é ß½πτáÑ ß«ºñá¡¿∩ ¡«ó«ú« πº½á Σπ¡¬µ¿∩ TREE ó«ºó-
- αáΘáÑΓ π¬áºáΓѽ∞ φΓ«ú« πº½á, ¬«Γ«αδ⌐ »«¼ÑΘáÑΓß∩ ó α«ñ¿Γѽ∞-
- ߬¿⌐ πºÑ½.
-
- STRUCT TNODE *TREE(P, W)
- /* INSTALL W AT OR BELOW P */
- STRUCT TNODE *P;
- CHAR *W;
- \(
- STRUCT TNODE *TALLOC();
- CHAR *STRSAVE();
- INT COND;
- IF (P == NULL) \( /* A NEW WORD
- HAS ARRIVED */
- P == TALLOC(); /* MAKE A NEW NODE */
- P->WORD = STRSAVE(W);
- P->COUNT = 1;
- P->LEFT = P->RIGHT = NULL;
- \) ELSE IF ((COND = STRCMP(W, P->WORD)) == 0)
- P->COUNT++; /* REPEATED WORD */
- ELSE IF (COND < 0)/* LOWER GOES INTO LEFT SUBTREE */
- P->LEFT = TREE(P->LEFT, W);
- ELSE /* GREATER INTO RIGHT SUBTREE */
- P->RIGHT = TREE(P->RIGHT, W);
- RETURN(P);
- \)
- - 141 -
-
- Åá¼∩Γ∞ ñ½∩ ¡«ó«ú« πº½á óδñѽ∩ÑΓß∩ Σπ¡¬µ¿Ñ⌐ TALLOC, ∩ó½∩-
- εΘÑ⌐ß∩ áñá»ΓᵿÑ⌐ ñ½∩ ñá¡¡«ú« ß½πτá∩ Σπ¡¬µ¿¿ ALLOC, ¡á»¿ßá¡-
- ¡«⌐ ¡á¼¿ αá¡ÑÑ. Ä¡á ó«ºóαáΘáÑΓ π¬áºáΓѽ∞ ßó«í«ñ¡«ú« »α«ßΓ-
- αá¡ßΓóá, »α¿ú«ñ¡«ú« ñ½∩ σαá¡Ñ¡¿∩ ¡«ó«ú« πº½á ñÑαÑóá. (îδ
- ó߬«αÑ «íßπñ¿¼ φΓ« »«ñα«í¡ÑÑ). ì«ó«Ñ ß½«ó« ¬«»¿απÑΓß∩ Σπ¡¬-
- µ¿Ñ⌐ STRSAVE ó ߬αδΓ«Ñ ¼ÑßΓ«, ßτÑΓτ¿¬ ¿¡¿µ¿á½¿º¿απÑΓß∩ Ññ¿-
- ¡¿µÑ⌐, ¿ π¬áºáΓѽ¿ «í«¿σ »«Γ«¼¬«ó »«½áúáεΓß∩ αáó¡δ¼¿ ¡π½ε.
- ¥Γá τáßΓ∞ »α«úαá¼¼δ óδ»«½¡∩ÑΓß∩ Γ«½∞¬« »α¿ ñ«íáó½Ñ¡¿¿ ¡«ó«ú«
- πº½á ¬ αÑíαπ ñÑαÑóá. îδ ºñÑß∞ «»πßΓ¿½¿ »α«óÑα¬π ¡á «Φ¿í¬¿
- ó«ºóαáΘáѼδσ Σπ¡¬µ¿⌐ STRSAVE ¿ TALLOC º¡áτÑ¡¿⌐ (τΓ« ¡Ñαáºπ¼-
- ¡« ñ½∩ »αá¬Γ¿τÑ߬¿ αáí«ΓáεΘÑ⌐ »α«úαá¼¼δ).
- öπ¡¬µ¿∩ TREEPRINT »ÑτáΓáÑΓ ñÑαÑó«, ¡áτ¿¡á∩ ß ½Ñó«ú« »«ñ-
- ñÑαÑóá; ó ¬áªñ«¼ πº½Ñ ß¡áτá½á »ÑτáΓáÑΓß∩ ½Ñó«Ñ »«ññÑαÑó«
- (óßÑ ß½«óá, ¬«Γ«αδÑ ¼½áñΦÑ φΓ«ú« ß½«óá), ºáΓѼ ßἫ ß½«ó«, á
- ºáΓѼ »αáó«Ñ »«ññÑαÑó« (óßÑ ß½«óá, ¬«Γ«αδÑ ßΓáαΦÑ). àß½¿ óδ
- ¡ÑπóÑαÑ¡¡« «»Ñα¿απÑΓÑ ß αѬπαß¿Ñ⌐, ¡áα¿ßπ⌐ΓÑ ñÑαÑó« ßἿ ¿
- ¡á»ÑτáΓá⌐ΓÑ Ñú« ß »«¼«Θ∞ε Σπ¡¬µ¿¿ TREEPRINT ; φΓ« «ñ¡á ¿º
- ¡á¿í«½ÑÑ ∩ß¡δσ αѬπαß¿ó¡δσ »α«µÑñπα, ¬«Γ«απε ¼«ª¡« ¡á⌐Γ¿.
-
- TREEPRINT (P) /* PRINT TREE P RECURSIVELY */
- STRUCT TNODE *P;
- \(
- IF (P != NULL) \(
- TREEPRINT (P->LEFT);
- PRINTF("%4D %S\N", P->COUNT, P->WORD);
- TREEPRINT (P->RIGHT);
- \)
- \)
-
- Åαá¬Γ¿τÑ߬«Ñ ºá¼Ñτá¡¿Ñ: Ñß½¿ ñÑαÑó« ßΓá¡«ó¿Γß∩ "¡Ñßíá-
- ½á¡ß¿α«óá¡¡δ¼" ¿º-ºá Γ«ú«, τΓ« ß½«óá »«ßΓπ»áεΓ ¡Ñ ó ß½πτá⌐-
- ¡«¼ »«α∩ñ¬Ñ, Γ« óαѼ∩ αáí«Γδ »α«úαá¼¼δ ¼«ªÑΓ αáßΓ¿ ß½¿Φ¬«¼
- íδßΓα«. é σπñΦѼ ß½πτáÑ, ¬«úñá »«ßΓπ»áεΘ¿Ñ ß½«óá πªÑ π»«α∩-
- ñ«τÑ¡δ, ¡áßΓ«∩Θá∩ »α«úαá¼¼á «ßπΘÑßΓó½∩ÑΓ ñ«α«ú«ßΓ«∩Θπε ¿¼¿-
- Γáµ¿ε ½¿¡Ñ⌐¡«ú« »«¿ß¬á. æπΘÑßΓóπεΓ αẽ¿τ¡δÑ «í«íΘÑ¡¿∩ ñó«-
- ¿τ¡«ú« ñÑαÑóá, «ß«íÑ¡¡« 2-3 ñÑαÑó∞∩ ¿ AVL ñÑαÑó∞∩, ¬«Γ«αδÑ
- ¡Ñ óÑñπΓ ßÑí∩ Γᬠ"ó σπñΦ¿σ ß½πτá∩σ", ¡« ¼δ ¡Ñ íπñѼ ºñÑß∞
- ¡á ¡¿σ «ßΓá¡áó½¿óáΓ∞ß∩.
- ÅαѪñÑ τѼ αáßßΓáΓ∞ß∩ ß φΓ¿¼ »α¿¼Ñα«¼, π¼ÑßΓ¡« ßñѽáΓ∞
- ¡Ñí«½∞Φ«Ñ «ΓßΓπ»½Ñ¡¿Ñ ó ßó∩º¿ ß ó«»α«ß«¼ « αáß»αÑñѽѡ¿¿ »á-
- ¼∩Γ¿. ƒß¡«, τΓ« ó »α«úαá¼¼Ñ ªÑ½áΓѽ∞¡« ¿¼ÑΓ∞ Γ«½∞¬« «ñ¿¡
- αáß»αÑñѽ¿Γѽ∞ »á¼∩Γ¿, ñáªÑ Ñß½¿ Ѽπ »α¿σ«ñ¿Γß∩ αẼÑΘáΓ∞
- αẽ¿τ¡δÑ ó¿ñδ «íΩÑ¬Γ«ó. ì« Ñß½¿ ¼δ σ«Γ¿¼ ¿ß»«½∞º«óáΓ∞ «ñ¿¡
- αáß»αÑñѽ¿Γѽ∞ »á¼∩Γ¿ ñ½∩ «íαáí«Γ¬¿ ºá»α«ß«ó ¡á óδñѽѡ¿Ñ
- »á¼∩Γ¿ ñ½∩ π¬áºáΓѽÑ⌐ ¡á »ÑαѼѡ¡δÑ Γ¿»á CHAR ¿ ñ½∩ π¬áºáΓÑ-
- ½Ñ⌐ ¡á STRUCT TNODE, Γ« »α¿ φΓ«¼ 󫺡¿¬áεΓ ñóá ó«»α«ßá. ÅÑα-
- óδ⌐: ¬á¬ óδ»«½¡¿Γ∞ Γ« ßπΘÑßΓóπεΘÑÑ ¡á í«½∞Φ¿¡ßΓóÑ αÑá½∞¡δσ
- ¼áΦ¿¡ «úαá¡¿τÑ¡¿Ñ, τΓ« «íΩѬΓδ «»αÑñѽѡ¡δσ Γ¿»«ó ñ«½ª¡δ
- πñ«ó½ÑΓó«α∩Γ∞ ΓαÑí«óá¡¿∩¼ óδαáó¡¿óá¡¿∩ (¡á»α¿¼Ñα, τáßΓ« µÑ-
- ½δÑ ñ«½ª¡δ αẼÑΘáΓ∞ß∩ ó τÑΓ¡δσ áñαÑßáσ)? éΓ«α«⌐: ¬á¬ «αúá-
- ¡¿º«óáΓ∞ «»¿ßá¡¿∩, τΓ«íδ ß»αáó¿Γ∞ß∩ ß ΓѼ, τΓ« Σπ¡¬µ¿∩ ALLOC
- ñ«½ª¡á ó«ºóαáΘáΓ∞ αẽ¿τ¡δÑ ó¿ñδ π¬áºáΓѽÑ⌐ ?
-
- - 142 -
-
-
- é««íΘÑ ú«ó«α∩, ΓαÑí«óá¡¿∩ óδαáó¡¿óá¡¿∩ ½Ñú¬« óδ»«½¡¿Γ∞
- ºá ßτÑΓ óδñѽѡ¿∩ ¡Ñ¬«Γ«α«ú« ½¿Φ¡Ñú« »α«ßΓαá¡ßΓóá, »α«ßΓ«
- «íÑß»Ñτ¿ó Γ«, τΓ«íδ αáß»αÑñѽ¿Γѽ∞ »á¼∩Γ¿ óßÑúñá ó«ºóαáΘá½
- π¬áºáΓѽ∞, πñ«ó½ÑΓó«α∩εΘ¿⌐ óßѼ «úαá¡¿τÑ¡¿∩¼ óδαáó¡¿óá¡¿∩.
- ìá»α¿¼Ñα, ¡á PDP-11 ñ«ßΓáΓ«τ¡«, τΓ«íδ Σπ¡¬µ¿∩ ALLOC óßÑúñá
- ó«ºóαáΘá½á τÑΓ¡δ⌐ π¬áºáΓѽ∞, »«ß¬«½∞¬π ó τÑΓ¡δ⌐ áñαÑß ¼«ª¡«
- »«¼ÑßΓ¿Γ∞ ½εí«⌐ Γ¿» «íΩѬΓá. Ññ¿¡ßΓóÑ¡¡δ⌐ αáßσ«ñ »α¿ φΓ«¼ -
- ½¿Φ¡¿⌐ ß¿¼ó«½ »α¿ ºá»α«ßÑ ¡á ¡ÑτÑΓ¡πε ñ½¿¡π. ǡὫú¿τ¡δÑ
- ñÑ⌐ßΓó¿∩ »αÑñ»α¿¡¿¼áεΓß∩ ¡á ñαπú¿σ ¼áΦ¿¡áσ. Æá¬¿¼ «íαẫ¼,
- αÑ὿ºáµ¿∩ ALLOC ¼«ªÑΓ ¡Ñ «¬áºáΓ∞ß∩ »ÑαÑ¡«ß¿¼«⌐, ¡« ÑÑ ¿ß-
- »«½∞º«óá¡¿Ñ íπñÑΓ »ÑαÑ¡«ß¿¼δ¼. öπ¡¬µ¿∩ ALLOC ¿º ú½áóδ 5 ¡Ñ
- »αÑñπß¼áΓα¿óáÑΓ ¡¿¬á¬«ú« «»αÑñѽѡ¡«ú« óδαáó¡¿óá¡¿∩; ó ú½áóÑ
- 8 ¼δ »α«ñѼ«¡ßΓα¿απѼ, ¬á¬ »αáó¿½∞¡« óδ»«½¡¿Γ∞ φΓπ ºáñáτπ.
- é«»α«ß «»¿ßá¡¿∩ Γ¿»á Σπ¡¬µ¿¿ ALLOC ∩ó½∩ÑΓß∩ ¼πτ¿Γѽ∞¡δ¼
- ñ½∩ ½εí«ú« ∩ºδ¬á, ¬«Γ«αδ⌐ ßÑα∞Ѻ¡« «Γ¡«ß¿Γß∩ ¬ »α«óÑα¬Ñ Γ¿-
- »«ó. ïπτΦ¿⌐ ß»«ß«í ó ∩ºδ¬Ñ "C" - «íΩ∩ó¿Γ∞, τΓ« ALLOC ó«ºóαá-
- ΘáÑΓ π¬áºáΓѽ∞ ¡á »ÑαѼѡ¡πε Γ¿»á CHAR, á ºáΓѼ ∩ó¡« »αÑ«í-
- αẫóáΓ∞ φëà π¬áºáΓѽ∞ ¬ ªÑ½áѼ«¼π Γ¿»π ß »«¼«Θ∞ε «»Ñαᵿ¿
- »ÑαÑó«ñá Γ¿»«ó. Æá¬¿¼ «íαẫ¼, Ñß½¿ «»¿ßáΓ∞ P ó ó¿ñÑ
-
- CHAR *P;
- Γ«
- (STRUCT TNODE *) P
-
- »αÑ«íαáºπÑΓ Ñú« ó óδαáªÑ¡¿∩σ ó π¬áºáΓѽ∞ ¡á ßΓαπ¬Γπαπ Γ¿»á
- TNODE . æ½Ññ«óáΓѽ∞¡«, Σπ¡¬µ¿ε TALLOC ¼«ª¡« ºá»¿ßáΓ∞ ó ó¿ñÑ:
-
- STRUCT TNODE *TALLOC()
- \(
- CHAR *ALLOC();
-
- RETURN ((STRUCT TNODE *) ALLOC(SIZEOF(STRUCT TNODE)));
- \)
-
-
- φΓ« í«½ÑÑ τѼ ñ«ßΓáΓ«τ¡« ñ½∩ αáí«ΓáεΘ¿σ ó ¡áßΓ«∩ΘÑÑ óαѼ∩
- ¬«¼»¿½∩Γ«α«ó, ¡« φΓ« ¿ ßá¼δ⌐ íѺ«»áß¡δ⌐ »πΓ∞ ß πτÑΓ«¼ íπñπε-
- ΘÑú«.
- ô»α᪡ѡ¿Ñ 6-4.
- ----------------
- ìá»¿Φ¿ΓÑ »α«úαá¼¼π, ¬«Γ«αá∩ τ¿ΓáÑΓ "C"-»α«úαá¼¼π ¿ »Ñτá-
- ΓáÑΓ ó á½Σáó¿Γ¡«¼ »«α∩ñ¬Ñ ¬áªñπε úαπ»»π ¿¼Ñ¡ »ÑαѼѡ¡δσ, ¬«-
- Γ«αδÑ ß«ó»áñáεΓ ó »Ñαóδσ ßѼ¿ ß¿¼ó«½áσ, ¡« «Γ½¿τáεΓß∩ úñÑ-Γ«
- ñá½∞ΦÑ. (æñѽá⌐ΓÑ Γá¬, τΓ«íδ 7 í佫 »áαá¼ÑΓα«¼).
- ô»α᪡ѡ¿Ñ 6-5.
- ----------------
- ìá»¿Φ¿ΓÑ »α«úαá¼¼π óδñáτ¿ »ÑαѬαÑßΓ¡δσ ßß佫¬, Γ.Ñ.
- Åα«úαá¼¼π, ¬«Γ«αá∩ »ÑτáΓáÑΓ ß»¿ß«¬ óßÑσ ß½«ó ñ«¬π¼Ñ¡Γá ¿ ñ½∩
- ¬áªñ«ú« ¿º φΓ¿σ ß½«ó »ÑτáΓáÑΓ ß»¿ß«¬ ¡«¼Ñα«ó ßΓ᫬, ó ¬«Γ«-
- αδÑ φΓ« ß½«ó« óσ«ñ¿Γ.
- ô»α᪡ѡ¿Ñ 6-6.
- ----------------
- ìá»¿Φ¿ΓÑ »α«úαá¼¼π, ¬«Γ«αá∩ »ÑτáΓáÑΓ ß½«óá ¿º ßó«Ñú«
- Σá⌐½á óó«ñá, αáß»«½«ªÑ¡¡δÑ ó »«α∩ñ¬Ñ πíδóá¡¿∩ τáßΓ«Γδ ¿σ »«-
- ∩ó½Ñ¡¿∩. ÅÑαÑñ ¬áªñδ¼ ß½«ó«¼ ¡á»ÑτáΓá⌐ΓÑ τ¿ß½« Ñú« »«∩ó½Ñ-
- ¡¿⌐.
- - 143 -
-
- 6.6. Å«¿ß¬ ó Γáí½¿µÑ.
- ä½∩ ¿½½εßΓαᵿ¿ ñá½∞¡Ñ⌐Φ¿σ áß»Ñ¬Γ«ó ¿ß»«½∞º«óá¡¿∩ ßΓαπ¬-
- Γπα ó φΓ«¼ αáºñÑ½Ñ ¼δ ¡á»¿ΦѼ »α«úαá¼¼π, »αÑñßΓáó½∩εΘπε ß«-
- í«⌐ ß«ñÑন¼«Ñ »á¬ÑΓá »«¿ß¬á ó Γáí½¿µÑ. ¥Γá »α«úαá¼¼á ∩ó½∩-
- ÑΓß∩ Γ¿»¿τ¡δ¼ »αÑñßΓáó¿ΓѽѼ »«ñ»α«úαá¼¼ π»αáó½Ñ¡¿∩ ß¿¼ó«½∞-
- ¡δ¼¿ Γáí½¿µá¼¿ ¼á¬α«»α«µÑßß«αá ¿½¿ ¬«¼»¿½∩Γ«αá. Éáßß¼«Γα¿¼,
- ¡á»α¿¼Ñα, «»ÑαáΓ«α #DEFINE ∩ºδ¬á "C". è«úñá óßΓαÑτáÑΓß∩
- ßΓ᫬á ó¿ñá
-
- #DEFINE YES 1
-
- Γ« ¿¼∩ YES ¿ ºá¼Ñ¡∩εΘ¿⌐ ΓѬßΓ 1 »«¼ÑΘáεΓß∩ ó Γáí½¿µπ. Å«ºñ-
- ¡ÑÑ, ¬«úñá ¿¼∩ YES »«∩ó½∩ÑΓß∩ ó «»ÑαáΓ«αÑ ó¿ñá
-
- INWORD = YES;
-
- O¡« ñ«½ª¡« íδΓ∞ ºá¼ÑΘÑ¡« ¡á 1.
- ê¼ÑεΓß∩ ñóÑ «ß¡«ó¡δÑ »α«µÑñπαδ, ¬«Γ«αδÑ π»αáó½∩εΓ ¿¼Ñ¡á-
- ¼¿ ¿ ºá¼Ñ¡∩εΘ¿¼¿ ¿σ ΓѬßΓἿ. öπ¡¬µ¿∩ INSTALL(S,T) ºá»¿ßδóá-
- ÑΓ ¿¼∩ S ¿ ºá¼Ñ¡∩εΘ¿⌐ ΓѬßΓ T ó Γáí½¿µπ; ºñÑß∞ S ¿ T »α«ßΓ«
- ß¿¼ó«½∞¡δÑ ßΓ᫬¿. öπ¡¬µ¿∩ LOOKUP(S) ¿ΘÑΓ ¿¼∩ S ó Γáí½¿µÑ ¿
- ó«ºóαáΘáÑΓ ½¿í« π¬áºáΓѽ∞ Γ«ú« ¼ÑßΓá, úñÑ φΓ« ¿¼∩ ¡á⌐ñÑ¡«,
- ½¿í« NULL, Ñß½¿ φΓ«ú« ¿¼Ñ¡¿ ó Γáí½¿µÑ ¡Ñ «¬áºá½«ß∞.
- Åα¿ φΓ«¼ ¿ß»«½∞ºπÑΓß∩ »«¿ß¬ »« á½ú«α¿Γ¼π σÑΦ¿α«óá¡¿∩ -
- »«ßΓπ»áεΘÑÑ ¿¼∩ »αÑ«íαáºπÑΓß∩ ó ¼á½Ñ¡∞¬«Ñ »«½«ª¿Γѽ∞¡«Ñ τ¿ß-
- ½«, ¬«Γ«α«Ñ ºáΓѼ ¿ß»«½∞ºπÑΓß∩ ñ½∩ ¿¡ñѬßᵿ¿ ¼áßß¿óá π¬áºá-
- ΓѽÑ⌐. ¥½Ñ¼Ñ¡Γ ¼áßß¿óá π¬áºδóáÑΓ ¡á ¡áτὫ µÑ»«τ¡δσ í½«¬«ó,
- «»¿ßδóáεΘ¿σ ¿¼Ñ¡á, ¬«Γ«αδÑ ¿¼ÑεΓ φΓ« º¡áτÑ¡¿Ñ σÑΦ¿α«óá¡¿∩.
- àß½¿ ¡¿¬á¬¿Ñ ¿¼Ñ¡á »α¿ σÑΦ¿α«óá¡¿¿ ¡Ñ »«½πτáεΓ φΓ«ú« º¡áτÑ-
- ¡¿∩, Γ« φ½Ñ¼Ñ¡Γ«¼ ¼áßß¿óá íπñÑΓ NULL.
- ü½«¬«¼ µÑ»¿ ∩ó½∩ÑΓß∩ ßΓαπ¬Γπαá, ß«ñÑαªáΘá∩ π¬áºáΓѽ¿ ¡á
- ß««ΓóÑΓßΓóπεΘÑÑ ¿¼∩, ¡á ºá¼Ñ¡∩εΘ¿⌐ ΓѬßΓ ¿ ¡á ß½ÑñπεΘ¿⌐ í½«¬
- ó µÑ»¿. ìπ½Ñó«⌐ π¬áºáΓѽ∞ ß½ÑñπεΘÑú« í½«¬á ß½πª¿Γ »α¿º¡á¬«¼
- ¬«¡µá ñá¡¡«⌐ µÑ»¿.
-
- STRUCT NLIST \( /* BASIC TABLE ENTRY */
- CHAR *NAME;
- CHAR *DEF;
- STRUCT NLIST *NEXT; /* NEXT ENTRY IN CHAIN */
- \);
-
- îáßß¿ó π¬áºáΓѽÑ⌐ φΓ« »α«ßΓ«
-
- DEFINE HASHSIZE 100
- TATIC STRUCT NLIST *HASHTAB[HASHSIZE] /* POINTER TABLE */
-
- ç¡áτÑ¡¿Ñ Σπ¡¬µ¿¿ σÑΦ¿α«óá¡¿∩, ¿ß»«½∞ºπѼ«⌐ «íÑ¿¼¿ Σπ¡¬-
- µ¿∩¼¿ LOOKUP ¿ INSTALL , »«½πτáÑΓß∩ »α«ßΓ« ¬á¬ «ßΓáΓ«¬ «Γ
- ñѽѡ¿∩ ßπ¼¼δ ß¿¼ó«½∞¡δσ º¡áτÑ¡¿⌐ ßΓ᫬¿ ¡á αẼÑα ¼áßß¿óá.
- (¥Γ« ¡Ñ ßá¼δ⌐ ½πτΦ¿⌐ 󫺼«ª¡δ⌐ á½ú«α¿Γ¼, ¡« Ñú« ñ«ßΓ«¿¡ßΓó«
- ß«ßΓ«¿Γ ó ¿ß¬½ετ¿Γѽ∞¡«⌐ »α«ßΓ«ΓÑ).
-
- - 144 -
-
- HASH(S) /* FORM HASH VALUE FOR STRING */
- CHAR *S;
- \(
- INT HASHVAL;
-
- FOR (HASHVAL = 0; *S != '\0'; )
- HASHVAL += *S++;
- RETURN(HASHVAL % HASHSIZE);
- \)
-
- é αѺπ½∞ΓáΓÑ »α«µÑßßá σÑΦ¿α«óá¡¿∩ óδñáÑΓß∩ ¡áτá½∞¡δ⌐ ¿¡-
- ñÑ¬ß ó ¼áßß¿óÑ HASHTAB ; Ñß½¿ ñá¡¡á∩ ßΓα«¬á ¼«ªÑΓ íδΓ∞
- úñÑ-Γ« ¡á⌐ñÑ¡á, Γ« ¿¼Ñ¡¡« ó µÑ»¿ í½«¬«ó, ¡áτὫ ¬«Γ«α«⌐ π¬á-
- ºá¡« Γá¼. Å«¿ß¬ «ßπΘÑßΓó½∩ÑΓß∩ Σπ¡¬µ¿Ñ⌐ LOOKUP. àß½¿ Σπ¡¬µ¿∩
- LOOKUP ¡áσ«ñ¿Γ, τΓ« ñá¡¡δ⌐ φ½Ñ¼Ñ¡Γ πªÑ »α¿ßπΓßΓóπÑΓ, Γ« «¡á
- ó«ºóαáΘáÑΓ π¬áºáΓѽ∞ ¡á ¡Ñú«; Ñß½¿ ¡ÑΓ, Γ« «¡á ó«ºóαáΘáÑΓ
- NULL.
-
- STRUCT NLIST *LOOKUP(S) /* LOOK FOR S IN HASHTAB */
- CHAR *S;
- \(
- STRUCT NLIST *NP;
-
- FOR (NP = HASHTAB[HASH(S)]; NP != NULL;NP=NP->NEXT)
- IF (STRCMP(S, NP->NAME) == 0)
- RETURN(NP); /* FOUND IT */
- RETURN(NULL); /* NOT FOUND */
-
-
- öπ¡¬µ¿∩ INSTALL ¿ß»«½∞ºπÑΓ Σπ¡¬µ¿ε LOOKUP ñ½∩ «»αÑñѽÑ-
- ¡¿∩, ¡Ñ »α¿ßπΓßΓóπÑΓ ½¿ πªÑ óó«ñ¿¼«Ñ ó ñá¡¡δ⌐ ¼«¼Ñ¡Γ ¿¼∩;
- Ñß½¿ φΓ« Γá¬, Γ« ¡«ó«Ñ «»αÑñѽѡ¿Ñ ñ«½ª¡« óδΓÑß¡¿Γ∞ ßΓáα«Ñ.
- é »α«Γ¿ó¡«¼ ß½πτáÑ ß«ºñáÑΓß∩ ß«óÑαΦÑ¡¡« ¡«óδ⌐ φ½Ñ¼Ñ¡Γ. àß½¿
- »« ¬á¬«⌐-½¿í« »α¿τ¿¡Ñ ñ½∩ ¡«ó«ú« φ½Ñ¼Ñ¡Γá í«½∞ΦÑ ¡ÑΓ ¼ÑßΓá,
- Γ« Σπ¡¬µ¿∩ INSTALL ó«ºóαáΘáÑΓ NULL.
-
- STRUCT NLIST *INSTALL(NAME, DEF) /* PUT (NAME, DEF) */
- CHAR *NAME, *DEF;
- \(
- STRUCT NLIST *NP, *LOOKUP();
- CHAR *STRSAVE(), *ALLOC();
- INT HASHVAL;
-
- IF((NP = LOOKUP(NAME)) == NULL) \( /* NOT FOUND */
- NP = (STRUCT NLIST *) ALLOC(SIZEOF(*NP));
- IF (NP == NULL)
- RETURN(NULL);
- IF ((NP->NAME = STRSAVE(NAME)) == NULL)
- RETURN(NULL);
- HASHVAL = HASH(NP->NAME);
- NP->NEXT = HASHTAB[HASHVAL];
- HASHTAB[HASHVAL] = NP;
- \) ELSE /* ALREADY THERE */
- FREE((NP->DEF);/* FREE PREVIOUS DEFINITION */
- IF ((NP->DEF = STRSAVE(DEF)) == NULL)
- RETURN (NULL);
- RETURN(NP);
- \)
-
- - 145 -
-
- öπ¡¬µ¿∩ STRSAVE »α«ßΓ« ¬«»¿απÑΓ ßΓ᫬π, π¬áºá¡¡πε ó ¬á-
- τÑßΓóÑ áαúπ¼Ñ¡Γá, ó ¼ÑßΓ« σαá¡Ñ¡¿∩, »«½πτÑ¡¡«Ñ ó αѺπ½∞ΓáΓÑ
- «íαáΘÑ¡¿∩ ¬ Σπ¡¬µ¿¿ ALLOC. îδ πªÑ »α¿óѽ¿ φΓπ Σπ¡¬µ¿ε ó ú½á-
- óÑ 5. Æá¬ ¬á¬ «íαáΘÑ¡¿Ñ ¬ Σπ¡¬µ¿¿ ALLOC ¿ FREE ¼«úπΓ »α«¿ß-
- σ«ñ¿Γ∞ ó ½εí«¼ »«α∩ñ¬Ñ ¿ ó ßó∩º¿ ß »α«í½Ñ¼«⌐ óδαáó¡¿óá¡¿∩,
- »α«ßΓ«⌐ óáα¿á¡Γ Σπ¡¬µ¿¿ ALLOC ¿º ú½áóδ 5 ¡á¼ í«½∞ΦÑ ¡Ñ »«ñ-
- σ«ñ¿Γ; ß¼«Γα¿ΓÑ ú½áóδ 7 ¿ 8.
- ô»α᪡ѡ¿Ñ 6-7.
- ---------------
- ìá»¿Φ¿ΓÑ »α«µÑñπαπ, ¬«Γ«αá∩ íπñÑΓ πñá½∩Γ∞ ¿¼∩ ¿ «»αÑñÑ-
- ½Ñ¡¿Ñ ¿º Γáí½¿µδ, π»αáó½∩Ѽ«⌐ Σπ¡¬µ¿∩¼¿ LOOKUP ¿ INSTALL.
- ô»α᪡ѡ¿Ñ 6-8.
- ---------------
- Éáºαáí«Γá⌐ΓÑ »α«ßΓπε, «ß¡«óá¡¡πε ¡á Σπ¡¬µ¿∩σ φΓ«ú« αáº-
- ñѽá, óÑαß¿ε »α«µÑßß«αá ñ½∩ «íαáí«Γ¬¿ ¬«¡ßΓαπ¬µ¿⌐ #DEFINE ,
- »α¿ú«ñ¡πε ñ½∩ ¿ß»«½∞º«óá¡¿∩ ß "C"-»α«úαἼἿ. éá¼ ¼«úπΓ
- Γá¬ªÑ «¬áºáΓ∞ß∩ »«½Ñº¡δ¼¿ Σπ¡¬µ¿¿ GETCHAR ¿ UNGETCH.
-
- 6.7. Å«½∩.
- è«úñá ó«»α«ß φ¬«¡«¼¿¿ »á¼∩Γ¿ ßΓá¡«ó¿Γß∩ «τÑ¡∞ ßπΘÑßΓóÑ¡-
- ¡δ¼, Γ« ¼«ªÑΓ «¬áºáΓ∞ß∩ ¡Ñ«íσ«ñ¿¼δ¼ »«¼ÑΘáΓ∞ ó «ñ¡« ¼áΦ¿¡¡«Ñ
- ß½«ó« ¡Ñ߬«½∞¬« αẽ¿τ¡δσ «íΩÑ¬Γ«ó; «ñ¡« ¿º «ß«íÑ¡¡« αáß»-
- α«ßαá¡Ñ¡¡δσ π»«ΓαÑí½Ñ¡¿⌐ - ¡áí«α «ñ¡«í¿Γ«óδσ »α¿º¡á¬«ó ó
- »α¿¼Ñ¡Ñ¡¿∩σ, »«ñ«í¡δσ ß¿¼ó«½∞¡δ¼ Γáí½¿µá¼ ¬«¼»¿½∩Γ«αá. ó¡ÑΦ-
- ¡Ñ «íπß½«ó½Ñ¡¡δÑ Σ«α¼áΓδ ñá¡¡δσ, Γá¬¿Ñ ¬á¬ ¿¡ΓÑαΣÑ⌐ßδ á»»á-
- αáΓ¡δσ ßαÑñßΓó Γá¬ªÑ ºáτáßΓπε »αÑñ»«½áúáεΓ ó«º¼«ª¡«ßΓ∞ »«½π-
- τÑ¡¿∩ ß½«óá »« τáßΓ∩¼.
- ÅαÑñßΓáó∞ΓÑ ßÑíÑ Σαáú¼Ñ¡Γ ¬«¼»¿½∩Γ«αá, ¬«Γ«αδ⌐ αáí«ΓáÑΓ
- ß ß¿¼ó«½∞¡«⌐ Γáí½¿µÑ⌐. æ ¬áªñδ¼ ¿ñÑ¡Γ¿Σ¿¬áΓ«α«¼ »α«úαá¼¼δ
- ßó∩ºá¡á «»αÑñѽѡ¡á∩ ¿¡Σ«α¼áµ¿∩, ¡á»α¿¼Ñα, ∩ó½∩ÑΓß∩ «¡ ¿½¿
- ¡ÑΓ ¬½ετÑóδ¼ ß½«ó«¼, ∩ó½∩ÑΓß∩ ½¿ «¡ ¿½¿ ¡ÑΓ ó¡ÑΦ¡¿¼ ¿/¿½¿
- ßΓáΓ¿τÑ߬¿¼ ¿ Γ.ñ. æá¼δ⌐ ¬«¼»á¬Γ¡δ⌐ ß»«ß«í ºá¬«ñ¿α«óáΓ∞ Γá-
- ¬πε ¿¡Σ«α¼áµ¿ε - »«¼ÑßΓ¿Γ∞ ¡áí«α «ñ¡«í¿Γ«óδσ »α¿º¡á¬«ó ó «Γ-
- ñѽ∞¡πε »ÑαѼѡ¡πε Γ¿»á CHAR ¿½¿ INT.
- Äíδτ¡δ⌐ ß»«ß«í, ¬«Γ«αδ¼ φΓ« ñѽáÑΓß∩, ß«ßΓ«¿Γ ó «»αÑñÑ-
- ½Ñ¡¿¿ ¡áí«αá "¼áß«¬", «ΓóÑτáεΘ¿σ ß««ΓóÑΓßΓóπΘ¿¼ í¿Γ«óδ¼ »«-
- º¿µ¿∩¼, ¬á¬ ó
-
- #DEFINE KEYWORD 01
- #DEFINE EXTERNAL 02
- #DEFINE STATIC 04
-
- (τ¿ß½á ñ«½ª¡δ íδΓ∞ ßΓѻѡ∩¼¿ ñó«⌐¬¿). Æ«úñá «íαáí«Γ¬á í¿Γ«ó
- ßóÑñÑΓß∩ ¬ "ª«¡ú½¿α«óá¡¿ε í¿ΓἿ" ß »«¼«Θ∞ε «»Ñαᵿ⌐ ßñó¿úá,
- ¼á߬¿α«óá¡¿∩ ¿ ñ«»«½¡Ñ¡¿∩, «»¿ßá¡¡δσ ¡á¼¿ ó ú½áóÑ 2.
- ìѬ«Γ«αδÑ τáßΓ« óßΓαÑτáεΘ¿Ñß∩ ¿ñ¿«¼δ:
-
- FLAGS \!= EXTERNAL \! STATIC;
-
- ó¬½ετáÑΓ í¿Γδ EXTERNAL ¿ STATIC ó FLAGS, ó Γ« óαѼ∩ ¬á¬
-
- FLAGS &= \^(ÑXTERNAL \! STATIC);
-
- - 146 -
-
- ¿σ ó䬽ετáÑΓ, á
-
- IF ((FLAGS & (EXTERNAL \! STATIC)) == 0) ...
-
- ¿ßΓ¿¡¡«, Ñß½¿ «íá í¿Γá ó䬽ετÑ¡δ.
- ò«Γ∩ φΓ¿¼¿ ¿ñ¿«¼á¼¿ ½Ñú¬« «ó½áñÑΓ∞, ∩ºδ¬ "C" ó ¬áτÑßΓóÑ
- á½∞ΓÑα¡áΓ¿óδ »αÑñ½áúáÑΓ ó«º¼«ª¡«ßΓ∞ «»αÑñѽѡ¿∩ ¿ «íαáí«Γ¬¿
- »«½Ñ⌐ ó¡πΓα¿ ß½«óá ¡Ñ»«ßαÑñßΓóÑ¡¡«, á ¡Ñ »«ßαÑñßΓó«¼ »«í¿Γ«-
- óδσ ½«ú¿τÑ߬¿σ «»Ñαᵿ⌐. Å«½Ñ - φΓ« ¡áí«α ߼Ѫ¡δσ í¿Γ«ó
- ó¡πΓα¿ «ñ¡«⌐ »ÑαѼѡ¡«⌐ Γ¿»á INT. æ¿¡Γá¬ß¿ß «»αÑñѽѡ¿∩ ¿
- «íαáí«Γ¬¿ »«½Ñ⌐ «ß¡«óδóáÑΓß∩ ¡á ßΓαπ¬Γπαáσ. ìá»α¿¼Ñα, ß¿¼-
- ó«½∞¡πε Γáí½¿µπ ¬«¡ßΓαπ¬µ¿⌐ #DEFINE, »α¿óÑñÑ¡¡πε óδΦÑ, ¼«ª¡«
- íδ í佫 ºá¼Ñ¡¿Γ∞ «»αÑñѽѡ¿Ñ¼ ΓαÑσ »«½Ñ⌐:
-
- STRUCT \(
- UNSIGNED IS_KEYWORD : 1;
- UNSIGNED IS_EXTERN : 1;
- UNSIGNED IS_STATIC : 1;
- \) FLAGS;
-
- çñÑß∞ «»αÑñѽ∩ÑΓß∩ »ÑαѼѡ¡á∩ ß ¿¼Ñ¡Ñ¼ FLAGS, ¬«Γ«αá∩ ß«ñÑα-
- ª¿Γ Γα¿ 1-í¿Γ«óδσ »«½∩. æ½ÑñπεΘÑÑ ºá ñó«ÑΓ«τ¿Ñ¼ τ¿ß½« ºáñáÑΓ
- Φ¿α¿¡π »«½∩ ó í¿Γáσ. Å«½∩ «»¿ßá¡δ ¬á¬ UNSIGNED, τΓ«íδ »«ñ-
- τÑભπΓ∞, τΓ« «¡¿ ñÑ⌐ßΓó¿Γѽ∞¡« íπñπΓ óѽ¿τ¿¡á¼¿ íѺ º¡á¬á.
- ìá «Γñѽ∞¡δÑ »«½∩ ¼«ª¡« ßßδ½áΓ∞ß∩, ¬á¬ FLAGS.IS_STATIE,
- FLAGS. IS_EXTERN, FLAGS.IS_KEYWORD ê Γ.ñ., Γ« ÑßΓ∞ Γ«τ¡« Γá¬
- ªÑ, ¬á¬ ¡á ñαπú¿Ñ τ½Ñ¡δ ßΓαπ¬Γπαδ. Å«½∩ óÑñπΓ ßÑí∩ »«ñ«í¡«
- ¡Ñí«½∞Φ¿¼ µÑ½δ¼ íѺ º¡á¬á ¿ ¼«úπΓ πτáßΓó«óáΓ∞ ó áα¿Σ¼ÑΓ¿τÑß-
- ¬¿σ óδαáªÑ¡¿∩σ Γ«τ¡« ΓᬠªÑ, ¬á¬ ¿ ñαπú¿Ñ µÑ½δÑ. Æá¬¿¼ «íαá-
- º«¼, »αÑñδñπΘ¿Ñ »α¿¼Ñαδ í«½ÑÑ ÑßΓÑßΓóÑ¡¡« »ÑαÑ»¿ßáΓ∞ Γá¬:
-
- FLAGS.IS_EXTERN = FLAGS.IS_STATIC = 1;
-
- ñ½∩ ó¬½ετÑ¡¿∩ í¿Γ«ó;
-
- FLAGS.IS_EXTERN = FLAGS.IS_STATIC = 0;
-
- ñ½∩ ó䬽ετÑ¡¿∩ í¿Γ«ó;
-
- IF (FLAGS.IS_EXTERN == 0 &&FLAGS.IS_STATIC == 0)...
-
- ñ½∩ ¿σ »α«óÑન.
- Å«½Ñ ¡Ñ ¼«ªÑΓ »ÑαѬαδóáΓ∞ úαá¡¿µπ INT; Ñß½¿ π¬áºá¡¡á∩
- Φ¿α¿¡á Γᬫóá, τΓ« φΓ« ñ«½ª¡« ß½πτ¿Γ∞ß∩, Γ« »«½Ñ óδαáó¡¿óá-
- ÑΓß∩ »« úαá¡¿µÑ ß½ÑñπεΘÑú« INT. Å«½∩¼ ¼«ª¡« ¡Ñ »α¿ßóá¿óáΓ∞
- ¿¼Ñ¡á; ¡Ñ¿¼Ñ¡«óá¡¡δÑ »«½∩ (Γ«½∞¬« ñó«ÑΓ«τ¿Ñ ¿ Φ¿α¿¡á) ¿ß-
- »«½∞ºπεΓß∩ ñ½∩ ºá»«½¡Ñ¡¿∩ ßó«í«ñ¡«ú« ¼ÑßΓá. ùΓ«íδ óδ¡πñ¿Γ∞
- óδαáó¡¿óá¡¿Ñ ¡á úαá¡¿µπ ß½ÑñπεΘÑú« INT, ¼«ª¡« ¿ß»«½∞º«óáΓ∞
- ߻ѵ¿á½∞¡πε Φ¿α¿¡π 0.
-
- - 147 -
-
- Åα¿ αáí«ΓÑ ß »«½∩¼¿ ¿¼ÑÑΓß∩ α∩ñ ¼«¼Ñ¡Γ«ó, ¡á ¬«Γ«αδÑ
- ß½ÑñπÑΓ «íαáΓ¿Γ∞ 󡿼᡿Ñ. Å«-ó¿ñ¿¼«¼π ¡á¿í«½ÑÑ ßπΘÑßΓóÑ¡¡δ¼
- ∩ó½∩ÑΓß∩ Γ«, τΓ« «Γαáªá∩ »α¿α«ñπ αẽ¿τ¡δσ á»»áαáΓ¡δσ ßαÑñ-
- ßΓó, αáß»αÑñѽѡ¿Ñ »«½Ñ⌐ ¡á ¡Ñ¬«Γ«αδσ ¼áΦ¿¡áσ «ßπΘÑßΓó½∩ÑΓß∩
- ß½Ñóá ¡á»αáó«, á ¡á ¡Ñ¬«Γ«αδσ ß»αáóá ¡á½Ñó«. ¥Γ« «º¡áτáÑΓ,
- τΓ« σ«Γ∩ »«½∩ «τÑ¡∞ »«½Ñº¡δ ñ½∩ αáí«Γδ ß ó¡πΓαÑ¡¡Ñ «»αÑñÑ-
- ½Ñ¡¡δ¼¿ ßΓαπ¬ΓπαἿ ñá¡¡δσ, »α¿ αáºñѽѡ¿¿ ó¡ÑΦ¡Ñ «»αÑñѽ∩Ñ-
- ¼δσ ñá¡¡δσ ß½ÑñπÑΓ ΓΘáΓѽ∞¡« αáßß¼áΓα¿óáΓ∞ ó«»α«ß « Γ«¼, ¬á-
- ¬«⌐ ¬«¡Ñµ »«ßΓπ»áÑΓ »Ñαóδ¼.
- äαπú¿Ñ «úαá¡¿τÑ¡¿∩, ¬«Γ«αδÑ ß½ÑñπÑΓ ¿¼ÑΓ∞ ó ó¿ñπ: »«½∩
- ¡Ñ ¿¼ÑεΓ º¡á¬á; «¡¿ ¼«úπΓ σαá¡¿Γ∞ß∩ Γ«½∞¬« ó »ÑαѼѡ¡δσ Γ¿»á
- INT (¿½¿, τΓ« φ¬ó¿óá½Ñ¡Γ¡«, Γ¿»á UNSIGNED); «¡¿ ¡Ñ ∩ó½∩εΓß∩
- ¼áßß¿óἿ; «¡¿ ¡Ñ ¿¼ÑεΓ áñαÑß«ó, ΓᬠτΓ« ¬ ¡¿¼ ¡Ñ »α¿¼Ñ¡¿¼á
- «»Ñαᵿ∩ &.
-
- 6.8. ÄíΩÑñ¿¡Ñ¡¿∩.
- OíΩÑñ¿¡Ñ¡¿∩ - φΓ« »ÑαѼѡ¡á∩, ¬«Γ«αá∩ ó αẽ¿τ¡δÑ ¼«¼Ñ¡-
- Γδ óαѼѡ¿ ¼«ªÑΓ ß«ñÑαªáΓ∞ «íΩѬΓδ αạδσ Γ¿»«ó ¿ αẼÑα«ó,
- »α¿τѼ ¬«¼»¿½∩Γ«α íÑαÑΓ ¡á ßÑí∩ «Γ߽Ѫ¿óá¡¿Ñ αẼÑαá ¿ ΓαÑ-
- í«óá¡¿⌐ óδαáó¡¿óá¡¿∩. ÄíΩÑñ¿¡Ñ¡¿∩ »αÑñßΓáó½∩εΓ ó«º¼«ª¡«ßΓ∞
- αáí«ΓáΓ∞ ß αẽ¿τ¡δ¼¿ ó¿ñἿ ñá¡¡δσ ó «ñ¡«⌐ «í½áßΓ¿ »á¼∩Γ¿,
- ¡Ñ óó«ñ∩ ó »α«úαá¼¼π ¡¿¬á¬«⌐ ¼áΦ¿¡¡«-ºáó¿ß¿¼«⌐ ¿¡Σ«α¼áµ¿¿.
- é ¬áτÑßΓóÑ »α¿¼Ñαá, ß¡«óá ¿º ß¿¼ó«½∞¡«⌐ Γáí½¿µδ ¬«¼»¿½∩-
- Γ«αá, »αÑñ»«½«ª¿¼, τΓ« ¬«¡ßΓá¡Γδ ¼«úπΓ íδΓ∞ Γ¿»á INT , FLOAT
- ¿½¿ íδΓ∞ π¬áºáΓѽ∩¼¿ ¡á ß¿¼ó«½δ. º¡áτÑ¡¿Ñ ¬áªñ«⌐ ¬«¡¬αÑΓ¡«⌐
- ¬«¡ßΓá¡Γδ ñ«½ª¡« σαá¡¿Γ∞ß∩ ó »ÑαѼѡ¡«⌐ ß««ΓóÑßΓóπεΘÑú« Γ¿-
- »á, ¡« óßÑ ªÑ ñ½∩ π»αáó½Ñ¡¿∩ Γáí½¿µÑ⌐ ßá¼δ¼ πñ«í¡δ¼ í佫 íδ,
- Ñß½¿ φΓ« º¡áτÑ¡¿Ñ ºá¡¿¼á½« íδ «ñ¿¡ ¿ ëà ªÑ «íΩѼ »á¼∩Γ¿ ¿
- σαá¡¿½«ß∞ ó Γ«¼ ªÑ ßἫ¼ ¼ÑßΓÑ ¡Ñºáó¿ß¿¼« «Γ Ñú« Γ¿»á. φΓ« ¿
- ∩ó½∩ÑΓß∩ ¡áº¡áτÑ¡¿Ñ¼ «íΩÑñ¿¡Ñ¡¿∩ - óδñѽ¿Γ∞ «Γñѽ∞¡πε »ÑαÑ-
- ¼Ñ¡¡πε, ó ¬«Γ«α«⌐ ¼«ª¡« ºá¬«¡¡« σαá¡¿Γ∞ ½εíπε «ñ¡π ¿º »ÑαÑ-
- ¼Ñ¡¡δσ ¡Ñ߬«½∞¬¿σ Γ¿»«ó. èᬠ¿ ó ß½πτáÑ »«½Ñ⌐, ß¿¡Γá¬ß¿ß «ß-
- ¡«óδóáÑΓß∩ ¡á ßΓαπ¬Γπαáσ.
-
- UNION U_TAG \(
- INT IVAL;
- FLOAT FVAL;
- CHAR *PVAL;
- \) UVAL;
-
- ÅÑαѼѡ¡á∩ UVAL íπñÑΓ ¿¼ÑΓ∞ ñ«ßΓáΓ«τ¡« í«½∞Φ«⌐ αẼÑα,τΓ«íδ
- σαá¡¿Γ∞ ¡á¿í«½∞Φ¿⌐ ¿º ΓαÑσ Γ¿»«ó, ¡Ñºáó¿ß¿¼« «Γ ¼áΦ¿¡δ, ¡á
- ¬«Γ«α«⌐ «ßπΘÑßΓó½∩ÑΓß∩ ¬«¼»¿½∩µ¿∩, - »α«úαá¼¼á ¡Ñ íπñÑΓ ºá-
- ó¿ß¿Γ∞ «Γ σáαá¬ΓÑα¿ßΓ¿¬ á»»áαáΓ¡δσ ßαÑñßΓó. ïεí«⌐ ¿º φΓ¿σ
- ΓαÑσ Γ¿»«ó ¼«ªÑΓ íδΓ∞ »α¿ßó«Ñ¡ UVAR ¿ ºáΓѼ ¿ß»«½∞º«óá¡ ó
- óδαáªÑ¡¿∩σ, »«¬á Γá¬«Ñ ¿ß»«½∞º«óá¡¿Ñ ß«ó¼ÑßΓ¿¼«: ¿ºó½Ñ¬áѼδ⌐
- Γ¿» ñ«½ªÑ¡ ß«ó»áñáΓ∞ ß »«ß½Ññ¡¿¼ »«¼ÑΘÑ¡¡δ¼ Γ¿»«¼. äѽ«
- »α«úαá¼¼¿ßΓá - ß½Ññ¿Γ∞ ºá ΓѼ, ¬á¬«⌐ Γ¿» σαá¡¿Γß∩ ó «íΩÑñ¿-
- ¡Ñ¡¿¿ ó ñá¡¡δ⌐ ¼«¼Ñ¡Γ; Ñß½¿ τΓ«-½¿í« σαá¡¿Γß∩ ¬á¬ «ñ¿¡ Γ¿»,
- á ¿ºó½Ñ¬áÑΓß∩ ¬á¬ ñαπú«⌐, Γ« αѺπ½∞ΓáΓδ íπñπΓ ºáó¿ßÑΓ∞ «Γ
- ¿ß»«½∞ºπѼ«⌐ ¼áΦ¿¡δ.
-
- - 149 -
-
- æ¿¡Γá¬ß¿τÑ߬¿ ñ«ßΓπ» ¬ τ½Ñ¡á¼ «íΩÑñ¿¡Ñ¡¿∩ «ßπΘÑßΓó½∩ÑΓß∩
- ß½ÑñπεΘ¿¼ «íαẫ¼:
-
- ¿¼∩ «íΩÑñ¿¡Ñ¡¿∩.τ½Ñ¡
- --------------------
- ¿½¿
- π¬áºáΓѽ∞ «íΩÑñ¿¡Ñ¡¿∩ ->τ½Ñ¡
- ----------------------------
-
- Γ« ÑßΓ∞ Γ«τ¡« ΓᬠªÑ, ¬á¬ ¿ ó ß½πτáÑ ßΓαπ¬Γπα. Ñß½¿ ñ½∩ «Γß-
- ½Ñª¿óá¡¿∩ Γ¿»á, σαá¡¿¼«ú« ó ñá¡¡δ⌐ ¼«¼Ñ¡Γ ó UVAL, ¿ß»«½∞ºπ-
- ÑΓß∩ »ÑαѼѡ¡á∩ UTYPE, Γ« ¼«ª¡« óßΓαÑΓ¿Γ∞ Γᬫ⌐ πτáßΓ«¬
- »α«úαá¼¼δ:
-
- IF (UTYPE == INT)
- PRINTF("%D\N", UVAL.IVAL);
- ELSE IF (UTYPE == FLOAT)
- PRINTF("%F\N", UVAL.FVAL);
- ELSE IF (UTYPE == STRING)
- PRINTF("%S\N", UVAL.PVAL);
- ELSE
- PRINTF("BAD TYPE %D IN UTYPE\N", UTYPE);
-
- ÄíΩÑñ¿¡Ñ¡¿∩ ¼«úπΓ »«∩ó½∩Γ∞ß∩ ó¡πΓα¿ ßΓαπ¬Γπα ¿ ¼áßß¿ó«ó
- ¿ ¡á«í«α«Γ. çỿß∞ ñ½∩ «íαáΘÑ¡¿∩ ¬ τ½Ñ¡π «íΩÑñ¿¡Ñ¡¿∩ ó
- ßΓαπ¬ΓπαÑ (¿½¿ ¡á«í«α«Γ) ß«óÑαΦÑ¡¡« ¿ñÑ¡Γ¿τ¡á Γ«⌐, ¬«Γ«αá∩
- ¿ß»«½∞ºπÑΓß∩ ó« 󽫪ѡ¡δσ ßΓαπ¬Γπαáσ. ¡á»α¿¼Ñα, ó ¼áßß¿óÑ
- ßΓαπ¬Γπα, «»αÑñѽѡ¡δ¼ ß½ÑñπεΘ¿¼ «íαẫ¼
-
- STRUCT \(
- CHAR *NAME;
- INT FLAGS;
- INT UTYPE;
- UNION \(
- INT IVAL;
- FLOAT FVAL;
- CHAR *PVAL;
- \) UVAL;
- \) SYMTAB[NSYM];
-
- ¡á »ÑαѼѡ¡πε IVAL ¼«ª¡« ߽߫áΓ∞ß∩ ¬á¬
-
- SYMTAB[I].UVAL.IVAL
-
- á ¡á »Ñαóδ⌐ ß¿¼ó«½ ßΓ᫬¿ PVAL ¬á¬
-
- *SYMTAB[I].UVAL.PVAL
-
- é ßπΘ¡«ßΓ¿ «íΩÑñ¿¡Ñ¡¿Ñ ∩ó½∩ÑΓß∩ ßΓαπ¬Γπα«⌐, ó ¬«Γ«α«⌐ óßÑ
- τ½Ñ¡δ ¿¼ÑεΓ ¡π½Ñó«Ñ ß¼ÑΘÑ¡¿Ñ. æá¼á ßΓαπ¬Γπαá ñ«ßΓáΓ«τ¡« óÑ-
- ½¿¬á, τΓ«íδ σαá¡¿Γ∞ "ßá¼δ⌐ Φ¿α«¬¿⌐" τ½Ñ¡, ¿ óδαáó¡¿óá¡¿Ñ
- »α¿ú«ñ¡« ñ½∩ óßÑσ Γ¿»«ó, óσ«ñ∩Θ¿σ ó «íΩÑñ¿¡Ñ¡¿Ñ. èᬠ¿ ó
- ß½πτáÑ ßΓαπ¬Γπα, Ññ¿¡ßΓóÑ¡¡δ¼¿ «»Ñαᵿ∩¼¿, ¬«Γ«αδÑ ó ¡áßΓ«∩-
- ΘÑÑ óαѼ∩ ¼«ª¡« »α«ó«ñ¿Γ∞ ß «íΩÑñ¿¡Ñ¡¿∩¼¿, ∩ó½∩εΓß∩ ñ«ßΓπ» ¬
-
- - 150 -
-
- τ½Ñ¡π ¿ ¿ºó½ÑτÑ¡¿Ñ áñαÑßá; «íΩÑñ¿¡Ñ¡¿∩ ¡Ñ ¼«úπΓ íδΓ∞ »α¿ßó«-
- Ñ¡δ, »ÑαÑñá¡δ Σπ¡¬µ¿∩¼ ¿½¿ ó«ºóαáΘÑ¡δ ¿¼¿. π¬áºáΓѽ¿ «íΩÑñ¿-
- ¡Ñ¡¿⌐ ¼«ª¡« ¿ß»«½∞º«óáΓ∞ ó Γ«τ¡« Γᬫ⌐ ªÑ ¼á¡ÑαÑ, ¬á¬ ¿ π¬á-
- ºáΓѽ¿ ßΓαπ¬Γπα.
- Åα«úαá¼¼á αáß»αÑñѽѡ¿∩ »á¼∩Γ¿, »α¿ó«ñ¿¼á∩ ó ú½áóÑ 8 ,
- »«¬áºδóáÑΓ, ¬á¬ ¼«ª¡« ¿ß»«½∞º«óáΓ∞ «íΩÑñ¿¡Ñ¡¿Ñ, τΓ«íδ ßñÑ-
- ½áΓ∞ ¡Ñ¬«Γ«απε »ÑαѼѡ¡πε óδα«ó¡Ñ¡¡«⌐ »« «»αÑñѽѡ¡«¼π ó¿ñπ
- úαá¡¿µδ »á¼∩Γ¿.
-
- 6.9. Ä»αÑñѽѡ¿Ñ Γ¿»á
- é ∩ºδ¬Ñ "C" »αÑñπß¼«ΓαÑ¡á 󫺼«ª¡«ßΓ∞, ¡áºδóáѼá∩ TYPEDEF
- ñ½∩ óóÑñÑ¡¿∩ ¡«óδσ ¿¼Ñ¡ ñ½∩ Γ¿»«ó ñá¡¡δσ. ìá»α¿¼Ñα, «»¿ßá¡¿Ñ
-
- TYPEDEF INT LENGTH;
-
- ñѽáÑΓ ¿¼∩ LENGTH ß¿¡«¡¿¼«¼ ñ½∩ INT. "Æ¿»" LENGTH ¼«ªÑΓ íδΓ∞
- ¿ß»«½∞º«óá¡ ó «»¿ßá¡¿∩σ, »ÑαÑó«ñ«ó Γ¿»«ó ¿ Γ.ñ. Æ«τ¡« Γᬿ¼
- ªÑ «íαẫ¼, ¬á¬ ¿ Γ¿» INT:
-
- LENGTH LEN, MAXLEN;
- LENGTH *LENGTHS[];
-
- ǡὫú¿τ¡« «»¿ßá¡¿ε
-
- TYPEDEF CHAR *STRING;
-
- ñѽáÑΓ STRING ß¿¡«¡¿¼«¼ ñ½∩ CHAR*, Γ« ÑßΓ∞ ñ½∩ π¬áºáΓѽ∩ ¡á
- ß¿¼ó«½δ, τΓ« ºáΓѼ ¼«ª¡« ¿ß»«½∞º«óáΓ∞ ó «»¿ßá¡¿∩σ ó¿ñá
-
- STRING P, LINEPTR[LINES], ALLOC();
-
- ÄíαáΓ¿ΓÑ ó¡¿¼á¡¿Ñ, τΓ« «íΩ∩ó½∩Ѽδ⌐ ó ¬«¡ßΓαπ¬µ¿¿ TYPEDEF
- Γ¿» »«∩ó½∩ÑΓß∩ ó »«º¿µ¿¿ ¿¼Ñ¡¿ »ÑαѼѡ¡«⌐, á ¡Ñ ßαáºπ ºá
- ß½«ó«¼ TYPEDEF. æ¿¡Γá¬ß¿τÑ߬¿ ¬«¡ßΓαπ¬µ¿∩ TYPEDEF »«ñ«í¡á
- «»¿ßá¡¿∩¼ ¬½áßßá »á¼∩Γ¿ EXTERN, STATIC ¿ Γ. ä. ¼δ Γá¬ªÑ ¿ß-
- »«½∞º«ó὿ »α«»¿ß¡δÑ íπ¬óδ, τΓ«íδ ∩ß¡ÑÑ óδñѽ¿Γ∞ ¿¼Ñ¡á.
- é ¬áτÑßΓóÑ í«½ÑÑ ß½«ª¡«ú« »α¿¼Ñαá ¼δ ¿ß»«½∞ºπѼ ¬«¡ßΓ-
- απ¬µ¿ε TYPEDEF ñ½∩ «»¿ßá¡¿∩ πº½«ó ñÑαÑóá, αáßß¼«ΓαÑ¡¡δσ αá-
- ¡ÑÑ ó φΓ«⌐ ú½áóÑ:
-
- TYPEDEF STRUCT TNODE \( /* THE BASIC NODE */
- CHAR *WORD; /* POINTS TO THE TEXT */
- INT COUNT; /* NUMBER OF OCCURRENCES */
- STRUCT TNODE *LEFT; /* LEFT CHILD */
- STRUCT TNODE *RIGHT; /* RIGHT CHILD */
- \) TREENODE, *TREEPTR;
-
- é αѺπ½∞ΓáΓÑ »«½πτáѼ ñóá ¡«óδσ ¬½ετÑóδσ ß½«óá: TREENODE
- (ßΓαπ¬Γπαá) ¿ TREEPTR (π¬áºáΓѽ∞ ¡á ßΓαπ¬Γπαπ). Æ«úñá Σπ¡¬-
- µ¿ε TALLOC ¼«ª¡« ºá»¿ßáΓ∞ ó ó¿ñÑ
-
- - 151 -
- TREEPTR TALLOC()
- \(
- CHAR *ALLOC();
- RETURN((TREEPTR) ALLOC(SIZEOF(TREENODE)));
- \)
-
- ìÑ«íσ«ñ¿¼« »«ñτÑભπΓ∞, τΓ« «»¿ßá¡¿Ñ TYPEDEF ¡Ñ »α¿ó«ñ¿Γ
- ¬ ß«ºñá¡¿ε ¡«ó«ú« ó ¬á¬«¼-½¿í« ß¼δß½Ñ Γ¿»á; «¡« Γ«½∞¬« ñ«-
- íáó½∩ÑΓ ¡«ó«Ñ ¿¼∩ ñ½∩ ¡Ñ¬«Γ«α«ú« ßπΘÑßΓóπεΘÑú« Γ¿»á. »α¿
- φΓ«¼ ¡Ñ 󫺡¿¬áÑΓ ¿ ¡¿¬á¬«⌐ ¡«ó«⌐ ßѼá¡Γ¿¬¿: «»¿ßá¡¡δÑ Γᬿ¼
- ß»«ß«í«¼ »ÑαѼѡ¡δÑ «í½áñáεΓ Γ«τ¡« ΓѼ¿ ªÑ ßó«⌐ßΓóἿ, τΓ« ¿
- »ÑαѼѡ¡δÑ, «»¿ßá¡¡δÑ ∩ó¡δ¼ «íαẫ¼. Å« ßπΘÑßΓó𠬫¡ßΓαπ¬µ¿∩
- TYPEDEF ßσ«ñ¡á ß #DEFINE ºá ¿ß¬½ετÑ¡¿Ñ¼ Γ«ú«, τΓ« «¡á ¿¡ΓÑα-
- »αÑΓ¿απÑΓß∩ ¬«¼»¿½∩Γ«α«¼ ¿ »«Γ«¼π ¼«ªÑΓ «ßπΘÑßΓó½∩Γ∞ »«ñßΓá-
- ¡«ó¬¿ ΓѬßΓá, ¬«Γ«αδÑ óδσ«ñ∩Γ ºá »αÑñѽδ 󫺼«ª¡«ßΓÑ⌐ ¼á¬-
- α«»α«µÑßß«αá ∩ºδ¬á "C". ìá»α¿¼Ñα,
-
- TYPEDEF INT (*PFI) ();
-
- ß«ºñáÑΓ Γ¿» PFI ñ½∩ "π¬áºáΓѽ∩ Σπ¡¬µ¿¿, ó«ºóαáΘáεΘÑ⌐ º¡áτÑ-
- ¡¿Ñ Γ¿»á INT", ¬«Γ«αδ⌐ ºáΓѼ ¼«ª¡« í佫 íδ ¿ß»«½∞º«óáΓ∞ ó
- »α«úαá¼¼Ñ ß«αΓ¿α«ó¬¿ ¿º ú½áóδ 5 ó ¬«¡ΓѬßΓÑ ó¿ñá
-
- PFI STRCMP, NUMCMP, SWAP;
-
-
- ê¼ÑεΓß∩ ñóÑ «ß¡«ó¡δÑ »α¿τ¿¡δ »α¿¼Ñ¡Ñ¡¿∩ «»¿ßá¡¿⌐
- TYPEDEF. ÅÑαóá∩ »α¿τ¿¡á ßó∩ºá¡á ß »áαá¼ÑΓα¿ºáµ¿Ñ⌐ »α«úαá¼¼δ,
- τΓ«íδ «í½Ñúτ¿Γ∞ αÑΦÑ¡¿Ñ »α«í½Ñ¼δ »ÑαÑ¡«ß¿¼«ßΓ¿. àß½¿ ñ½∩ Γ¿-
- »«ó ñá¡¡δσ, ¬«Γ«αδÑ ¼«úπΓ íδΓ∞ ¼áΦ¿¡¡«-ºáó¿ß¿¼δ¼¿, ¿ß»«½∞º«-
- óáΓ∞ «»¿ßá¡¿Ñ TYPEDEF, Γ« »α¿ »ÑαÑ¡«ßÑ »α«úαá¼¼δ ¡á ñαπúπε
- ¼áΦ¿¡π »α¿ñÑΓß∩ ¿º¼Ñ¡¿Γ∞ Γ«½∞¬« φΓ¿ «»¿ßá¡¿∩. Äñ¡á ¿º Γ¿»¿τ-
- ¡δσ ß¿Γπᵿ⌐ ß«ßΓ«¿Γ ó ¿ß»«½∞º«óá¡¿¿ «»αÑñѽ∩Ѽδσ ß »«¼«Θ∞ε
- TYPEDEF ¿¼Ñ¡ ñ½∩ αẽ¿τ¡δσ µÑ½δσ óѽ¿τ¿¡ ¿ ó »«ß½ÑñπεΘѼ
- »«ñσ«ñ∩ΘѼ óδí«αÑ Γ¿»«ó SHORT, INT ¿ LONG ñ½∩ ¬áªñ«⌐ ¿¼Ñε-
- ΘÑ⌐ß∩ ¼áΦ¿¡δ.
- éΓ«α«Ñ ¡áº¡áτÑ¡¿Ñ TYPEDEF ß«ßΓ«¿Γ ó «íÑß»ÑτÑ¡¿¿ ½πτΦÑ⌐ ñ«¬π-
- ¼Ñ¡Γᵿ¿ ñ½∩ »α«úαá¼¼δ - Γ¿» ß ¿¼Ñ¡Ñ¼ TREEPTR ¼«ªÑΓ «¬áºáΓ∞-
- ß∩ í«½ÑÑ πñ«í¡δ¼ ñ½∩ ó«ß»α¿∩Γ¿∩, τѼ Γ¿», ¬«Γ«αδ⌐ «»¿ßá¡
- Γ«½∞¬« ¬á¬ π¬áºáΓѽ∞ ß½«ª¡«⌐ ßΓαπ¬Γπαδ.
- ê ¡á¬«¡Ñµ, óßÑúñá ßπΘÑßΓóπÑΓ óÑα«∩Γ¡«ßΓ∞, τΓ« ó íπñπΘѼ ¬«¼-
- »¿½∩Γ«α ¿½¿ ¡Ñ¬«Γ«αá∩ ñαπúá∩ »α«úαá¼¼á, Γá¬á∩ ¬á¬ LINT, ß¼«-
- ªÑΓ ¿ß»«½∞º«óáΓ∞ ß«ñÑαªáΘπεß∩ ó «»¿ßá¡¿∩σ TYPEDEF ¿¡Σ«α¼áµ¿ε
- ñ½∩ »α«óÑñÑ¡¿∩ ¡Ñ¬«Γ«α«⌐ ñ«»«½¡¿Γѽ∞¡«⌐ »α«óÑન »α«úαá¼¼δ.
-