home *** CD-ROM | disk | FTP | other *** search
/ For Beginners & Professional Hackers / cd.iso / docum / k-r.doc / c_6.doc < prev    next >
Encoding:
Text File  |  1988-11-18  |  46.3 KB  |  1,268 lines

  1.                            - 128 -
  2.      
  3.      6. æΓαπ¬Γπαδ.
  4.      æΓαπ¬Γπαá - φΓ« ¡áí«α ¿º «ñ¡«⌐ ¿½¿ í«½ÑÑ »ÑαѼѡ¡δσ,
  5.  ó«º¼«ª¡« αẽ¿τ¡δσ Γ¿»«ó, ßúαπ»»¿α«óá¡¡δσ »«ñ «ñ¡¿¼ ¿¼Ñ¡Ñ¼
  6.  ñ½∩ πñ«íßΓóá «íαáí«Γ¬¿. (頡Ѭ«Γ«αδσ ∩ºδ¬áσ, ßá¼δ⌐ ¿ºóÑßΓ¡δ⌐
  7.  ¿º ¬«Γ«αδσ »á߬á½∞, ßΓαπ¬Γπαδ ¡áºδóáεΓß∩ "ºá»¿ß∩¼¿").
  8.      Æαáñ¿µ¿«¡¡δ¼ »α¿¼Ñα«¼ ßΓαπ¬Γπαδ ∩ó½∩ÑΓß∩ πτÑΓ¡á∩ ¬áαΓ«τ-
  9.  ¬á αáí«ΓáεΘÑú«: "ß½πªáΘ¿⌐" «»¿ßδóáÑΓß∩ ¡áí«α«¼ áΓα¿íπΓ«ó Γá-
  10.  ¬¿σ, ¬á¬ ΣἿ½¿∩, ¿¼∩, «ΓτÑßΓó« (Σ.¿.«.), áñαÑß, ¬«ñ ß«µ¿-
  11.  á½∞¡«ú« «íÑß»ÑτÑ¡¿∩, ºáα»½áΓá ¿ Γ.ñ. ìѬ«Γ«αδÑ ¿º φΓ¿σ áΓα¿-
  12.  íπΓ«ó ßἿ ¼«úπΓ «¬áºáΓ∞ß∩ ßΓαπ¬ΓπαἿ: Σ.¿.«. ê¼ÑÑΓ ¡Ñß-
  13.  ¬«½∞¬« ¬«¼»«¡Ñ¡Γ, ¬á¬ ¿ áñαÑß, ¿ ñáªÑ ºáα»½áΓá.
  14.      æΓαπ¬Γπαδ «¬áºδóáεΓß∩ »«½Ñº¡δ¼¿ »α¿ «αúá¡¿ºáµ¿¿ ß½«ª¡δσ
  15.  ñá¡¡δσ «ß«íÑ¡¡« ó í«½∞Φ¿σ »α«úαá¼¼áσ, »«ß¬«½∞¬π ó« ¼¡«ú¿σ
  16.  ß¿Γπᵿ∩σ «¡¿ »«ºó«½∩εΓ ßúαπ»»¿α«óáΓ∞ ßó∩ºá¡¡δÑ ñá¡¡δÑ Γᬿ¼
  17.  «íαẫ¼, τΓ« ß ¡¿¼¿ ¼«ª¡« «íαáΘáΓ∞ß∩, ¬á¬ ß «ñ¡¿¼ µÑ½δ¼, á
  18.  ¡Ñ ¬á¬ ß «Γñѽ∞¡δ¼¿ «íΩѬΓἿ. é φΓ«⌐ ú½áóÑ ¼δ »«ßΓáαáѼß∩
  19.  »α«ñѼ«¡ßΓα¿α«óáΓ∞ Γ«, ¬á¬ ¿ß»«½∞ºπεΓß∩ ßΓαπ¬Γπαδ. Åα«úαá¼-
  20.  ¼δ, ¬«Γ«αδÑ ¼δ ñ½∩ φΓ«ú« íπñѼ ¿ß»«½∞º«óáΓ∞, í«½∞ΦÑ, τѼ
  21.  ¼¡«ú¿Ñ ñαπú¿Ñ ó φΓ«⌐ ¬¡¿úÑ, ¡« óßÑ ªÑ ñ«ßΓáΓ«τ¡« π¼ÑαÑ¡¡δσ
  22.  αẼÑα«ó.
  23.  
  24.  6.1. Äß¡«ó¡δÑ ßóÑñÑ¡¿∩.
  25.      äáóá⌐ΓÑ ß¡«óá «íαáΓ¿¼ß∩ ¬ »α«µÑñπαá¼ »αÑ«íαẫóá¡¿∩ ñáΓδ
  26.  ¿º ú½áóδ 5. äáΓá ß«ßΓ«¿Γ ¿º ¡Ñ߬«½∞¬¿σ τáßΓÑ⌐ Γᬿσ, ¬á¬
  27.  ñÑ¡∞, ¼Ñß∩µ, ¿ ú«ñ, ¿, ó«º¼«ª¡«, ñÑ¡∞ ú«ñá ¿ ¿¼∩ ¼Ñß∩µá. ¥Γ¿
  28.  »∩Γ∞ »ÑαѼѡ¡δσ ¼«ª¡« «íΩÑñÑ¡¿Γ∞ ó «ñ¡π ßΓαπ¬Γπαπ ó¿ñá:
  29.  
  30.   STRUCT DATE \(
  31.   INT  DAY;
  32.   INT  MONTH;
  33.   INT  YEAR;
  34.   INT  YEARDAY;
  35.   CHAR MON_NAME[4];
  36.   \);
  37.  
  38.      Ä»¿ßá¡¿Ñ ßΓαπ¬Γπαδ, ß«ßΓ«∩ΘÑÑ ¿º ºá¬½ετÑ¡¡«ú« ó Σ¿úπα¡δÑ
  39.  ß¬«í¬¿ ß»¿ß¬á «»¿ßá¡¿⌐, ¡áτ¿¡áÑΓß∩ ß ¬½ετÑó«ú« ß½«óá STRUCT.
  40.  çá ß½«ó«¼ STRUCT ¼«ªÑΓ ß½Ññ«óáΓ∞ ¡Ñ«í∩ºáΓѽ∞¡«Ñ ¿¼∩, ¡áºδóá-
  41.  Ñ¼«Ñ ∩α½δ¬«¼ ßΓαπ¬Γπαδ (ºñÑß∞ φΓ« DATÑ). Æá¬«⌐ ∩α½δ¬ ¿¼Ñ¡πÑΓ
  42.  ßΓαπ¬Γπαδ φΓ«ú« ó¿ñá ¿ ¼«ªÑΓ ¿ß»«½∞º«óáΓ∞ß∩ ó ñá½∞¡Ñ⌐ΦѼ ¬á¬
  43.  ß«¬αáΘÑ¡¡á∩ ºá»¿ß∞ »«ñα«í¡«ú« «»¿ßá¡¿∩.
  44.      ¥½Ñ¼Ñ¡Γδ ¿½¿ »ÑαѼѡ¡δÑ, π»«¼∩¡πΓδÑ ó ßΓαπ¬ΓπαÑ, ¡áºδóá-
  45.  εΓß∩ τ½Ñ¡á¼¿. ƒα½δ¬¿ ¿ τ½Ñ¡δ ßΓαπ¬Γπα ¼«úπΓ ¿¼ÑΓ∞ ΓᬿѠªÑ
  46.  ¿¼Ñ¡á, τΓ« ¿ «íδτ¡δÑ »ÑαѼѡ¡δÑ (Γ.Ñ. ìÑ ∩ó½∩εΘ¿Ñß∩ τ½Ñ¡á¼¿
  47.  ßΓαπ¬Γπα), »«ß¬«½∞¬π ¿σ ¿¼Ñ¡á óßÑúñá ¼«ª¡« αẽ¿τ¿Γ∞ »« ¬«¡-
  48.  ΓѬßΓπ. è«¡Ñτ¡«, «íδτ¡« «ñ¿¡á¬«óδÑ ¿¼Ñ¡á »α¿ßóá¿óáεΓ Γ«½∞¬«
  49.  ΓÑß¡« ßó∩ºá¡¡δ¼ «íΩѬΓá¼.
  50.      
  51.                            - 129 -
  52.      
  53.      Æ«τ¡« ΓᬠªÑ, ¬á¬ ó ß½πτáÑ ½εí«ú« ñαπú«ú« íếߡ«ú« Γ¿-
  54.  »á, ºá »αáó«⌐ Σ¿úπα¡«⌐ ß¬«í¬«⌐, ºá¬αδóáεΘÑ⌐ ß»¿ß«¬ τ½Ñ¡«ó,
  55.  ¼«ªÑΓ ß½Ññ«óáΓ∞ ß»¿ß«¬ »ÑαѼѡ¡δσ.
  56.  Ä»ÑαáΓ«α
  57.  
  58.     STRUCT   \( ...\) X,Y,Z;
  59.  
  60.  ß¿¡Γá¬ß¿τÑ߬¿ á¡á½«ú¿τÑ¡
  61.  
  62.     INT X,Y,Z;
  63.  
  64.  ó Γ«¼ ß¼δß½Ñ, τΓ« ¬áªñδ⌐ ¿º «»ÑαáΓ«α«ó «»¿ßδóáÑΓ X , Y ¿ Z ó
  65.  ¬áτÑßΓóÑ »ÑαѼѡ¡δσ ß««ΓóÑßΓóπεΘ¿σ Γ¿»«ó ¿ »α¿ó«ñ¿Γ ¬ óδñÑ-
  66.  ½Ñ¡¿ε ñ½∩ ¡¿σ »á¼∩Γ¿.
  67.      Ä»¿ßá¡¿Ñ ßΓαπ¬Γπαδ, ºá ¬«Γ«αδ¼ ¡Ñ ß½ÑñπÑΓ ß»¿ß¬á »ÑαÑ-
  68.  ¼Ñ¡¡δσ, ¡Ñ »α¿ó«ñ¿Γ ¬ óδñѽѡ¿ε ¬á¬«⌐-½¿í« »á¼∩Γ¿; «¡« Γ«½∞-
  69.  ¬« «»αÑñѽ∩ÑΓ Φáí½«¡ ¿½¿ Σ«α¼π ßΓαπ¬Γπαδ. Äñ¡á¬«, Ñß½¿ ΓᬫÑ
  70.  «»¿ßá¡¿Ñ ß¡áíªÑ¡« ∩α½δ¬«¼, Γ« φëà∩α½δ¬ ¼«ªÑΓ íδΓ∞ ¿ß»«½∞-
  71.  º«óá¡ »«ºñ¡ÑÑ »α¿ «»αÑñѽѡ¿¿ Σá¬Γ¿τÑ߬¿σ φ¬ºÑ¼»½∩α«ó ßΓαπ¬-
  72.  Γπα. ìá»α¿¼Ñα, Ñß½¿ ñá¡« »α¿óÑñÑ¡¡«Ñ óδΦÑ «»¿ßá¡¿Ñ DATE, Γ«
  73.  
  74.     STRUCT  DATE D;
  75.  
  76.  «»αÑñѽ∩ÑΓ »ÑαѼѡ¡πε D ó ¬áτÑßΓóÑ ßΓαπ¬Γπαδ Γ¿»á DATE.
  77.  é¡ÑΦ¡εε ¿½¿ ßΓáΓ¿τÑ߬πε ßΓαπ¬Γπαπ ¼«ª¡« ¿¡¿µ¿á½¿º¿α«óáΓ∞,
  78.  »«¼ÑßΓ¿ó óß½Ññ ºá ÑÑ «»αÑñѽѡ¿Ñ¼ ß»¿ß«¬ ¿¡¿µ¿á½¿ºáΓ«α«ó ñ½∩
  79.  ÑÑ ¬«¼»«¡Ñ¡Γ:
  80.  
  81.   STRUCT DATE D=\( 4, 7, 1776, 186, "JUL"\);
  82.  
  83.      ù½Ñ¡ «»αÑñѽѡ¡«⌐ ßΓαπ¬Γπαδ ¼«ªÑΓ íδΓ∞ π¬áºá¡ ó óδαáªÑ-
  84.  ¡¿¿ ß »«¼«Θ∞ε ¬«¡ßΓαπ¬µ¿¿ ó¿ñá
  85.  
  86.    ¿¼∩ ßΓαπ¬Γπαδ . ù½Ñ¡
  87.    --------------------
  88.  Ä»Ñαᵿ∩ π¬áºá¡¿∩ τ½Ñ¡á ßΓαπ¬Γπαδ "." ßó∩ºδóáÑΓ ¿¼∩ ßΓαπ¬Γπ-
  89.  αδ ¿ ¿¼∩ τ½Ñ¡á. é ¬áτÑßΓóÑ »α¿¼Ñαá «»αÑñѽ¿¼ LEAP (»α¿º¡á¬
  90.  ó¿ß«¬«ß¡«ßΓ¿ ú«ñá) ¡á «ß¡«óÑ ñáΓδ, ¡áσ«ñ∩ΘÑ⌐ß∩ ó ßΓαπ¬ΓπαÑ
  91.  D,
  92.  
  93.  LEAP = D.YEAR % 4 == 0 && D.YEAR % 100 != 0
  94.     \!\! D.YEAR % 400 == 0;
  95.  
  96.  ¿½¿ »α«óÑα¿¼ ¿¼∩ ¼Ñß∩µá
  97.  
  98.   IF (STRCMP(D.MON_NAME, "AUG") == 0) ...
  99.  
  100.  ê½¿ »αÑ«íαáºπѼ »Ñαóδ⌐ ß¿¼ó«½ ¿¼Ñ¡¿ ¼Ñß∩µá Γá¬, τΓ«íδ «¡«
  101.  ¡áτ¿¡á½«ß∞ ß« ßΓα«τ¡«⌐ íπ¬óδ
  102.  
  103.   D.MON_NAME[0] = LOWER(D.MON_NAME[0]);
  104.             
  105.                            - 130 -
  106.      
  107.      æΓαπ¬Γπαδ ¼«úπΓ íδΓ∞ ó½«ªÑ¡¡δ¼¿; πτÑΓ¡á∩ ¬áαΓ«τ¬á ß½πªá-
  108.  ΘÑú« ¼«ªÑΓ Σá¬Γ¿τÑ߬¿ óδú½∩ñÑΓ∞ Γá¬:
  109.  
  110.   STRUCT  PERSON  \(
  111.      CHAR NAME[NAMESIZE];
  112.      CHAR ADDRESS[ADRSIZE];
  113.      LONG ZIPCODE;   /* »«τΓ«óδ⌐ ¿¡ñѬߠ*/
  114.      LONG SS_NUMBER; /* ¬«ñ ß«µ. ÄíÑß»ÑτÑ¡¿∩ */
  115.      DOUBLE SALARY;  /* ºáα»½áΓá */
  116.      STRUCT DATE BIRTHDATE; /* ñáΓá α«ªñÑ¡¿∩ */
  117.      STRUCT DATE HIREDATE; /* ñáΓá »«ßΓπ»½Ñ¡¿∩
  118.       ¡á αáí«Γπ */
  119.   \);
  120.  
  121.  
  122.  æΓαπ¬Γπαá PERSON ß«ñÑαª¿Γ ñóÑ ßΓαπ¬Γπαδ Γ¿»á DATE . àß½¿ ¼δ
  123.  «»αÑñѽ¿¼ EMP ¬á¬
  124.  
  125.   STRUCT PERSON EMP;
  126.  
  127.  Γ«
  128.  
  129.   EMP.BIRTHDATE.MONTH
  130.  
  131.  íπñÑΓ ßßδ½áΓ∞ß∩ ¡á ¼Ñß∩µ α«ªñÑ¡¿∩. Ä»Ñαᵿ∩ π¬áºá¡¿∩ τ½Ñ¡á
  132.  ßΓαπ¬Γπαδ "." áßß«µ¿¿απÑΓß∩ ß½Ñóá ¡á»αáó«.
  133.  
  134.  6.2. æΓαπ¬Γπαδ ¿ Σπ¡¬µ¿¿.
  135.      é ∩ºδ¬Ñ "C" ßπΘÑßΓóπÑΓ α∩ñ «úαá¡¿τÑ¡¿⌐ ¡á ¿ß»«½∞º«óá¡¿Ñ
  136.  ßΓαπ¬Γπα. Äí∩ºáΓѽ∞¡δÑ »αáó¿½á ºá¬½ετáεΓß∩ ó Γ«¼, τΓ« Ññ¿¡ß-
  137.  ΓóÑ¡¡δÑ «»Ñαᵿ¿, ¬«Γ«αδÑ óδ ¼«ªÑΓÑ »α«ó«ñ¿Γ∞ ß« ßΓαπ¬Γπαá-
  138.  ¼¿, ß«ßΓ«∩Γ ó «»αÑñѽѡ¿¿ ÑÑ áñαÑßá ß »«¼«Θ∞ε «»Ñαᵿ¿ & ¿
  139.  ñ«ßΓπ»Ñ ¬ «ñ¡«¼π ¿º ÑÑ τ½Ñ¡«ó. ¥Γ« ó½ÑτÑΓ ºá ß«í«⌐ Γ«, τΓ«
  140.  ßΓαπ¬Γπαδ ¡Ñ½∞º∩ »α¿ßóá¿óáΓ∞ ¿½¿ ¬«»¿α«óáΓ∞ ¬á¬ µÑ½«Ñ, ¿ τΓ«
  141.  «¡¿ ¡Ñ ¼«úπΓ íδΓ∞ »ÑαÑñá¡δ Σπ¡¬µ¿∩¼ ¿½¿ ó«ºóαáΘÑ¡δ ¿¼¿. (é
  142.  »«ß½ÑñπεΘ¿σ óÑαß¿∩σ φΓ¿ «úαá¡¿τÑ¡¿∩ íπñπΓ ß¡∩Γδ). ìá π¬áºá-
  143.  Γѽ¿ ßΓαπ¬Γπα φΓ¿ «úαá¡¿τÑ¡¿∩ «ñ¡á¬« ¡Ñ ¡á¬½áñδóáεΓß∩, Γá¬
  144.  τΓ« ßΓαπ¬Γπαδ ¿ Σπ¡¬µ¿¿ óßÑ ªÑ ¼«úπΓ ß πñ«íßΓó«¼ αáí«ΓáΓ∞
  145.  ß«ó¼ÑßΓ¡«. ê ¡á¬«¡Ñµ, áóΓ«¼áΓ¿τÑ߬¿Ñ ßΓαπ¬Γπαδ, ¬á¬ ¿ áóΓ«-
  146.  ¼áΓ¿τÑ߬¿Ñ ¼áßß¿óδ, ¡Ñ ¼«úπΓ íδΓ∞ ¿¡¿µ¿á½¿º¿α«óá¡δ; ¿¡¿µ¿á-
  147.  ½¿ºáµ¿∩ ó«º¼«ª¡á Γ«½∞¬« ó ß½πτáÑ ó¡ÑΦ¡¿σ ¿½¿ ßΓáΓ¿τÑ߬¿σ
  148.  ßΓαπ¬Γπα.
  149.      äáóá⌐ΓÑ αáºíÑαѼ ¡Ñ¬«Γ«αδÑ ¿º φΓ¿σ ó«»α«ß«ó, »ÑαÑ»¿ßáó ß
  150.  φΓ«⌐ µÑ½∞ε Σπ¡¬µ¿¿ »Ñα«íαẫóá¡¿∩ ñáΓδ ¿º »αÑñδñπΘÑ⌐ ú½áóδ
  151.  Γá¬, τΓ«íδ «¡¿ ¿ß»«½∞º«ó὿ ßΓαπ¬Γπαδ. Æá¬ ¬á¬ »αáó¿½á ºá»-
  152.  αÑΘáεΓ ¡Ñ»«ßαÑñßΓóÑ¡¡πε »ÑαÑñáτπ ßΓαπ¬Γπαδ Σπ¡¬µ¿¿, Γ« ¼δ
  153.  ñ«½ª¡δ ½¿í« »ÑαÑñáóáΓ∞ «Γñѽ∞¡« ¬«¼»«¡Ñ¡Γδ, ½¿í« »ÑαÑñáΓ∞
  154.  π¬áºáΓѽ∞ óßÑ⌐ ßΓαπ¬Γπαδ. ÅÑαóá∩ ó«º¼«ª¡«ßΓ∞ ñѼ«¡ßΓα¿απÑΓß∩
  155.  ¡á »α¿¼ÑαÑ Σπ¡¬µ¿¿ DAY_OF_YEAR, ¬á¬ ¼δ ÑÑ ¡á»¿ß὿ ó ú½áóÑ
  156.  5:
  157.      
  158.   D.YEARDAY = DAY_OF_YEAR(D.YEAR, D.MONTH, D.DAY);
  159.             
  160.                            - 131 -
  161.      
  162.  ñαπú«⌐ ß»«ß«í ß«ßΓ«¿Γ ó »ÑαÑñáτÑ π¬áºáΓѽ∩. Ñß½¿ ¼δ «»¿ΦѼ
  163.  HIREDATE ¬á¬
  164.  
  165.   STRUCT  DATE HIREDATE;
  166.  
  167.  ¿ »ÑαÑ»¿ΦѼ DAY_OF_YEAR ¡πª¡δ¼ «íαẫ¼, ¼δ ß¼«ªÑ¼ Γ«úñá ¡á-
  168.  »¿ßáΓ∞
  169.  
  170.   HIREDATE YEARDAY = DAY_OF_YEAR(&HIREDATE);
  171.  
  172.  »ÑαÑñáóá∩ π¬áºáΓѽ∞ ¡á HIREDATE Σπ¡¬µ¿¿ DAY_OF_YEAR . öπ¡¬-
  173.  µ¿∩ ñ«½ª¡á íδΓ∞ ¼«ñ¿Σ¿µ¿α«óá¡á, »«Γ«¼π τΓ« ÑÑ áαúπ¼Ñ¡Γ ΓÑ-
  174.  »Ñα∞ ∩ó½∩ÑΓß∩ π¬áºáΓѽѼ, á ¡Ñ ß»¿ß¬«¼ »ÑαѼѡ¡δσ.
  175.  
  176.     DAY_OF_YEAR(PD) /* SET DAY OF YEAR FROM MONTH, DAY */
  177.     STRUCT DATE *PD;
  178.     \(
  179.  INT I, DAY, LEAP;
  180.  
  181.  DAY = PD->DAY;
  182.  LEAP = PD->YEAR % 4 == 0 && PD->YEAR % 100 != 0
  183.     \!\! PD->YEAR % 400 == 0;
  184.  FOR (I =1;  I < PD->MONTH; I++)
  185.     DAY += DAY_TAB[LEAP][I];
  186.  RETURN(DAY);
  187.      \)
  188.  
  189.  
  190.  Ä»¿ßá¡¿Ñ
  191.  
  192.  STRUCT DATE *PD;
  193.  
  194.  ú«ó«α¿Γ, τΓ« PD ∩ó½∩ÑΓß∩ π¬áºáΓѽѼ ßΓαπ¬Γπαδ Γ¿»á DATE.
  195.  çỿß∞, »«¬áºá¡¡á∩ ¡á »α¿¼ÑαÑ
  196.  
  197.  PD->YEAR
  198.  
  199.  ∩ó½∩ÑΓß∩ ¡«ó«⌐. àß½¿ P - π¬áºáΓѽ∞ ¡á ßΓαπ¬Γπαπ, Γ«
  200.                 P-> τ½Ñ¡ ßΓαπ¬Γπαδ
  201.                 ------------------
  202.  «íαáΘáÑΓß∩ ¬ ¬«¡¬αÑΓ¡«¼π τ½Ñ¡π. (Ä»Ñαᵿ∩ -> - φΓ« º¡á¬ ¼¿-
  203.  ¡πß, ºá ¬«Γ«αδ¼ ß½ÑñπÑΓ º¡á¬ ">".)
  204.      Æá¬ ¬á¬ PD π¬áºδóáÑΓ ¡á ßΓαπ¬Γπαπ, Γ« ¬ τ½Ñ¡π YEAR ¼«ª¡«
  205.  «íαáΓ¿Γ∞ß∩ ¿ ß½ÑñπεΘ¿¼ «íαẫ¼
  206.  
  207.   (*PD).YEAR
  208.  
  209.  ¡« π¬áºáΓѽ¿ ßΓαπ¬Γπα ¿ß»«½∞ºπεΓß∩ ¡áßΓ«½∞¬« τáßΓ«, τΓ« ºá-
  210.  »¿ß∞ -> «¬áºδóáÑΓß∩ πñ«í¡δ¼ ß«¬αáΘÑ¡¿Ñ¼. èαπú½δѠ߬«í¬¿ ó
  211.  (*PD).YEAR ¡Ñ«íσ«ñ¿¼δ, »«Γ«¼π τΓ« «»Ñαᵿ∩ π¬áºá¡¿∩ τ½Ñ¡á
  212.      
  213.                            - 132 -
  214.      
  215.  ßΓπ¬Γπαδ ßΓáαΦÑ , τѼ * . ÄíÑ «»Ñαᵿ¿, "->" ¿ ".", áßß«µ¿¿-
  216.  απεΓß∩ ß½Ñóá ¡á»αáó«, ΓᬠτΓ« ¬«¡ßΓαπ¬µ¿¿ ß½Ñóá ¿ ß»αáóá
  217.  º¬ó¿óá½Ñ¡Γ¡δ
  218.  
  219.   P->Q->MEMB    (P->Q)->MEMB
  220.   EMP.BIRTHDATE.MONTH    (EMP.BIRTHDATE).MONTH
  221.  
  222.  ä½∩ »«½¡«Γδ ¡¿ªÑ »α¿ó«ñ¿Γß∩ ñαπúá∩ Σπ¡¬µ¿∩, MONTH_DAY, »ÑαÑ-
  223.  »¿ßá¡¡á∩ ß ¿ß»«½∞º«ó᡿Ѽ ßΓαπ¬Γπα.
  224.  
  225.     MONTH_DAY(PD) /* SET MONTH AND DAY FROM DAY OF YEAR */
  226.     STRUCT DATE *PD;
  227.     \(
  228.   INT I, LEAP;
  229.  
  230.   LEAP = PD->YEAR % 4 == 0 && PD->YEAR % 100 != 0
  231.      \!\! PD->YEAR % 400 == 0;
  232.   PD->DAY = PD->YEARDAY;
  233.   FOR (I = 1; PD->DAY > DAY_TAB[LEAP][I]; I++)
  234.      PD->DAY -= DAY_TAB[LEAP][I];
  235.   PD->MONTH = I;
  236.      \)
  237.  
  238.      Ä»Ñαᵿ¿ αáí«Γδ ß« ßΓαπ¬ΓπαἿ "->" ¿ "." ¡áα∩ñπ ß« ()
  239.  ñ½∩ ß»¿ß¬á áαúπ¼Ñ¡Γ«ó ¿ [] ñ½∩ ¿¡ñѬ߫ó ¡áσ«ñ∩Γß∩ ¡á ßἫ¼
  240.  óÑασπ ¿Ñαáασ¿¿ ßΓαáΦ¿¡ßΓóá «»Ñαᵿ⌐ ¿, ß½Ññ«óáΓѽ∞¡«, ßó∩ºδ-
  241.  óáεΓß∩ «τÑ¡∞ ¬αÑ»¬«. àß½¿, ¡á»α¿¼Ñα, ¿¼ÑÑΓß∩ «»¿ßá¡¿Ñ
  242.  
  243.   STRUCT \(
  244.      INT X;
  245.      INT *Y;
  246.   \) *P;
  247.  
  248.  Γ« óδαáªÑ¡¿Ñ
  249.  
  250.   ++P->X
  251.      
  252.  πóѽ¿τ¿óáÑΓ σ, á ¡Ñ α, Γᬠ¬á¬ «¡« φ¬ó¿óá½Ñ¡Γ¡« óδαáªÑ¡¿ε
  253.  ++(P->σ). ä½∩ ¿º¼Ñ¡Ñ¡¿∩ »«α∩ñ¬á óδ»«½¡Ñ¡¿∩ «»Ñαᵿ⌐ ¼«ª¡«
  254.  ¿ß»«½∞º«óáΓ∞ ¬απú½δѠ߬«í¬¿: (++P)->σ πóѽ¿τ¿óáÑΓ P ñ« ñ«ß-
  255.  Γπ»á ¬ σ, á (P++)->X πóѽ¿τ¿óáÑΓ P »«ß½Ñ. (¬απú½δѠ߬«í¬¿ ó
  256.  »«ß½Ññ¡Ñ¼ ß½πτáÑ ¡Ñ«í∩ºáΓѽ∞¡δ. Å«τѼπ ?)
  257.      æ«óÑαΦÑ¡¡« á¡á½«ú¿τ¡« *P->Y ¿ºó½Ñ¬áÑΓ Γ«, ¡á τΓ« π¬áºδ-
  258.  óáÑΓ Y; *P->Y++ πóѽ¿τ¿óáÑΓ Y »«ß½Ñ «íαáí«Γ¬¿ Γ«ú«, ¡á τΓ«
  259.  «¡ π¬áºδóáÑΓ (Γ«τ¡« ΓᬠªÑ, ¬á¬ ¿ *S++); (*P->Y)++ πóѽ¿τ¿-
  260.  óáÑΓ Γ«, ¡á τΓ« π¬áºδóáÑΓ Y; *P++->Y πóѽ¿τ¿óáÑΓ P »«ß½Ñ óδ-
  261.  í«α¬¿ Γ«ú«, ¡á τΓ« π¬áºδóáÑΓ Y.
  262.             
  263.                            - 133 -
  264.      
  265.       6.3. îáßß¿óδ ßαπ¬Γπα.
  266.      æΓαπ¬Γπαδ «ß«íÑ¡¡« »«ñσ«ñ∩Γ ñ½∩ π»αáó½Ñ¡¿∩ ¼áßß¿óἿ
  267.  ßó∩ºá¡¡δσ »ÑαѼѡ¡δσ. Éáßß¼«Γα¿¼, ¡á»α¿¼Ñα, »α«úαá¼¼π »«ñß-
  268.  τÑΓá τ¿ß½á óσ«ªñÑ¡¿⌐ ¬áªñ«ú« ¬½ετÑó«ú« ß½«óá ∩ºδ¬á "C". ìá¼
  269.  ¡πªÑ¡ ¼áßß¿ó ß¿¼ó«½∞¡δσ ßΓ᫬ ñ½∩ σαá¡Ñ¡¿∩ ¿¼Ñ¡ ¿ ¼áßß¿ó µÑ-
  270.  ½δσ ñ½∩ »«ñßτÑΓá. «ñ¡á ¿º ó«º¼«ª¡«ßΓÑ⌐ ß«ßΓ«¿Γ ó ¿ß»«½∞º«óá-
  271.  ¡¿¿ ñóπσ »áαώѽ∞¡δσ ¼áßß¿ó«ó KEYWORD ¿ KEYCOUNT:
  272.  
  273.  CHAR *KEYWORD [NKEYS];
  274.  INT  KEYCOUNT [NKEYS];
  275.  
  276.  ì« ßá¼ Σá¬Γ, τΓ« ¼áßß¿óδ »áαώѽ∞¡δ, π¬áºδóáÑΓ ¡á ó«º¼«ª-
  277.  ¡«ßΓ∞ ñαπú«⌐ «αúá¡¿ºáµ¿¿. èáªñ«Ñ ¬½ετÑó«Ñ ß½«ó« ºñÑß∞ »« ßπ-
  278.  ΘÑßΓóπ ∩ó½∩ÑΓß∩ »áα«⌐:
  279.  
  280.  CHAR *KEYWORD;
  281.  INT  KEYCOUNT;
  282.  
  283.  ¿, ß½Ññ«óáΓѽ∞¡«, ¿¼ÑÑΓß∩ ¼áßß¿ó »áα. Ä»¿ßá¡¿Ñ ßΓαπ¬Γπαδ
  284.  
  285.  STRUCT KEY  \(
  286.     CHAR *KEYWORD;
  287.     INT  KEYCOUNT;
  288.  \) KEYTAB [NKEYS];
  289.  
  290.  «»Ñαñѽ∩ÑΓ ¼áßß¿ó KEYTAB ßΓαπ¬Γπα Γᬫú« Γ¿»á ¿ «Γó«ñ¿Γ ñ½∩
  291.  ¡¿σ »á¼∩Γ∞. èáªñδ⌐ φ½Ñ¼Ñ¡Γ ¼áßß¿óá ∩ó½∩ÑΓß∩ ßΓαπ¬Γπα«⌐. ¥Γ«
  292.  ¼«ª¡« í佫 íδ ºá»¿ßáΓ∞ ¿ Γá¬:
  293.  
  294.  STRUCT KEY  \(
  295.     CHAR *KEYWORD;
  296.     INT  KEYCOUNT;
  297.  \);
  298.  STRUCT KEY KEYTAB [NKEYS];
  299.  
  300.      Æá¬ ¬á¬ ßΓαπ¬Γπαá KEYTAB Σá¬Γ¿τÑ߬¿ ß«ñÑαª¿Γ »«ßΓ«∩¡¡δ⌐
  301.  ¡áí«α ¿¼Ñ¡, Γ« ½ÑúτÑ óßÑú« ¿¡¿µ¿á½¿º¿α«óáΓ∞ ÑÑ «ñ¿¡ αẠ¿
  302.  ñ½∩ óßÑσ τ½Ñ¡«ó »α¿ «»αÑñѽѡ¿¿. ê¡¿µ¿á½¿ºáµ¿∩ ßΓαπ¬Γπα
  303.  ó»«½¡Ñ á¡á½«ú¿τ¡á »αÑñδñπΘ¿¼ ¿¡¿µ¿á½¿ºáµ¿∩¼ - ºá «»αÑñѽѡ¿-
  304.  Ñ¼ ß½ÑñπÑΓ ºá¬½ετÑ¡¡δ⌐ ó Σ¿úπα¡δѠ߬«í¬¿ ß»¿ß«¬ ¿¡¿µ¿á½¿ºá-
  305.  Γ«α«ó:
  306.  
  307.   STRUCT KEY  \(
  308.      CHAR *KEYWORD;
  309.      INT  KEYCOUNT;
  310.   \) KEYTAB[] =\(
  311.      "BREAK", 0,
  312.      "CASE", 0,
  313.      "CHAR", 0,
  314.      "CONTINUE", 0,
  315.      "DEFAULT", 0,
  316.      /* ... */
  317.      "UNSIGNED", 0,
  318.      "WHILE", 0
  319.   \);
  320.  
  321.  ê¡¿µ¿á½¿ºáΓ«αδ »ÑαÑτ¿ß½∩εΓß∩ »áαἿ ß««ΓóÑΓßΓóÑ¡¡« τ½Ñ¡á¼
  322.  ßΓαπ¬Γπαδ. ü佫 íδ í«½ÑÑ Γ«τ¡« ºá¬½ετáΓ∞ ó Σ¿úπα¡δѠ߬«í¬¿
  323.  ¿¡¿µ¿á½¿ºáΓ«αδ ñ½∩ ¬áªñ«⌐ "ßΓ᫬¿" ¿½¿ ßΓαπ¬Γπαδ ß½ÑñπεΘ¿¼
  324.  «íαẫ¼:
  325.  
  326.   \( "BREAK", 0 \),
  327.   \( "CASE", 0 \),
  328.   . . .
  329.             
  330.                            - 134 -
  331.      
  332.  ì« ¬«úñá ¿¡¿µ¿á½¿ºáΓ«αδ ∩ó½∩εΓß∩ »α«ßΓ묨 »ÑαѼѡ¡δ¼¿ ¿½¿
  333.  ß¿¼ó«½∞¡δ¼¿ ßΓα«¬á¼¿ ¿ óßÑ «¡¿ »α¿ßπΓßΓóπεΓ, Γ« ó« ó¡πΓαÑ¡-
  334.  ¡¿σ Σ¿úπα¡δσ ß¬«í¬áσ ¡ÑΓ ¡Ñ«íσ«ñ¿¼«ßΓ¿. èᬠ«íδτ¡«, ¬«¼»¿½∩-
  335.  Γ«α ßá¼ óδτ¿ß½¿Γ τ¿ß½« φ½Ñ¼Ñ¡Γ«ó ¼áßß¿óá KEYTAB, Ñß½¿ ¿¡¿µ¿-
  336.  á½¿ºáΓ«αδ »α¿ßπΓßΓóπεΓ, á ß¬«í¬¿ [] «ßΓáó½Ñ¡δ »πßΓ묨.
  337.      Åα«úαἼᠻ«ñßτÑΓá ¬½ετÑóδσ ß½«ó ¡áτ¿¡áÑΓß∩ ß «»αÑñѽÑ-
  338.  ¡¿∩ ¼áßß¿óá KEYTAB. óÑñπΘá∩ »α«úαá¼¼á τ¿ΓáÑΓ ßó«⌐ Σá⌐½ óó«-
  339.  ñá, »«ß½Ññ«óáΓѽ∞¡« «íαáΘá∩ß∞ ¬ Σπ¡¬µ¿¿ GETWORD, ¬«Γ«αá∩ ¿º-
  340.  ó½Ñ¬áÑΓ ¿º óó«ñá »« «ñ¡«¼π ß½«óπ ºá «íαáΘÑ¡¿Ñ. èáªñ«Ñ ß½«ó«
  341.  ¿ΘÑΓß∩ ó ¼áßß¿óÑ KEYTAB ß »«¼«Θ∞ε óáα¿á¡Γá Σπ¡¬µ¿¿ í¿¡áα¡«ú«
  342.  »«¿ß¬á, ¡á»¿ßá¡¡«⌐ ¡á¼¿ ó ú½áóÑ 3. (è«¡Ñτ¡«, τΓ«íδ φΓá Σπ¡¬-
  343.  µ¿∩ αáí«Γá½á, ß»¿ß«¬ ¬½ετÑóδσ ß½«ó ñ«½ªÑ¡ íδΓ∞ αáß»«½«ªÑ¡ ó
  344.  »«α∩ñ¬Ñ ó«ºαáßΓá¡¿∩).
  345.  
  346.   #DEFINE    MAXWORD   20
  347.  
  348.   MAIN()   /* COUNT "C" KEYWORDS */
  349.   \(
  350.   INT  N, T;
  351.   CHAR WORD[MAXWORD];
  352.  
  353.   WHILE ((T = GETWORD(WORD,MAXWORD)) != EOF)
  354.      IF (T == LETTER)
  355.        IF((N = BINARY(WORD,KEYTAB,NKEYS)) >= 0)
  356.           KEYTAB[N].KEYCOUNT++;
  357.   FOR (N =0; N < NKEYS; N++)
  358.      IF (KEYTAB[N].KEYCOUNT > 0)
  359.       PRINTF("%4D %S\N",
  360.         KEYTAB[N].KEYCOUNT, KEYTAB[N].KEYWORD);
  361.   \)
  362.   BINARY(WORD, TAB, N) /* FIND WORD IN TAB[0]...TAB[N-1] */
  363.   CHAR *WORD;
  364.   STRUCT KEY TAB[];
  365.   INT N;
  366.   \(
  367.    INT LOW, HIGH, MID, COND;
  368.    
  369.    LOW = 0;
  370.    HIGH = N - 1;
  371.    WHILE (LOW <= HIGH) \(
  372.      MID = (LOW+HIGH) / 2;
  373.      IF((COND = STRCMP(WORD, TAB[MID].KEYWORD)) < 0)
  374.       HIGH = MID - 1;
  375.      ELSE IF (COND > 0)
  376.       LOW = MID + 1;
  377.      ELSE
  378.       RETURN (MID);
  379.    \)
  380.    RETURN(-1);
  381.   \)
  382.  îδ ó߬«αÑ »α¿óÑñѼ Σπ¡¬µ¿ε GETWORD; »«¬á ñ«ßΓáΓ«τ¡« ß¬áºáΓ∞,
  383.  τΓ« «¡á ó«ºóαáΘáÑΓ LETTER ¬áªñδ⌐ αáº, ¬á¬ «¡á ¡áσ«ñ¿Γ ß½«ó«,
  384.  ¿ ¬«»¿απÑΓ φΓ« ß½«ó« ó ßó«⌐ »Ñαóδ⌐ áαúπ¼Ñ¡Γ.
  385.      
  386.                            - 135 -
  387.      
  388.      éѽ¿τ¿¡á NKEYS - φΓ« ¬«½¿τÑßΓó« ¬½ετÑóδσ ß½«ó ó ¼áßß¿óÑ
  389.  KEYTAB . ò«Γ∩ ¼δ ¼«ªÑ¼ ß«ßτ¿ΓáΓ∞ φΓ« τ¿ß½« óαπτ¡πε, ú«αáºñ«
  390.  ½ÑúτÑ ¿ ¡áñѪ¡ÑÑ »«απτ¿Γ∞ φΓ« ¼áΦ¿¡Ñ, «ß«íÑ¡¡« ó Γ«¼ ß½πτáÑ,
  391.  Ñß½¿ ß»¿ß«¬ ¬½ετÑóδσ ß½«ó »«ñóÑαªÑ¡ ¿º¼Ñ¡Ñ¡¿∩¼. Äñ¡«⌐ ¿º
  392.  ó«º¼«ª¡«ßΓÑ⌐ í佫 íδ ºá¬«¡τ¿Γ∞ ß»¿ß«¬ ¿¡¿µ¿á½¿ºáΓ«α«ó π¬áºá-
  393.  ¡¿Ñ¼ ¡á ¡π½∞ ¿ ºáΓѼ »α«⌐Γ¿ ó µ¿¬½Ñ ß¬ó«º∞ ¼áßß¿ó KEYTAB,
  394.  »«¬á ¡Ñ ¡á⌐ñÑΓß∩ ¬«¡Ñµ.
  395.      ì«, »«ß¬«½∞¬π αẼÑα φΓ«ú« ¼áßß¿óá »«½¡«ßΓ∞ε «»αÑñѽѡ ¬
  396.  ¼«¼Ñ¡Γ𠬫¼»¿½∩µ¿¿, ºñÑß∞ ¿¼ÑÑΓß∩ í«½ÑÑ »α«ßΓá∩ ó«º¼«ª¡«ßΓ∞.
  397.  ù¿ß½« φ½Ñ¼Ñ¡Γ«ó »α«ßΓ« ÑßΓ∞
  398.  
  399.  SIZE OF KEYTAB / SIZE OF STRUCT KEY
  400.  
  401.  ñѽ« ó Γ«¼, τΓ« ó ∩ºδ¬Ñ "C" »αÑñπß¼«ΓαÑ¡á π¡áα¡á∩ «»Ñαᵿ∩
  402.  SIZEOF, óδ»«½¡∩Ѽá∩ ó« óαѼ∩ ¬«¼»¿½∩µ¿¿, ¬«Γ«αá∩ »«ºó«½∩ÑΓ
  403.  óδτ¿ß½¿Γ∞ αẼÑα ½εí«ú« «íΩѬΓá. éδαáªÑ¡¿Ñ
  404.  
  405.  SIZEOF(OBJECT)
  406.  
  407.  óδñáÑΓ µÑ½«Ñ, αáó¡«Ñ αẼÑαπ π¬áºá¡¡«ú« «íΩѬΓá. (ÉẼÑα «»-
  408.  αÑñѽ∩ÑΓß∩ ó ¡Ñ߻ѵ¿Σ¿µ¿α«óá¡¡δσ Ññ¿¡¿µáσ, ¡áºδóáѼδσ "íá⌐-
  409.  ΓἿ", ¬«Γ«αδÑ ¿¼ÑεàëàªÑ αẼÑα, τΓ« ¿ »ÑαѼѡ¡δÑ Γ¿»á
  410.  CHAR). ÄíΩÑ¬Γ ¼«ªÑΓ íδΓ∞ Σá¬Γ¿τÑ߬«⌐ »ÑαѼѡ¡«⌐, ¼áß߿󫼠¿
  411.  ßΓαπ¬Γπα«⌐, ¿½¿ ¿¼Ñ¡Ñ¼ «ß¡«ó¡«ú« Γ¿»á, ¬á¬ INT ¿½¿ DOUBLE,
  412.  ¿½¿ ¿¼Ñ¡Ñ¼ »α«¿ºó«ñ¡«ú« Γ¿»á, ¬á¬ ßΓαπ¬Γπαá. é ¡áΦѼ ß½πτáÑ
  413.  τ¿ß½« ¬½ετÑóδσ ß½«ó αáó¡« αẼÑαπ ¼áßß¿óá, ñѽѡ¡«¼π ¡á αáº-
  414.  ¼Ñα «ñ¡«ú« φ½Ñ¼Ñ¡Γá ¼áßß¿óá. ¥Γ« óδτ¿ß½Ñ¡¿Ñ ¿ß»«½∞ºπÑΓß∩ ó
  415.  πΓóÑαªñÑ¡¿¿ #DEFINE ñ½∩ πßΓá¡«ó½Ñ¡¿∩ º¡áτÑ¡¿∩ NKEYS:
  416.  
  417.  #DEFINE NKEYS (SIZEOF(KEYTAB) / SIZEOF(STRUCT KEY))
  418.  
  419.      ÆÑ»Ñα∞ »ÑαÑ⌐ñѼ ¬ Σπ¡¬µ¿¿ GETWORD. îδ Σá¬Γ¿τÑ߬¿ ¡á»¿ßá-
  420.  ½¿ í«½ÑÑ «íΘ¿⌐ óáα¿á¡Γ Σπ¡¬µ¿¿ GETWORD, τѼ ¡Ñ«íσ«ñ¿¼« ñ½∩
  421.  φΓ«⌐ »α«úαá¼¼δ, ¡« «¡ ¡Ñ ¡á ¼¡«ú« í«½ÑÑ ß½«ªÑ¡. öπ¡¬µ¿∩
  422.  GETWORD ó«ºóαáΘáÑΓ ß½ÑñπεΘÑÑ "ß½«ó«" ¿º óó«ñá, úñÑ ß½«ó«¼
  423.  ßτ¿ΓáÑΓß∩ ½¿í« ßΓ᫬á íπ¬ó ¿ µ¿Σα, ¡áτ¿¡áεΘ¿σß∩ ß íπ¬óδ, ½¿-
  424.  í« «Γñѽ∞¡δ⌐ ß¿¼ó«½. Æ¿» «íΩѬΓá ó«ºóαáΘáÑΓß∩ ó ¬áτÑΓóÑ º¡á-
  425.  τÑ¡¿∩ Σπ¡¬µ¿¿; φΓ« - LETTER, Ñß½¿ ¡á⌐ñÑ¡« ß½«ó«, EOF ñ½∩
  426.  ¬«¡µá Σá⌐½á ¿ ßá¼ ß¿¼ó«½, Ñß½¿ «¡ ¡Ñ íπ¬óÑ¡¡δ⌐.
  427.  
  428.   GETWORD(W, LIM)   /* GET NEXT WORD FROM INPUT */
  429.   CHAR *W;
  430.   INT LIM;
  431.   \(
  432.    INT C, T;
  433.    IF (TYPE(C=*W++=GETCH()) !=LETTER) \(
  434.         *W='\0';
  435.         RETURN(C);
  436.    \)
  437.      
  438.                            - 136 -
  439.      
  440.   WHILE (--LIM > 0)  \(
  441.    T = TYPE(C = *W++ = GETCH());
  442.    IF (T ! = LETTER && T ! = DIGIT) \(
  443.         UNGETCH(C);
  444.         BREAK;
  445.    \)
  446.   \)
  447.   *(W-1) - '\0';
  448.   RETURN(LETTER);
  449.   \)
  450.  
  451.  öπ¡¬µ¿∩ GETWORD ¿ß»«½∞ºπÑΓ Σπ¡¬µ¿¿ GETCH ¿ UNGETCH, ¬«Γ«αδÑ
  452.  ¼δ ¡á»¿ß὿ ó ú½áóÑ 4: ¬«úñá ¡áí«α á½Σáó¿Γ¡δσ ß¿¼ó«½«ó »αÑ-
  453.  αδóáÑΓß∩, Σπ¡¬µ¿∩ GETWORD »«½πτáÑΓ «ñ¿¡ ½¿Φ¡¿⌐ ß¿¼ó«½. é αÑ-
  454.  ºπ½∞ΓáΓÑ ó맮óá UNGETCH φΓ«Γ ß¿¼ó«½ »«¼ÑΘáÑΓß∩ ¡áºáñ ó« óó«ñ
  455.  ñ½∩ ß½ÑñπεΘÑú« «íαáΘÑ¡¿∩.
  456.      öπ¡¬µ¿∩ GETWORD «íαáΘáÑΓß∩ ¬ Σπ¡¬µ¿¿ TYPE ñ½∩ «»αÑñѽÑ-
  457.  ¡¿∩ Γ¿»á ¬áªñ«ú« «Γñѽ∞¡«ú« ß¿¼ó«½á ¿º Σá⌐½á óó«ñá. é«Γ óá-
  458.  α¿á¡Γ, ß»αáóÑñ½¿óδ⌐ Γ«½∞¬« ñ½∩ á½Σáó¿Γá ASCII.
  459.  
  460.    TYPE(C)  /* RETURN TYPE OF ASCII CHARACTER */
  461.    INT C;
  462.     \(
  463.    IF (C>= 'A' && C<= 'Z' \!\! C>= 'A' && C<= 'Z')
  464.         RETURN(LETTER);
  465.    ELSE IF (C>= '0' && C<= '9')
  466.         RETURN(DIGIT);
  467.    ELSE
  468.         RETURN(C);
  469.    \)
  470.  
  471.  
  472.  æ¿¼ó«½¿τÑ߬¿Ñ ¬«¡ßΓá¡Γδ LETTER ¿ DIGIT ¼«úπΓ ¿¼ÑΓ∞ ½εíδÑ
  473.  º¡áτÑ¡¿∩, ½¿Φ∞ íδ «¡¿ ¡Ñ óßΓπ»á½¿ ó ¬«¡Σ½¿¬Γ ß ß¿¼ó«½á¼¿,
  474.  «Γ½¿τ¡δ¼¿ «Γ íπ¬óÑ¡¡«-µ¿Σα«óδσ, ¿ ß EOF; «τÑó¿ñ¡« ó«º¼«ªÑ¡
  475.  ß½ÑñπεΘ¿⌐ óδí«α
  476.  
  477.       #DEFINE   LETTER   'A'
  478.       #DEFINE   DIGIT   '0'
  479.  
  480.  Σπ¡¬µ¿∩ GETWORD ¼«ú½á íδ αáí«ΓáΓ∞ íδßΓαÑÑ, Ñß½¿ íδ «íαáΘÑ¡¿∩
  481.  ¬ Σπ¡¬µ¿¿ TYPE í뫨 ºá¼Ñ¡Ñ¡δ «íαáΘÑ¡¿∩¼¿ ¬ ß««ΓóÑΓßΓóπεΘѼπ
  482.  ¼áßß¿óπ TYPE[ ]. é ßΓá¡ñáαΓ¡«⌐ í¿í½¿«ΓѬѠ∩ºδ¬á "C" »αÑñπß-
  483.  ¼«ΓαÑ¡δ ¼á¬α«ßδ ISALPHA ¿ ISDIGIT, ñÑ⌐ßΓóπεΘ¿Ñ ¡Ñ«íσ«ñ¿¼δ¼
  484.  «íαẫ¼.
  485.      ô»α᪡ѡ¿Ñ 6-1.
  486.      --------------
  487.      æñѽá⌐ΓÑ Γá¬πε ¼«ñ¿Σ¿¬áµ¿ε Σπ¡¬µ¿¿ GETWORD ¿ «µÑ¡¿ΓÑ,
  488.  ¬á¬ ¿º¼Ñ¡¿Γß∩ ß¬«α«ßΓ∞ αáí«Γδ »α«úαá¼¼δ.
  489.      ô»α᪡ѡ¿Ñ 6-2.
  490.      --------------
  491.      ìá»¿Φ¿ΓÑ óáα¿á¡Γ Σπ¡¬µ¿¿ TYPE, ¡Ñ ºáó¿ß∩Θ¿⌐ «Γ ¬«¡¬αÑΓ-
  492.  ¡«ú« ¡áí«αáß¿¼ó«½«ó.
  493.      
  494.                            - 137 -
  495.      
  496.      ô»α᪡ѡ¿Ñ 6-3.
  497.      --------------
  498.      ìá»¿Φ¿ΓÑ óáα¿á¡Γ »α«úαá¼¼δ »«ñßτÑΓá ¬½ετÑóδσ ß½«ó, ¬«Γ«-
  499.  αδ⌐ íδ ¡Ñ πτ¿Γδóá½ »«∩ó½Ñ¡¿∩ φΓ¿σ ß½«ó ó ºá¬½ετÑ¡¡δσ ó ¬á-
  500.  óδτ¬¿ ßΓ᫬áσ.
  501.      
  502.      6.4. ô¬áºáΓѽ¿ ¡á ßΓαπ¬Γπαδ.
  503.      ùΓ«íδ »α«¿½½εßΓα¿α«óáΓ∞ ¡Ñ¬«Γ«αδÑ ß««íαáªÑ¡¿∩, ßó∩ºá¡¡δÑ
  504.  ß ¿ß»«½∞º«ó᡿Ѽ π¬áºáΓѽÑ⌐ ¿ ¼áßß¿ó«ó ßΓαπ¬Γπα, ñáóá⌐ΓÑ
  505.  ß¡«óá ß«ßΓáó¿¼ »α«úαá¼¼π »«ñßτÑΓá ¬½ετÑóδσ ßΓ᫬, ¿ß»«½∞ºπ∩
  506.  ¡á φëàαẠπ¬áºáΓѽ¿, á ¡Ñ ¿¡ñѬßδ ¼áßß¿ó«ó.
  507.      é¡ÑΦ¡ÑÑ «»¿ßá¡¿Ñ ¼áßß¿óá KEYTAB ¡Ñ ¡πª¡« ¿º¼Ñ¡∩Γ∞, ¡«
  508.  Σπ¡¬µ¿¿ MAIN ¿ BINARY ΓαÑíπεΓ ¼«ñ¿Σ¿¬áµ¿¿.
  509.  
  510.      MAIN()   /* COUNT C KEYWORD; POINTER VERSION */
  511.      \(
  512.     INT  T;
  513.     CHAR WORD[MAXWORD];
  514.     STRUCT KEY *BINARY(), *P;
  515.     WHILE ((T = GETWORD(WORD, MAXWORD;) !=EOF)
  516.       IF (T==LETTER)
  517.       IF ((P=BINARY(WORD,KEYTAB,NKEYS)) !=NULL)
  518.               P->KEYCOUNT++;
  519.     FOR (P=KEYTAB; P>KEYTAB + NKEYS; P++)
  520.       IF (P->KEYCOUNT > 0)
  521.    PRINTF("%4D %S/N", P->KEYCOUNT, P->KEYWORD);
  522.      \)
  523.       STRUCT KEY *BINARY(WORD, TAB, N) /* FIND WORD */
  524.      CHAR *WORD   /* IN TAB[0]...TAB[N-1] */
  525.      STRUCT KEY TAB [];
  526.      INT N;
  527.      \(
  528.     INT  COND;
  529.     STRUCT KEY *LOW = &TAB[0];
  530.     STRUCT KEY *HIGH = &TAB[N-1];
  531.     STRUCT KEY *MID;
  532.     WHILE (LOW <= HIGH) \(
  533.    MID = LOW + (HIGH-LOW) / 2;
  534.    IF ((COND = STRCMP(WORD, MID->KEYWORD)) < 0)
  535.          HIGH = MID - 1;
  536.    ELSE IF (COND > 0)
  537.          LOW = MID + 1;
  538.    ELSE
  539.          RETURN(MID);
  540.     \)
  541.     RETURN(NULL);
  542.      \)
  543.  
  544.      çñÑß∞ ¿¼ÑÑΓß∩ ¡Ñ߬«½∞¬« ¼«¼Ñ¡Γ«ó, ¬«Γ«αδÑ ßΓ«¿Γ «Γ¼Ñ-
  545.  Γ¿Γ∞. é«-»Ñαóδσ, «»¿ßá¡¿Ñ Σπ¡¬µ¿¿ BINARI ñ«½ª¡« π¬áºδóáΓ∞,
  546.  τΓ« «¡á ó«ºóαáΘáÑΓ π¬áºáΓѽ∞ ¡á ßΓαπ¬Γπαπ Γ¿»á KEY, á ¡Ñ ¡á
  547.  µÑ½«Ñ; φΓ« «íΩ∩ó½∩ÑΓß∩ ¬á¬ ó Σπ¡¬µ¿¿ MAIN, Γᬠ¿ ó BINARY.
  548.  àß½¿ Σπ¡¬µ¿∩ BINARI ¡áσ«ñ¿Γ ß½«ó«, Γ« «¡á ó«ºóαáΘáÑΓ π¬áºá-
  549.  Γѽ∞ ¡á ¡Ñú«; Ñß½¿ ªÑ ¡ÑΓ, «¡á ó«ºóαáΘáÑΓ NULL.
  550.      
  551.                            - 138 -
  552.      
  553.      é«-óΓ«αδσ, óßÑ «íαáΘÑ¡¿∩ ¬ φ½Ñ¼Ñ¡Γá¼ ¼áßß¿óá KEYTAB «ßπ-
  554.  ΘÑßΓó½∩εΓß∩ τÑαѺ π¬áºáΓѽ¿. ¥Γ« ó½ÑτÑΓ ºá ß«í«⌐ «ñ¡« ßπΘÑß-
  555.  ΓóÑ¡¡«Ñ ¿º¼Ñ¡Ñ¡¿Ñ ó Σπ¡¬µ¿¿ BINARY: ßαÑñ¡¿⌐ φ½Ñ¼Ñ¡Γ í«½∞ΦÑ
  556.  ¡Ñ½∞º∩ óδτ¿ß½∩Γ∞ »α«ßΓ« »« Σ«α¼π½Ñ
  557.  
  558.    MID = (LOW + HIGH) / 2
  559.  
  560.  »«Γ«¼π τΓ« ß½«ªÑ¡¿Ñ ñóπσ π¬áºáΓѽÑ⌐ ¡Ñ ñáÑΓ ¬á¬«ú«-¡¿íπñ∞
  561.  »«½Ñº¡«ú« αѺπ½∞ΓáΓá (ñáªÑ »«ß½Ñ ñѽѡ¿∩ ¡á 2) ¿ ó ñÑ⌐ßΓó¿-
  562.  Γѽ∞¡«ßΓ¿ ∩ó½∩ÑΓß∩ ¡Ñºá¬«¡¡δ¼. φΓπ Σ«α¼π½π ¡áñ« ºá¼Ñ¡¿Γ∞ ¡á
  563.  
  564.    MID = LOW + (HIGH-LOW) / 2
  565.  
  566.  ó αѺπ½∞ΓáΓÑ ¬«Γ«α«⌐ MID ßΓá¡«ó¿Γß∩ π¬áºáΓѽѼ ¡á φ½Ñ¼Ñ¡Γ,
  567.  αáß»«½«ªÑ¡¡δ⌐ »«ßÑαÑñ¿¡Ñ ¼Ñªñπ LOW ¿ HIGH.
  568.      éá¼ ΓᬪѠ߽ÑñπÑΓ αẫíαáΓ∞ß∩ ó ¿¡¿µ¿á½¿ºáµ¿¿ LOW ¿
  569.  HIGH. π¬áºáΓѽ∞ ¼«ª¡« ¿¡¿µ¿á½¿º¿α«óáΓ∞ áñαÑß«¼ αá¡ÑÑ «»αÑñÑ-
  570.  ½Ñ¡¡«ú« «íΩѬΓá; ¿¼Ñ¡¡« ¬á¬ ¼δ ºñÑß∞ ¿ »«ßΓπ»¿½¿.
  571.      é Σπ¡¬µ¿¿ MAIN ¼δ ¡á»¿ß὿
  572.  
  573.    FOR (P=KEYTAB; P < KEYTAB + NKEYS; P++)
  574.  
  575.  àß½¿ P ∩ó½∩ÑΓß∩ π¬áºáΓѽѼ ßΓαπ¬Γπαδ, Γ« ½εíá∩ áα¿Σ¼ÑΓ¿¬á ß
  576.  P πτ¿ΓδóáÑΓ Σá¬Γ¿τÑ߬¿⌐ αẼÑα ñá¡¡«⌐ ßΓαπ¬Γπαδ, ΓᬠτΓ« P++
  577.  πóѽ¿τ¿óáÑΓ P ¡á ¡πª¡πε óѽ¿τ¿¡π, ó αѺπ½∞ΓáΓÑ τÑú« P π¬áºδ-
  578.  óáÑΓ ¡á ß½ÑñπεΘ¿⌐ φ½Ñ¼Ñ¡Γ ¼áßß¿óá ßΓαπ¬Γπα. ì« ¡Ñ ßτ¿Γá⌐ΓÑ,
  579.  τΓ« αẼÑα ßΓαπ¬Γπαδ αáóÑ¡ ßπ¼¼Ñ αẼÑα«ó ÑÑ τ½Ñ¡«ó, - ¿º-ºá
  580.  ΓαÑí«óá¡¿⌐ óδαáó¡¿óá¡¿∩ ñ½∩ αẽ¿τ¡δσ «íΩÑ¬Γ«ó ó ßΓαπ¬ΓπαÑ
  581.  ¼«úπΓ ó«º¡¿¬áΓ∞ "ñδαδ".
  582.      ê, ¡á¬«¡Ñµ, ¡Ñ߬«½∞¬« óΓ«α«ßΓѻѡ¡δ⌐ ó«»α«ß « Σ«α¼Ñ ºá-
  583.  »¿ß¿ »α«úαá¼¼δ. àß½¿ ó«ºóαáΘáѼá∩ Σπ¡¬µ¿Ñ⌐ óѽ¿τ¿¡á ¿¼ÑÑΓ
  584.  Γ¿», ¬á¬, ¡á»α¿¼Ñα, ó
  585.  
  586.       STRUCT KEY *BINARY(WORD, TAB, N)
  587.  
  588.  T« ¼«ªÑΓ «¬áºáΓ∞ß∩, τΓ« ¿¼∩ Σπ¡¬µ¿¿ Γαπñ¡« óδñѽ¿Γ∞ ßαÑñ¿
  589.  ΓѬßΓá. é ßó∩º¿ ß φΓ¿¼ ¿¡«úñá ¿ß»«½∞ºπÑΓß∩ ñαπú«⌐ ßΓ¿½∞ ºá-
  590.  »¿ß¿:
  591.  
  592.            STRUCT KEY *
  593.        BINARY(WORD, TAB, N)
  594.  
  595.  ¥Γ« ú½áó¡δ¼ «íαẫ¼ ñѽ« ó¬πßá; óδíÑα¿ΓÑ Γπ Σ«α¼π, ¬«Γ«αá∩
  596.  óá¼ ¡αáó¿Γß∩, ¿ »α¿ñÑনóá⌐ΓÑß∞ ÑÑ.
  597.  
  598.      6.5. æΓαπ¬Γπαδ, ßßδ½áεΘ¿Ñß∩ ¡á ßÑí∩.
  599.      ÅαÑñ»«½«ª¿¼, τΓ« ¡á¼ ¡áñ« ß»αáó¿Γ∞ß∩ ß í«½ÑÑ «íΘÑ⌐ ºáñá-
  600.  τÑ⌐, ß«ßΓ«∩ΘÑ⌐ ó »«ñßτÑΓÑ τ¿ß½á »«∩ó½Ñ¡¿⌐ óßÑσ ß½«ó ó ¡Ñ¬«-
  601.  Γ«α«¼ Σá⌐½Ñ óó«ñá. Æá¬ ¬á¬ ß»¿ß«¬ ß½«ó ºáαá¡ÑÑ ¡Ñ ¿ºóÑßΓÑ¡,
  602.  ¼δ ¡Ñ ¼«ªÑ¼ ¿σ π»«α∩ñ«τ¿Γ∞ πñ«í¡δ¼ «íαẫ¼ ¿ ¿ß»«½∞º«óáΓ∞
  603.  í¿¡áα¡δ⌐ »«¿ß¬. îδ ñáªÑ ¡Ñ ¼«ªÑ¼ «ßπΘÑßΓó½∩Γ∞ »«ß½Ññ«óáΓѽ∞-
  604.  ¡δ⌐ »α«ß¼«Γα »α¿ »«ßΓπ»½Ñ¡¿¿ ¬áªñ«ú« ß½«óá, ß ΓѼ τΓ«íδ πß-
  605.  Γá¡«ó¿Γ∞, ¡Ñ óßΓαÑτὫß∞ ½¿ «¡« αá¡ÑÑ; Γá¬á∩ »α«úαá¼¼á íπñÑΓ
  606.  αáí«ΓáΓ∞ óÑτ¡«. (ü«½ÑÑ Γ«τ¡«, «ª¿ñáѼ«Ñ óαѼ∩ αáí«Γδ αáßΓÑΓ
  607.  ¬á¬ ¬óáñαáΓ τ¿ß½á óó«ñ¿¼δσ ß½«ó). èᬠªÑ ¡á¼ «αúá¡¿º«óáΓ∞
  608.  »α«úαá¼¼π, τΓ«íδ ß»αáó¿Γ∞ß∩ ß« ß»¿ß¬«¼ »α«¿ºó«½∞¡δσ ß½«ó?
  609.      
  610.                            - 139 -
  611.      
  612.      Äñ¡« ¿º αÑΦÑ¡¿⌐ ß«ßΓ«¿Γ ó Γ«¼, τΓ«íδ óßÑ óαѼ∩ σαá¡¿Γ∞
  613.  ¼áß߿󠻫ßΓπ»áεΘ¿σ ñ« ß¿σ »«α ß½«ó ó π»«α∩ñ«τÑ¡¡«¼ ó¿ñÑ, »«-
  614.  ¼ÑΘá∩ ¬áªñ«Ñ ß½«ó« ó ¡πª¡«Ñ ¼ÑßΓ« »« ¼ÑαÑ ¿σ »«ßΓπ»½Ñ¡¿∩.
  615.  Oä¡á¬« φΓ« ¡Ñ ß½ÑñπÑΓ ñѽáΓ∞, »ÑαѼÑΘá∩ ß½«óá ó ½¿¡Ñ⌐¡«¼
  616.  ¼áßß¿óÑ, - φΓ« ΓᬪѠ»«ΓαÑíπÑΓ ß½¿Φ¬«¼ ¼¡«ú« óαѼѡ¿. é¼ÑßΓ«
  617.  φΓ«ú« ¼δ ¿ß»«½∞ºπѼ ßΓαπ¬Γπαπ ñá¡¡δσ, ¡áºδóáѼπε ñ«¿τ¡δ¼ ñÑ-
  618.  αÑó«¼.
  619.      èáªñ«¼π ¡«ó«¼π ß½«óπ ß««ΓóÑΓßΓóπÑΓ «ñ¿¡ "πºÑ½" ñÑαÑóá;
  620.  ¬áªñδ⌐ πºÑ½ ß«ñÑনΓ:
  621.  π¬áºáΓѽ∞ ΓѬßΓá ß½«óá
  622.  ----------------------
  623.  ßτÑΓτ¿¬ τ¿ß½á »«∩ó½Ñ¡¿⌐
  624.  -----------------------
  625.  π¬áºáΓѽ∞ πº½á ½Ñó«ú« »«Γ«¼¬á
  626.  -----------------------------
  627.  π¬áºáΓѽ∞ πº½á »αáó«ú« »«Γ«¼¬á
  628.  ------------------------------
  629.  ì¿¬á¬«⌐ πºÑ½ ¡Ñ ¼«ªÑΓ ¿¼ÑΓ∞ í«½ÑÑ ñóπσ ñÑΓÑ⌐; ó«º¼«ª¡« «Γ-
  630.  ßπΓßó¿Ñ ñÑΓÑ⌐ ¿½¿ ¡á½¿τ¿Ñ Γ«½∞¬« «ñ¡«ú« »«Γ«¼¬á.
  631.      ôº½δ ß«ºñáεΓß∩ Γᬿ¼ «íαẫ¼, τΓ« ½Ñó«Ñ »«ññÑαÑó« ¬áªñ«-
  632.  ú« πº½á ß«ñÑαª¿Γ Γ«½∞¬« ΓÑ ß½«óá, ¬«Γ«αδÑ ¼Ñ¡∞ΦÑ ß½«óá ó
  633.  φΓ«¼ πº½Ñ, á »αáó«Ñ »«ññÑαÑó« Γ«½∞¬« ΓÑ ß½«óá, ¬«Γ«αδÑ í«½∞-
  634.  ΦÑ. ùΓ«íδ «»αÑñѽ¿Γ∞, ¡áσ«ñ¿Γß∩ ½¿ ¡«ó«Ñ ß½«ó« πªÑ ó ñÑαÑóÑ,
  635.  ¡áτ¿¡áεΓ ß ¬«α¡∩ ¿ ßαáó¡¿óáεΓ ¡«ó«Ñ ß½«ó« ß« ß½«ó«¼, σαá¡∩-
  636.  Θ¿¼ß∩ ó φΓ«¼ πº½Ñ. àß½¿ ß½«óá ß«ó»áñáεΓ, Γ« ó«»α«ß αÑΦáÑΓß∩
  637.  πΓóÑαñ¿Γѽ∞¡«. àß½¿ ¡«ó«Ñ ß½«ó« ¼Ñ¡∞ΦÑ ß½«óá ó ñÑαÑóÑ, Γ«
  638.  »ÑαÑσ«ñ∩Γ ¬ αáßß¼«ΓαÑ¡¿ε ½Ñó«ú« »«Γ«¼¬á; ó »α«Γ¿ó¡«¼ ß½πτáÑ
  639.  ¿ßß½ÑñπÑΓß∩ »αáóδ⌐ »«Γ«¼«¬. àß½¿ ó ¡πª¡«¼ ¡á»αáó½Ñ¡¿¿ »«Γ«-
  640.  ¼«¬ «ΓßπΓßΓóπÑΓ, Γ« º¡áτ¿Γ ¡«ó«Ñ ß½«ó« ¡Ñ ¡áσ«ñ¿Γß∩ ó ñÑαÑóÑ
  641.  ¿ ¼ÑßΓ« φΓ«ú« ¡Ññ«ßΓáεΘÑú« »«Γ«¼¬á ¬á¬ αẠ¿ ∩ó½∩ÑΓß∩ ¼Ñß-
  642.  Γ«¼, ¬πñá ß½ÑñπÑΓ »«¼ÑßΓ¿Γ∞ ¡«ó«Ñ ß½«ó«. Å«ß¬«½∞¬π »«¿ß¬ ¿º
  643.  ½εí«ú« πº½á »α¿ó«ñ¿Γ ¬ »«¿ß¬π «ñ¡«ú« ¿º Ñú« »«Γ«¼¬«ó, Γ« ßá¼
  644.  »α«µÑßß »«¿ß¬á »« ßπΘÑßΓóπ ∩ó½∩ÑΓß∩ αѬπαß¿ó¡δ¼. é ß««ΓóÑΓß-
  645.  Γó¿¿ ß φΓ¿¼ ¡á¿í«½ÑÑ ÑßΓÑßΓóÑ¡¡« ¿ß»«½∞º«óáΓ∞ αѬπαß¿ó¡δÑ
  646.  »α«µÑñπαδ óó«ñá ¿ óδó«ñá.
  647.      é«ºóαáΘá∩ß∞ ¡áºáñ ¬ «»¿ßá¡¿ε πº½á, ∩ß¡«, τΓ« φΓ« íπñÑΓ
  648.  ßΓαπ¬Γπαá ß τÑΓδα∞¼∩ ¬«¼»«¡Ñ¡ΓἿ:
  649.  
  650.  STRUCT TNODE \( /* THE BASIC NODE */
  651.     CHAR *WORD; /* POINTS TO THE TEXT */
  652.     INT   COUNT; /* NUMBER OF OCCURRENCES */
  653.     STRUCT TNODE *LEFT; /* LEFT CHILD */
  654.     STRUCT TNODE *RIGHT; /* RIGHT CHILD */
  655.  \);
  656.  
  657.  ¥Γ« "αѬπαß¿ó¡«Ñ" «»¿ßá¡¿Ñ πº½á ¼«ªÑΓ »«¬áºáΓ∞ß∩ α¿ß¬«óá¡-
  658.  ¡δ¼, ¡« ¡á ßἫ¼ ñѽѠ«¡« ó»«½¡Ñ ¬«ααÑ¬Γ¡«. æΓαπ¬Γπαá ¡Ñ
  659.  ¿¼ÑÑΓ »αáóá ß«ñÑαªáΓ∞ ßß佬π ¡á ßá¼π ßÑí∩, ¡«
  660.  
  661.  STRUCT TNODE *LEFT;
  662.  
  663.  «»¿ßδóáÑΓ LEFT ¬á¬ π¬áºáΓѽ∞ ¡á πºÑ½, á ¡Ñ ¬á¬ ßá¼ πºÑ½.
  664.             
  665.                            - 140 -
  666.      
  667.      ÆÑ¬ßΓ ßἫ⌐ »α«úαá¼¼δ «¬áºδóáÑΓß∩ πñ¿ó¿Γѽ∞¡« ¼á½Ñ¡∞¬¿¼,
  668.  Ñß½¿, ¬«¡Ñτ¡«, ¿¼ÑΓ∞ ó αáß»«α∩ªÑ¡¿¿ ¡áí«α ¡á»¿ßá¡¡δσ ¡á¼¿
  669.  αá¡ÑÑ »α«µÑñπα, «íÑß»Ñτ¿óáεΘ¿σ ¡πª¡δÑ ñÑ⌐ßΓó¿∩. îδ ¿¼ÑѼ ó
  670.  ó¿ñπ Σπ¡¬µ¿ε GETWORD ñ½∩ ¿ºó½ÑτÑ¡¿∩ ¬áªñ«ú« ß½«óá ¿º Σá⌐½á
  671.  óó«ñá ¿ Σπ¡¬µ¿ε ALLOC ñ½∩ óδñѽѡ¿∩ ¼ÑßΓá ñ½∩ σαá¡Ñ¡¿∩ ß½«ó.
  672.      éÑñπΘá∩ »α«úαἼᠻα«ßΓ« ßτ¿ΓδóáÑΓ ß½«óá ß »«¼«Θ∞ε Σπ¡¬-
  673.  µ¿¿ GETWORD ¿ »«¼ÑΘáÑΓ ¿σ ó ñÑαÑó«, ¿ß»«½∞ºπ∩ Σπ¡¬µ¿ε TREE.
  674.  
  675.  #DEFINE   MAXWORD   20
  676.  MAIN()    /* WORD FREGUENCY COUNT */
  677.  \(
  678.      STRUCT TNODE *ROOT, *TREE();
  679.      CHAR WORD[MAXWORD];
  680.      INT   T;
  681.      ROOT = NULL;
  682.      WHILE ((T = GETWORD(WORD, MAXWORD)) \! = EOF)
  683.         IF (T == LETTER)
  684.              ROOT = TREE(ROOT, WORD);
  685.      TREEPRINT(ROOT);
  686.  \)
  687.  
  688.      öπ¡¬µ¿∩ TREE ßá¼á »« ßÑíÑ »α«ßΓá. æ½«ó« »ÑαÑñáÑΓß∩ Σπ¡¬-
  689.  µ¿Ñ⌐ MAIN ¬ óÑασ¡Ñ¼π πα«ó¡ε (¬«α¡ε) ñÑαÑóá. ìá ¬áªñ«¼ φΓá»Ñ
  690.  φΓ« ß½«ó« ßαáó¡¿óáÑΓß∩ ß« ß½«ó«¼, πªÑ σαá¡∩Θ¿¼ß∩ ó φΓ«¼ πº-
  691.  ½Ñ, ¿ ß »«¼«Θ∞ε αѬπαß¿ó¡«ú« «íαáΘÑ¡¿∩ ¬ TREE »α«ßáτ¿óáÑΓß∩
  692.  ó¡¿º ½¿í« ¬ ½Ñó«¼π, ½¿í« ¬ »αáó«¼π »«ññÑαÑóπ. é ¬«¡µÑ ¬«¡µ«ó
  693.  φΓ« ß½«ó« ½¿í« ß«ó»áñáÑΓ ß ¬á¬¿¼-Γ« ß½«ó«¼, πªÑ ¡áσ«ñ∩Θ¿¼ß∩
  694.  ó ñÑαÑóÑ (ó φΓ«¼ ß½πτáÑ ßτÑΓτ¿¬ πóѽ¿τ¿óáÑΓß∩ ¡á Ññ¿¡¿µπ),
  695.  ½¿í« »α«úαἼᠡáΓ«½¬¡ÑΓß∩ ¡á ¡π½Ñó«⌐ π¬áºáΓѽ∞, ßó¿ñÑΓѽ∞-
  696.  ßΓóπεΘ¿⌐ « ¡Ñ«íσ«ñ¿¼«ßΓ¿ ß«ºñá¡¿∩ ¿ ñ«íáó½Ñ¡¿∩ ¬ ñÑαÑóπ ¡«-
  697.  ó«ú« πº½á. é ß½πτáÑ ß«ºñá¡¿∩ ¡«ó«ú« πº½á Σπ¡¬µ¿∩ TREE ó«ºó-
  698.  αáΘáÑΓ π¬áºáΓѽ∞ φΓ«ú« πº½á, ¬«Γ«αδ⌐ »«¼ÑΘáÑΓß∩ ó α«ñ¿Γѽ∞-
  699.  ß¬¿⌐ πºÑ½.
  700.  
  701.   STRUCT TNODE *TREE(P, W)
  702.          /* INSTALL W AT OR BELOW P */
  703.   STRUCT TNODE *P;
  704.   CHAR *W;
  705.   \(
  706.      STRUCT TNODE *TALLOC();
  707.      CHAR *STRSAVE();
  708.      INT COND;
  709.      IF (P == NULL) \( /* A NEW WORD
  710.         HAS ARRIVED */
  711.           P == TALLOC(); /* MAKE A NEW NODE */
  712.           P->WORD = STRSAVE(W);
  713.           P->COUNT = 1;
  714.           P->LEFT = P->RIGHT = NULL;
  715.   \) ELSE IF ((COND = STRCMP(W, P->WORD)) == 0)
  716.           P->COUNT++;     /* REPEATED WORD */
  717.       ELSE IF (COND < 0)/* LOWER GOES INTO LEFT SUBTREE */
  718.           P->LEFT = TREE(P->LEFT, W);
  719.   ELSE            /* GREATER INTO RIGHT SUBTREE */
  720.           P->RIGHT = TREE(P->RIGHT, W);
  721.   RETURN(P);
  722.   \)        
  723.                            - 141 -
  724.  
  725.      Åá¼∩Γ∞ ñ½∩ ¡«ó«ú« πº½á óδñѽ∩ÑΓß∩ Σπ¡¬µ¿Ñ⌐ TALLOC, ∩ó½∩-
  726.  εΘÑ⌐ß∩ áñá»ΓᵿÑ⌐ ñ½∩ ñá¡¡«ú« ß½πτá∩ Σπ¡¬µ¿¿ ALLOC, ¡á»¿ßá¡-
  727.  ¡«⌐ ¡á¼¿ αá¡ÑÑ. Ä¡á ó«ºóαáΘáÑΓ π¬áºáΓѽ∞ ßó«í«ñ¡«ú« »α«ßΓ-
  728.  αá¡ßΓóá, »α¿ú«ñ¡«ú« ñ½∩ σαá¡Ñ¡¿∩ ¡«ó«ú« πº½á ñÑαÑóá. (îδ
  729.  ó߬«αÑ «íßπñ¿¼ φΓ« »«ñα«í¡ÑÑ). ì«ó«Ñ ß½«ó« ¬«»¿απÑΓß∩ Σπ¡¬-
  730.  µ¿Ñ⌐ STRSAVE ó ß¬αδΓ«Ñ ¼ÑßΓ«, ßτÑΓτ¿¬ ¿¡¿µ¿á½¿º¿απÑΓß∩ Ññ¿-
  731.  ¡¿µÑ⌐, ¿ π¬áºáΓѽ¿ «í«¿σ »«Γ«¼¬«ó »«½áúáεΓß∩ αáó¡δ¼¿ ¡π½ε.
  732.  ¥Γá τáßΓ∞ »α«úαá¼¼δ óδ»«½¡∩ÑΓß∩ Γ«½∞¬« »α¿ ñ«íáó½Ñ¡¿¿ ¡«ó«ú«
  733.  πº½á ¬ αÑíαπ ñÑαÑóá. îδ ºñÑß∞ «»πßΓ¿½¿ »α«óÑα¬π ¡á «Φ¿í¬¿
  734.  ó«ºóαáΘáѼδσ Σπ¡¬µ¿⌐ STRSAVE ¿ TALLOC º¡áτÑ¡¿⌐ (τΓ« ¡Ñαáºπ¼-
  735.  ¡« ñ½∩ »αá¬Γ¿τÑ߬¿ αáí«ΓáεΘÑ⌐ »α«úαá¼¼δ).
  736.      öπ¡¬µ¿∩ TREEPRINT »ÑτáΓáÑΓ ñÑαÑó«, ¡áτ¿¡á∩ ß ½Ñó«ú« »«ñ-
  737.  ñÑαÑóá; ó ¬áªñ«¼ πº½Ñ ß¡áτá½á »ÑτáΓáÑΓß∩ ½Ñó«Ñ »«ññÑαÑó«
  738.  (óßÑ ß½«óá, ¬«Γ«αδÑ ¼½áñΦÑ φΓ«ú« ß½«óá), ºáΓѼ ßἫ ß½«ó«, á
  739.  ºáΓѼ »αáó«Ñ »«ññÑαÑó« (óßÑ ß½«óá, ¬«Γ«αδÑ ßΓáαΦÑ). àß½¿ óδ
  740.  ¡ÑπóÑαÑ¡¡« «»Ñα¿απÑΓÑ ß αѬπαß¿Ñ⌐, ¡áα¿ßπ⌐ΓÑ ñÑαÑó« ßἿ ¿
  741.  ¡á»ÑτáΓá⌐ΓÑ Ñú« ß »«¼«Θ∞ε Σπ¡¬µ¿¿ TREEPRINT ; φΓ« «ñ¡á ¿º
  742.  ¡á¿í«½ÑÑ ∩ß¡δσ αѬπαß¿ó¡δσ »α«µÑñπα, ¬«Γ«απε ¼«ª¡« ¡á⌐Γ¿.
  743.  
  744.   TREEPRINT (P) /* PRINT TREE  P  RECURSIVELY */
  745.   STRUCT TNODE *P;
  746.   \(
  747.      IF (P != NULL)    \(
  748.         TREEPRINT (P->LEFT);
  749.         PRINTF("%4D %S\N", P->COUNT, P->WORD);
  750.         TREEPRINT (P->RIGHT);
  751.      \)
  752.  \)
  753.  
  754.      Åαá¬Γ¿τÑ߬«Ñ ºá¼Ñτá¡¿Ñ: Ñß½¿ ñÑαÑó« ßΓá¡«ó¿Γß∩ "¡Ñßíá-
  755.  ½á¡ß¿α«óá¡¡δ¼" ¿º-ºá Γ«ú«, τΓ« ß½«óá »«ßΓπ»áεΓ ¡Ñ ó ß½πτá⌐-
  756.  ¡«¼ »«α∩ñ¬Ñ, Γ« óαѼ∩ αáí«Γδ »α«úαá¼¼δ ¼«ªÑΓ αáßΓ¿ ß½¿Φ¬«¼
  757.  íδßΓα«. é σπñΦѼ ß½πτáÑ, ¬«úñá »«ßΓπ»áεΘ¿Ñ ß½«óá πªÑ π»«α∩-
  758.  ñ«τÑ¡δ, ¡áßΓ«∩Θá∩ »α«úαἼᠫßπΘÑßΓó½∩ÑΓ ñ«α«ú«ßΓ«∩Θπε ¿¼¿-
  759.  Γáµ¿ε ½¿¡Ñ⌐¡«ú« »«¿ß¬á. æπΘÑßΓóπεΓ αẽ¿τ¡δÑ «í«íΘÑ¡¿∩ ñó«-
  760.  ¿τ¡«ú« ñÑαÑóá, «ß«íÑ¡¡« 2-3 ñÑαÑó∞∩ ¿ AVL ñÑαÑó∞∩, ¬«Γ«αδÑ
  761.  ¡Ñ óÑñπΓ ßÑí∩ Γᬠ"ó σπñΦ¿σ ß½πτá∩σ", ¡« ¼δ ¡Ñ íπñѼ ºñÑß∞
  762.  ¡á ¡¿σ «ßΓá¡áó½¿óáΓ∞ß∩.
  763.      ÅαѪñÑ τѼ αáßßΓáΓ∞ß∩ ß φΓ¿¼ »α¿¼Ñα«¼, π¼ÑßΓ¡« ßñѽáΓ∞
  764.  ¡Ñí«½∞Φ«Ñ «ΓßΓπ»½Ñ¡¿Ñ ó ßó∩º¿ ß ó«»α«ß«¼ « αáß»αÑñѽѡ¿¿ »á-
  765.  ¼∩Γ¿. ƒß¡«, τΓ« ó »α«úαἼѠªÑ½áΓѽ∞¡« ¿¼ÑΓ∞ Γ«½∞¬« «ñ¿¡
  766.  αáß»αÑñѽ¿Γѽ∞ »á¼∩Γ¿, ñáªÑ Ñß½¿ Ñ¼π »α¿σ«ñ¿Γß∩ αẼÑΘáΓ∞
  767.  αẽ¿τ¡δÑ ó¿ñδ «íΩÑ¬Γ«ó. ì« Ñß½¿ ¼δ σ«Γ¿¼ ¿ß»«½∞º«óáΓ∞ «ñ¿¡
  768.  αáß»αÑñѽ¿Γѽ∞ »á¼∩Γ¿ ñ½∩ «íαáí«Γ¬¿ ºá»α«ß«ó ¡á óδñѽѡ¿Ñ
  769.  »á¼∩Γ¿ ñ½∩ π¬áºáΓѽÑ⌐ ¡á »ÑαѼѡ¡δÑ Γ¿»á CHAR ¿ ñ½∩ π¬áºáΓÑ-
  770.  ½Ñ⌐ ¡á STRUCT TNODE, Γ« »α¿ φΓ«¼ ó«º¡¿¬áεΓ ñóá ó«»α«ßá. ÅÑα-
  771.  óδ⌐: ¬á¬ óδ»«½¡¿Γ∞ Γ« ßπΘÑßΓóπεΘÑÑ ¡á í«½∞Φ¿¡ßΓóÑ αÑá½∞¡δσ
  772.  ¼áΦ¿¡ «úαá¡¿τÑ¡¿Ñ, τΓ« «íΩѬΓδ «»αÑñѽѡ¡δσ Γ¿»«ó ñ«½ª¡δ
  773.  πñ«ó½ÑΓó«α∩Γ∞ ΓαÑí«óá¡¿∩¼ óδαáó¡¿óá¡¿∩ (¡á»α¿¼Ñα, τáßΓ« µÑ-
  774.  ½δÑ ñ«½ª¡δ αẼÑΘáΓ∞ß∩ ó τÑΓ¡δσ áñαÑßáσ)? éΓ«α«⌐: ¬á¬ «αúá-
  775.  ¡¿º«óáΓ∞ «»¿ßá¡¿∩, τΓ«íδ ß»αáó¿Γ∞ß∩ ß ΓѼ, τΓ« Σπ¡¬µ¿∩ ALLOC
  776.  ñ«½ª¡á ó«ºóαáΘáΓ∞ αẽ¿τ¡δÑ ó¿ñδ π¬áºáΓѽÑ⌐ ?
  777.      
  778.                            - 142 -
  779.      
  780.      
  781.      é««íΘÑ ú«ó«α∩, ΓαÑí«óá¡¿∩ óδαáó¡¿óá¡¿∩ ½Ñú¬« óδ»«½¡¿Γ∞
  782.  ºá ßτÑΓ óδñѽѡ¿∩ ¡Ñ¬«Γ«α«ú« ½¿Φ¡Ñú« »α«ßΓαá¡ßΓóá, »α«ßΓ«
  783.  «íÑß»Ñτ¿ó Γ«, τΓ«íδ αáß»αÑñѽ¿Γѽ∞ »á¼∩Γ¿ óßÑúñá ó«ºóαáΘá½
  784.  π¬áºáΓѽ∞, πñ«ó½ÑΓó«α∩εΘ¿⌐ óßѼ «úαá¡¿τÑ¡¿∩¼ óδαáó¡¿óá¡¿∩.
  785.  ìá»α¿¼Ñα, ¡á PDP-11 ñ«ßΓáΓ«τ¡«, τΓ«íδ Σπ¡¬µ¿∩ ALLOC óßÑúñá
  786.  ó«ºóαáΘá½á τÑΓ¡δ⌐ π¬áºáΓѽ∞, »«ß¬«½∞¬π ó τÑΓ¡δ⌐ áñαÑß ¼«ª¡«
  787.  »«¼ÑßΓ¿Γ∞ ½εí«⌐ Γ¿» «íΩѬΓá. Ññ¿¡ßΓóÑ¡¡δ⌐ αáßσ«ñ »α¿ φΓ«¼ -
  788.  ½¿Φ¡¿⌐ ß¿¼ó«½ »α¿ ºá»α«ßÑ ¡á ¡ÑτÑΓ¡πε ñ½¿¡π. Ç¡á½«ú¿τ¡δÑ
  789.  ñÑ⌐ßΓó¿∩ »αÑñ»α¿¡¿¼áεΓß∩ ¡á ñαπú¿σ ¼áΦ¿¡áσ. Æá¬¿¼ «íαẫ¼,
  790.  αÑ὿ºáµ¿∩ ALLOC ¼«ªÑΓ ¡Ñ «¬áºáΓ∞ß∩ »ÑαÑ¡«ß¿¼«⌐, ¡« ÑÑ ¿ß-
  791.  »«½∞º«óá¡¿Ñ íπñÑΓ »ÑαÑ¡«ß¿¼δ¼. öπ¡¬µ¿∩ ALLOC ¿º ú½áóδ 5 ¡Ñ
  792.  »αÑñπß¼áΓα¿óáÑΓ ¡¿¬á¬«ú« «»αÑñѽѡ¡«ú« óδαáó¡¿óá¡¿∩; ó ú½áóÑ
  793.  8 ¼δ »α«ñѼ«¡ßΓα¿απѼ, ¬á¬ »αáó¿½∞¡« óδ»«½¡¿Γ∞ φΓπ ºáñáτπ.
  794.      é«»α«ß «»¿ßá¡¿∩ Γ¿»á Σπ¡¬µ¿¿ ALLOC ∩ó½∩ÑΓß∩ ¼πτ¿Γѽ∞¡δ¼
  795.  ñ½∩ ½εí«ú« ∩ºδ¬á, ¬«Γ«αδ⌐ ßÑα∞Ѻ¡« «Γ¡«ß¿Γß∩ ¬ »α«óÑα¬Ñ Γ¿-
  796.  »«ó. ïπτΦ¿⌐ ß»«ß«í ó ∩ºδ¬Ñ "C" - «íΩ∩ó¿Γ∞, τΓ« ALLOC ó«ºóαá-
  797.  ΘáÑΓ π¬áºáΓѽ∞ ¡á »ÑαѼѡ¡πε Γ¿»á CHAR, á ºáΓѼ ∩ó¡« »αÑ«í-
  798.  αẫóáΓ∞ φëàπ¬áºáΓѽ∞ ¬ ªÑ½áѼ«¼π Γ¿»π ß »«¼«Θ∞ε «»Ñαᵿ¿
  799.  »ÑαÑó«ñá Γ¿»«ó. Æá¬¿¼ «íαẫ¼, Ñß½¿ «»¿ßáΓ∞ P ó ó¿ñÑ
  800.  
  801.      CHAR *P;
  802.  Γ«
  803.      (STRUCT TNODE *) P
  804.  
  805.  »αÑ«íαáºπÑΓ Ñú« ó óδαáªÑ¡¿∩σ ó π¬áºáΓѽ∞ ¡á ßΓαπ¬Γπαπ Γ¿»á
  806.  TNODE . æ½Ññ«óáΓѽ∞¡«, Σπ¡¬µ¿ε TALLOC ¼«ª¡« ºá»¿ßáΓ∞ ó ó¿ñÑ:
  807.  
  808.  STRUCT TNODE *TALLOC()
  809.  \(
  810.     CHAR *ALLOC();
  811.  
  812.     RETURN ((STRUCT TNODE *) ALLOC(SIZEOF(STRUCT TNODE)));
  813.  \)
  814.  
  815.  
  816.  φΓ« í«½ÑÑ τѼ ñ«ßΓáΓ«τ¡« ñ½∩ αáí«ΓáεΘ¿σ ó ¡áßΓ«∩ΘÑÑ óαѼ∩
  817.  ¬«¼»¿½∩Γ«α«ó, ¡« φΓ« ¿ ßá¼δ⌐ íѺ«»áß¡δ⌐ »πΓ∞ ß πτÑΓ«¼ íπñπε-
  818.  ΘÑú«.
  819.      ô»α᪡ѡ¿Ñ 6-4.
  820.      ----------------
  821.      ìá»¿Φ¿ΓÑ »α«úαá¼¼π, ¬«Γ«αá∩ τ¿ΓáÑΓ "C"-»α«úαá¼¼π ¿ »Ñτá-
  822.  ΓáÑΓ ó á½Σáó¿Γ¡«¼ »«α∩ñ¬Ñ ¬áªñπε úαπ»»π ¿¼Ñ¡ »ÑαѼѡ¡δσ, ¬«-
  823.  Γ«αδÑ ß«ó»áñáεΓ ó »Ñαóδσ ßѼ¿ ß¿¼ó«½áσ, ¡« «Γ½¿τáεΓß∩ úñÑ-Γ«
  824.  ñá½∞ΦÑ. (æñѽá⌐ΓÑ Γá¬, τΓ«íδ 7 í佫 »áαá¼ÑΓα«¼).
  825.      ô»α᪡ѡ¿Ñ 6-5.
  826.      ----------------
  827.      ìá»¿Φ¿ΓÑ »α«úαá¼¼π óδñáτ¿ »ÑαѬαÑßΓ¡δσ ßß佫¬, Γ.Ñ.
  828.  Åα«úαá¼¼π, ¬«Γ«αá∩ »ÑτáΓáÑΓ ß»¿ß«¬ óßÑσ ß½«ó ñ«¬π¼Ñ¡Γá ¿ ñ½∩
  829.  ¬áªñ«ú« ¿º φΓ¿σ ß½«ó »ÑτáΓáÑΓ ß»¿ß«¬ ¡«¼Ñα«ó ßΓ᫬, ó ¬«Γ«-
  830.  αδÑ φΓ« ß½«ó« óσ«ñ¿Γ.
  831.      ô»α᪡ѡ¿Ñ 6-6.
  832.      ----------------
  833.      ìá»¿Φ¿ΓÑ »α«úαá¼¼π, ¬«Γ«αá∩ »ÑτáΓáÑΓ ß½«óá ¿º ßó«Ñú«
  834.  Σá⌐½á óó«ñá, αáß»«½«ªÑ¡¡δÑ ó »«α∩ñ¬Ñ πíδóá¡¿∩ τáßΓ«Γδ ¿σ »«-
  835.  ∩ó½Ñ¡¿∩. ÅÑαÑñ ¬áªñδ¼ ß½«ó«¼ ¡á»ÑτáΓá⌐ΓÑ τ¿ß½« Ñú« »«∩ó½Ñ-
  836.  ¡¿⌐.       
  837.                            - 143 -
  838.      
  839.       6.6. Å«¿ß¬ ó Γáí½¿µÑ.
  840.      ä½∩ ¿½½εßΓαᵿ¿ ñá½∞¡Ñ⌐Φ¿σ áß»Ñ¬Γ«ó ¿ß»«½∞º«óá¡¿∩ ßΓαπ¬-
  841.  Γπα ó φΓ«¼ αáºñѽѠ¼δ ¡á»¿ΦѼ »α«úαá¼¼π, »αÑñßΓáó½∩εΘπε ß«-
  842.  í«⌐ ß«ñÑন¼«Ñ »á¬ÑΓá »«¿ß¬á ó Γáí½¿µÑ. ¥Γá »α«úαá¼¼á ∩ó½∩-
  843.  ÑΓß∩ Γ¿»¿τ¡δ¼ »αÑñßΓáó¿ΓѽѼ »«ñ»α«úαá¼¼ π»αáó½Ñ¡¿∩ ß¿¼ó«½∞-
  844.  ¡δ¼¿ Γáí½¿µá¼¿ ¼á¬α«»α«µÑßß«αá ¿½¿ ¬«¼»¿½∩Γ«αá. Éáßß¼«Γα¿¼,
  845.  ¡á»α¿¼Ñα, «»ÑαáΓ«α #DEFINE ∩ºδ¬á "C". è«úñá óßΓαÑτáÑΓß∩
  846.  ßΓ᫬á ó¿ñá
  847.  
  848.  #DEFINE YES    1
  849.  
  850.  Γ« ¿¼∩ YES ¿ ºá¼Ñ¡∩εΘ¿⌐ ΓѬßΓ 1 »«¼ÑΘáεΓß∩ ó Γáí½¿µπ. Å«ºñ-
  851.  ¡ÑÑ, ¬«úñá ¿¼∩ YES »«∩ó½∩ÑΓß∩ ó «»ÑαáΓ«αÑ ó¿ñá
  852.  
  853.  INWORD = YES;
  854.  
  855.  O¡« ñ«½ª¡« íδΓ∞ ºá¼ÑΘÑ¡« ¡á 1.
  856.      ê¼ÑεΓß∩ ñóÑ «ß¡«ó¡δÑ »α«µÑñπαδ, ¬«Γ«αδÑ π»αáó½∩εΓ ¿¼Ñ¡á-
  857.  ¼¿ ¿ ºá¼Ñ¡∩εΘ¿¼¿ ¿σ ΓѬßΓἿ. öπ¡¬µ¿∩ INSTALL(S,T) ºá»¿ßδóá-
  858.  ÑΓ ¿¼∩ S ¿ ºá¼Ñ¡∩εΘ¿⌐ ΓѬßΓ T ó Γáí½¿µπ; ºñÑß∞ S ¿ T »α«ßΓ«
  859.  ß¿¼ó«½∞¡δÑ ßΓ᫬¿. öπ¡¬µ¿∩ LOOKUP(S) ¿ΘÑΓ ¿¼∩ S ó Γáí½¿µÑ ¿
  860.  ó«ºóαáΘáÑΓ ½¿í« π¬áºáΓѽ∞ Γ«ú« ¼ÑßΓá, úñÑ φΓ« ¿¼∩ ¡á⌐ñÑ¡«,
  861.  ½¿í« NULL, Ñß½¿ φΓ«ú« ¿¼Ñ¡¿ ó Γáí½¿µÑ ¡Ñ «¬áºá½«ß∞.
  862.      Åα¿ φΓ«¼ ¿ß»«½∞ºπÑΓß∩ »«¿ß¬ »« á½ú«α¿Γ¼π σÑΦ¿α«óá¡¿∩ -
  863.  »«ßΓπ»áεΘÑÑ ¿¼∩ »αÑ«íαáºπÑΓß∩ ó ¼á½Ñ¡∞¬«Ñ »«½«ª¿Γѽ∞¡«Ñ τ¿ß-
  864.  ½«, ¬«Γ«α«Ñ ºáΓѼ ¿ß»«½∞ºπÑΓß∩ ñ½∩ ¿¡ñѬßᵿ¿ ¼áßß¿óá π¬áºá-
  865.  ΓѽÑ⌐. ¥½Ñ¼Ñ¡Γ ¼áßß¿óá π¬áºδóáÑΓ ¡á ¡áτὫ µÑ»«τ¡δσ í½«¬«ó,
  866.  «»¿ßδóáεΘ¿σ ¿¼Ñ¡á, ¬«Γ«αδÑ ¿¼ÑεΓ φΓ« º¡áτÑ¡¿Ñ σÑΦ¿α«óá¡¿∩.
  867.  àß½¿ ¡¿¬á¬¿Ñ ¿¼Ñ¡á »α¿ σÑΦ¿α«óá¡¿¿ ¡Ñ »«½πτáεΓ φΓ«ú« º¡áτÑ-
  868.  ¡¿∩, Γ« φ½Ñ¼Ñ¡Γ«¼ ¼áßß¿óá íπñÑΓ NULL.
  869.      ü½«¬«¼ µÑ»¿ ∩ó½∩ÑΓß∩ ßΓαπ¬Γπαá, ß«ñÑαªáΘá∩ π¬áºáΓѽ¿ ¡á
  870.  ß««ΓóÑΓßΓóπεΘÑÑ ¿¼∩, ¡á ºá¼Ñ¡∩εΘ¿⌐ ΓѬßΓ ¿ ¡á ß½ÑñπεΘ¿⌐ í½«¬
  871.  ó µÑ»¿. ìπ½Ñó«⌐ π¬áºáΓѽ∞ ß½ÑñπεΘÑú« í½«¬á ß½πª¿Γ »α¿º¡á¬«¼
  872.  ¬«¡µá ñá¡¡«⌐ µÑ»¿.
  873.  
  874.  STRUCT NLIST  \(  /* BASIC TABLE ENTRY */
  875.       CHAR *NAME;
  876.       CHAR *DEF;
  877.       STRUCT NLIST *NEXT; /* NEXT ENTRY IN CHAIN */
  878.  \);
  879.  
  880.  îáßß¿ó π¬áºáΓѽÑ⌐ φΓ« »α«ßΓ«
  881.  
  882.   DEFINE    HASHSIZE     100
  883.   TATIC STRUCT NLIST *HASHTAB[HASHSIZE] /* POINTER TABLE */
  884.  
  885.      ç¡áτÑ¡¿Ñ Σπ¡¬µ¿¿ σÑΦ¿α«óá¡¿∩, ¿ß»«½∞ºπѼ«⌐ «íÑ¿¼¿ Σπ¡¬-
  886.  µ¿∩¼¿ LOOKUP ¿ INSTALL , »«½πτáÑΓß∩ »α«ßΓ« ¬á¬ «ßΓáΓ«¬ «Γ
  887.  ñѽѡ¿∩ ßπ¼¼δ ß¿¼ó«½∞¡δσ º¡áτÑ¡¿⌐ ßΓ᫬¿ ¡á αẼÑα ¼áßß¿óá.
  888.  (¥Γ« ¡Ñ ßá¼δ⌐ ½πτΦ¿⌐ ó«º¼«ª¡δ⌐ á½ú«α¿Γ¼, ¡« Ñú« ñ«ßΓ«¿¡ßΓó«
  889.  ß«ßΓ«¿Γ ó ¿ß¬½ετ¿Γѽ∞¡«⌐ »α«ßΓ«ΓÑ).
  890.             
  891.                            - 144 -
  892.      
  893.   HASH(S)   /* FORM HASH VALUE FOR STRING */
  894.   CHAR *S;
  895.   \(
  896.    INT HASHVAL;
  897.  
  898.    FOR (HASHVAL = 0; *S != '\0'; )
  899.        HASHVAL += *S++;
  900.    RETURN(HASHVAL % HASHSIZE);
  901.   \)
  902.  
  903.      é αѺπ½∞ΓáΓÑ »α«µÑßßá σÑΦ¿α«óá¡¿∩ óδñáÑΓß∩ ¡áτá½∞¡δ⌐ ¿¡-
  904.  ñѬߠó ¼áßß¿óÑ HASHTAB ; Ñß½¿ ñá¡¡á∩ ßΓα«¬á ¼«ªÑΓ íδΓ∞
  905.  úñÑ-Γ« ¡á⌐ñÑ¡á, Γ« ¿¼Ñ¡¡« ó µÑ»¿ í½«¬«ó, ¡áτὫ ¬«Γ«α«⌐ π¬á-
  906.  ºá¡« Γá¼. Å«¿ß¬ «ßπΘÑßΓó½∩ÑΓß∩ Σπ¡¬µ¿Ñ⌐ LOOKUP. àß½¿ Σπ¡¬µ¿∩
  907.  LOOKUP ¡áσ«ñ¿Γ, τΓ« ñá¡¡δ⌐ φ½Ñ¼Ñ¡Γ πªÑ »α¿ßπΓßΓóπÑΓ, Γ« «¡á
  908.  ó«ºóαáΘáÑΓ π¬áºáΓѽ∞ ¡á ¡Ñú«; Ñß½¿ ¡ÑΓ, Γ« «¡á ó«ºóαáΘáÑΓ
  909.  NULL.
  910.  
  911.  STRUCT NLIST *LOOKUP(S) /* LOOK FOR S IN HASHTAB */
  912.  CHAR *S;
  913.  \(
  914.  STRUCT NLIST *NP;
  915.  
  916.  FOR (NP = HASHTAB[HASH(S)]; NP != NULL;NP=NP->NEXT)
  917.      IF (STRCMP(S, NP->NAME) == 0)
  918.    RETURN(NP);  /* FOUND IT */
  919.  RETURN(NULL);    /* NOT FOUND */
  920.  
  921.  
  922.      öπ¡¬µ¿∩ INSTALL ¿ß»«½∞ºπÑΓ Σπ¡¬µ¿ε LOOKUP ñ½∩ «»αÑñѽÑ-
  923.  ¡¿∩, ¡Ñ »α¿ßπΓßΓóπÑΓ ½¿ πªÑ óó«ñ¿¼«Ñ ó ñá¡¡δ⌐ ¼«¼Ñ¡Γ ¿¼∩;
  924.  Ñß½¿ φΓ« Γá¬, Γ« ¡«ó«Ñ «»αÑñѽѡ¿Ñ ñ«½ª¡« óδΓÑß¡¿Γ∞ ßΓáα«Ñ.
  925.  é »α«Γ¿ó¡«¼ ß½πτáÑ ß«ºñáÑΓß∩ ß«óÑαΦÑ¡¡« ¡«óδ⌐ φ½Ñ¼Ñ¡Γ. àß½¿
  926.  »« ¬á¬«⌐-½¿í« »α¿τ¿¡Ñ ñ½∩ ¡«ó«ú« φ½Ñ¼Ñ¡Γá í«½∞ΦÑ ¡ÑΓ ¼ÑßΓá,
  927.  Γ« Σπ¡¬µ¿∩ INSTALL ó«ºóαáΘáÑΓ NULL.
  928.  
  929.     STRUCT NLIST *INSTALL(NAME, DEF) /* PUT (NAME, DEF) */
  930.     CHAR *NAME, *DEF;
  931.     \(
  932.   STRUCT NLIST *NP, *LOOKUP();
  933.   CHAR *STRSAVE(), *ALLOC();
  934.   INT HASHVAL;
  935.  
  936.   IF((NP = LOOKUP(NAME)) == NULL) \( /* NOT FOUND */
  937.    NP = (STRUCT NLIST *) ALLOC(SIZEOF(*NP));
  938.    IF (NP == NULL)
  939.       RETURN(NULL);
  940.    IF ((NP->NAME = STRSAVE(NAME)) == NULL)
  941.       RETURN(NULL);
  942.    HASHVAL = HASH(NP->NAME);
  943.    NP->NEXT = HASHTAB[HASHVAL];
  944.    HASHTAB[HASHVAL] = NP;
  945.   \) ELSE        /* ALREADY THERE */
  946.        FREE((NP->DEF);/* FREE PREVIOUS DEFINITION */
  947.   IF ((NP->DEF = STRSAVE(DEF)) == NULL)
  948.        RETURN (NULL);
  949.   RETURN(NP);
  950.     \)      
  951.      
  952.                            - 145 -
  953.  
  954.      öπ¡¬µ¿∩ STRSAVE »α«ßΓ« ¬«»¿απÑΓ ßΓ᫬π, π¬áºá¡¡πε ó ¬á-
  955.  τÑßΓóÑ áαúπ¼Ñ¡Γá, ó ¼ÑßΓ« σαá¡Ñ¡¿∩, »«½πτÑ¡¡«Ñ ó αѺπ½∞ΓáΓÑ
  956.  «íαáΘÑ¡¿∩ ¬ Σπ¡¬µ¿¿ ALLOC. îδ πªÑ »α¿óѽ¿ φΓπ Σπ¡¬µ¿ε ó ú½á-
  957.  óÑ 5. Æá¬ ¬á¬ «íαáΘÑ¡¿Ñ ¬ Σπ¡¬µ¿¿ ALLOC ¿ FREE ¼«úπΓ »α«¿ß-
  958.  σ«ñ¿Γ∞ ó ½εí«¼ »«α∩ñ¬Ñ ¿ ó ßó∩º¿ ß »α«í½Ñ¼«⌐ óδαáó¡¿óá¡¿∩,
  959.  »α«ßΓ«⌐ óáα¿á¡Γ Σπ¡¬µ¿¿ ALLOC ¿º ú½áóδ 5 ¡á¼ í«½∞ΦÑ ¡Ñ »«ñ-
  960.  σ«ñ¿Γ; ß¼«Γα¿ΓÑ ú½áóδ 7 ¿ 8.
  961.      ô»α᪡ѡ¿Ñ 6-7.
  962.      ---------------
  963.      ìá»¿Φ¿ΓÑ »α«µÑñπαπ, ¬«Γ«αá∩ íπñÑΓ πñá½∩Γ∞ ¿¼∩ ¿ «»αÑñÑ-
  964.  ½Ñ¡¿Ñ ¿º Γáí½¿µδ, π»αáó½∩Ѽ«⌐ Σπ¡¬µ¿∩¼¿ LOOKUP ¿ INSTALL.
  965.      ô»α᪡ѡ¿Ñ 6-8.
  966.      ---------------
  967.      Éáºαáí«Γá⌐ΓÑ »α«ßΓπε, «ß¡«óá¡¡πε ¡á Σπ¡¬µ¿∩σ φΓ«ú« αáº-
  968.  ñѽá, óÑαß¿ε »α«µÑßß«αá ñ½∩ «íαáí«Γ¬¿ ¬«¡ßΓαπ¬µ¿⌐ #DEFINE ,
  969.  »α¿ú«ñ¡πε ñ½∩ ¿ß»«½∞º«óá¡¿∩ ß "C"-»α«úαἼἿ. éá¼ ¼«úπΓ
  970.  ΓᬪѠ«¬áºáΓ∞ß∩ »«½Ñº¡δ¼¿ Σπ¡¬µ¿¿ GETCHAR ¿ UNGETCH.
  971.  
  972.       6.7. Å«½∩.
  973.      è«úñá ó«»α«ß φ¬«¡«¼¿¿ »á¼∩Γ¿ ßΓá¡«ó¿Γß∩ «τÑ¡∞ ßπΘÑßΓóÑ¡-
  974.  ¡δ¼, Γ« ¼«ªÑΓ «¬áºáΓ∞ß∩ ¡Ñ«íσ«ñ¿¼δ¼ »«¼ÑΘáΓ∞ ó «ñ¡« ¼áΦ¿¡¡«Ñ
  975.  ß½«ó« ¡Ñ߬«½∞¬« αẽ¿τ¡δσ «íΩÑ¬Γ«ó; «ñ¡« ¿º «ß«íÑ¡¡« αáß»-
  976.  α«ßαá¡Ñ¡¡δσ π»«ΓαÑí½Ñ¡¿⌐ - ¡áí«α «ñ¡«í¿Γ«óδσ »α¿º¡á¬«ó ó
  977.  »α¿¼Ñ¡Ñ¡¿∩σ, »«ñ«í¡δσ ß¿¼ó«½∞¡δ¼ Γáí½¿µá¼ ¬«¼»¿½∩Γ«αá. ó¡ÑΦ-
  978.  ¡Ñ «íπß½«ó½Ñ¡¡δÑ Σ«α¼áΓδ ñá¡¡δσ, ΓᬿѠ¬á¬ ¿¡ΓÑαΣÑ⌐ßδ á»»á-
  979.  αáΓ¡δσ ßαÑñßΓó ΓᬪѠºáτáßΓπε »αÑñ»«½áúáεΓ ó«º¼«ª¡«ßΓ∞ »«½π-
  980.  τÑ¡¿∩ ß½«óá »« τáßΓ∩¼.
  981.      ÅαÑñßΓáó∞ΓÑ ßÑíÑ Σαáú¼Ñ¡Γ ¬«¼»¿½∩Γ«αá, ¬«Γ«αδ⌐ αáí«ΓáÑΓ
  982.  ß ß¿¼ó«½∞¡«⌐ Γáí½¿µÑ⌐. æ ¬áªñδ¼ ¿ñÑ¡Γ¿Σ¿¬áΓ«α«¼ »α«úαá¼¼δ
  983.  ßó∩ºá¡á «»αÑñѽѡ¡á∩ ¿¡Σ«α¼áµ¿∩, ¡á»α¿¼Ñα, ∩ó½∩ÑΓß∩ «¡ ¿½¿
  984.  ¡ÑΓ ¬½ετÑóδ¼ ß½«ó«¼, ∩ó½∩ÑΓß∩ ½¿ «¡ ¿½¿ ¡ÑΓ ó¡ÑΦ¡¿¼ ¿/¿½¿
  985.  ßΓáΓ¿τÑ߬¿¼ ¿ Γ.ñ. æá¼δ⌐ ¬«¼»á¬Γ¡δ⌐ ß»«ß«í ºá¬«ñ¿α«óáΓ∞ Γá-
  986.  ¬πε ¿¡Σ«α¼áµ¿ε - »«¼ÑßΓ¿Γ∞ ¡áí«α «ñ¡«í¿Γ«óδσ »α¿º¡á¬«ó ó «Γ-
  987.  ñѽ∞¡πε »ÑαѼѡ¡πε Γ¿»á CHAR ¿½¿ INT.
  988.      Äíδτ¡δ⌐ ß»«ß«í, ¬«Γ«αδ¼ φΓ« ñѽáÑΓß∩, ß«ßΓ«¿Γ ó «»αÑñÑ-
  989.  ½Ñ¡¿¿ ¡áí«αá "¼áß«¬", «ΓóÑτáεΘ¿σ ß««ΓóÑΓßΓóπΘ¿¼ í¿Γ«óδ¼ »«-
  990.  º¿µ¿∩¼, ¬á¬ ó
  991.  
  992.    #DEFINE   KEYWORD   01
  993.    #DEFINE   EXTERNAL  02
  994.    #DEFINE   STATIC    04
  995.  
  996.  (τ¿ß½á ñ«½ª¡δ íδΓ∞ ßΓѻѡ∩¼¿ ñó«⌐¬¿). Æ«úñá «íαáí«Γ¬á í¿Γ«ó
  997.  ßóÑñÑΓß∩ ¬ "ª«¡ú½¿α«óá¡¿ε í¿ΓἿ" ß »«¼«Θ∞ε «»Ñαᵿ⌐ ßñó¿úá,
  998.  ¼á߬¿α«óá¡¿∩ ¿ ñ«»«½¡Ñ¡¿∩, «»¿ßá¡¡δσ ¡á¼¿ ó ú½áóÑ 2.
  999.      ìѬ«Γ«αδÑ τáßΓ« óßΓαÑτáεΘ¿Ñß∩ ¿ñ¿«¼δ:
  1000.  
  1001.    FLAGS \!= EXTERNAL  \! STATIC;
  1002.  
  1003.  ó¬½ετáÑΓ í¿Γδ EXTERNAL ¿ STATIC ó FLAGS, ó Γ« óαѼ∩ ¬á¬
  1004.  
  1005.    FLAGS &= \^(ÑXTERNAL \! STATIC);
  1006.             
  1007.                            - 146 -
  1008.      
  1009.  ¿σ ó䬽ετáÑΓ, á
  1010.  
  1011.    IF ((FLAGS & (EXTERNAL \! STATIC)) == 0) ...
  1012.  
  1013.  ¿ßΓ¿¡¡«, Ñß½¿ «íá í¿Γá ó䬽ετÑ¡δ.
  1014.      ò«Γ∩ φΓ¿¼¿ ¿ñ¿«¼á¼¿ ½Ñú¬« «ó½áñÑΓ∞, ∩ºδ¬ "C" ó ¬áτÑßΓóÑ
  1015.  á½∞ΓÑα¡áΓ¿óδ »αÑñ½áúáÑΓ ó«º¼«ª¡«ßΓ∞ «»αÑñѽѡ¿∩ ¿ «íαáí«Γ¬¿
  1016.  »«½Ñ⌐ ó¡πΓα¿ ß½«óá ¡Ñ»«ßαÑñßΓóÑ¡¡«, á ¡Ñ »«ßαÑñßΓó«¼ »«í¿Γ«-
  1017.  óδ󠽫ú¿τÑ߬¿σ «»Ñαᵿ⌐. Å«½Ñ - φΓ« ¡áí«α ß¼Ñª¡δσ í¿Γ«ó
  1018.  ó¡πΓα¿ «ñ¡«⌐ »ÑαѼѡ¡«⌐ Γ¿»á INT. æ¿¡Γá¬ß¿ß «»αÑñѽѡ¿∩ ¿
  1019.  «íαáí«Γ¬¿ »«½Ñ⌐ «ß¡«óδóáÑΓß∩ ¡á ßΓαπ¬Γπαáσ. ìá»α¿¼Ñα, ß¿¼-
  1020.  ó«½∞¡πε Γáí½¿µπ ¬«¡ßΓαπ¬µ¿⌐ #DEFINE, »α¿óÑñÑ¡¡πε óδΦÑ, ¼«ª¡«
  1021.  íδ í佫 ºá¼Ñ¡¿Γ∞ «»αÑñѽѡ¿Ñ¼ ΓαÑσ »«½Ñ⌐:
  1022.  
  1023.      STRUCT  \(
  1024.    UNSIGNED IS_KEYWORD : 1;
  1025.    UNSIGNED IS_EXTERN  : 1;
  1026.    UNSIGNED IS_STATIC  : 1;
  1027.      \)    FLAGS;
  1028.  
  1029.  çñÑß∞ «»αÑñѽ∩ÑΓß∩ »ÑαѼѡ¡á∩ ß ¿¼Ñ¡Ñ¼ FLAGS, ¬«Γ«αá∩ ß«ñÑα-
  1030.  ª¿Γ Γα¿ 1-í¿Γ«óδσ »«½∩. æ½ÑñπεΘÑÑ ºá ñó«ÑΓ«τ¿Ñ¼ τ¿ß½« ºáñáÑΓ
  1031.  Φ¿α¿¡π »«½∩ ó í¿Γáσ. Å«½∩ «»¿ßá¡δ ¬á¬ UNSIGNED, τΓ«íδ »«ñ-
  1032.  τÑભπΓ∞, τΓ« «¡¿ ñÑ⌐ßΓó¿Γѽ∞¡« íπñπΓ óѽ¿τ¿¡á¼¿ íѺ º¡á¬á.
  1033.      ìá «Γñѽ∞¡δÑ »«½∩ ¼«ª¡« ßßδ½áΓ∞ß∩, ¬á¬ FLAGS.IS_STATIE,
  1034.  FLAGS. IS_EXTERN, FLAGS.IS_KEYWORD ê Γ.ñ., Γ« ÑßΓ∞ Γ«τ¡« Γá¬
  1035.  ªÑ, ¬á¬ ¡á ñαπú¿Ñ τ½Ñ¡δ ßΓαπ¬Γπαδ. Å«½∩ óÑñπΓ ßÑí∩ »«ñ«í¡«
  1036.  ¡Ñí«½∞Φ¿¼ µÑ½δ¼ íѺ º¡á¬á ¿ ¼«úπΓ πτáßΓó«óáΓ∞ ó áα¿Σ¼ÑΓ¿τÑß-
  1037.  ¬¿σ óδαáªÑ¡¿∩σ Γ«τ¡« ΓᬠªÑ, ¬á¬ ¿ ñαπú¿Ñ µÑ½δÑ. Æá¬¿¼ «íαá-
  1038.  º«¼, »αÑñδñπΘ¿Ñ »α¿¼Ñαδ í«½ÑÑ ÑßΓÑßΓóÑ¡¡« »ÑαÑ»¿ßáΓ∞ Γá¬:
  1039.  
  1040.      FLAGS.IS_EXTERN = FLAGS.IS_STATIC = 1;
  1041.  
  1042.  ñ½∩ ó¬½ετÑ¡¿∩ í¿Γ«ó;
  1043.  
  1044.      FLAGS.IS_EXTERN = FLAGS.IS_STATIC = 0;
  1045.  
  1046.  ñ½∩ ó䬽ετÑ¡¿∩ í¿Γ«ó;
  1047.  
  1048.    IF (FLAGS.IS_EXTERN == 0 &&FLAGS.IS_STATIC == 0)...
  1049.  
  1050.  ñ½∩ ¿σ »α«óÑન.
  1051.      Å«½Ñ ¡Ñ ¼«ªÑΓ »ÑαѬαδóáΓ∞ úαá¡¿µπ INT; Ñß½¿ π¬áºá¡¡á∩
  1052.  Φ¿α¿¡á Γᬫóá, τΓ« φΓ« ñ«½ª¡« ß½πτ¿Γ∞ß∩, Γ« »«½Ñ óδαáó¡¿óá-
  1053.  ÑΓß∩ »« úαá¡¿µÑ ß½ÑñπεΘÑú« INT. Å«½∩¼ ¼«ª¡« ¡Ñ »α¿ßóá¿óáΓ∞
  1054.  ¿¼Ñ¡á; ¡Ñ¿¼Ñ¡«óá¡¡δÑ »«½∩ (Γ«½∞¬« ñó«ÑΓ«τ¿Ñ ¿ Φ¿α¿¡á) ¿ß-
  1055.  »«½∞ºπεΓß∩ ñ½∩ ºá»«½¡Ñ¡¿∩ ßó«í«ñ¡«ú« ¼ÑßΓá. ùΓ«íδ óδ¡πñ¿Γ∞
  1056.  óδαáó¡¿óá¡¿Ñ ¡á úαá¡¿µπ ß½ÑñπεΘÑú« INT, ¼«ª¡« ¿ß»«½∞º«óáΓ∞
  1057.  ß»Ñµ¿á½∞¡πε Φ¿α¿¡π 0.
  1058.      
  1059.                            - 147 -
  1060.      
  1061.      Åα¿ αáí«ΓÑ ß »«½∩¼¿ ¿¼ÑÑΓß∩ α∩ñ ¼«¼Ñ¡Γ«ó, ¡á ¬«Γ«αδÑ
  1062.  ß½ÑñπÑΓ «íαáΓ¿Γ∞ ó¡¿¼á¡¿Ñ. Å«-ó¿ñ¿¼«¼π ¡á¿í«½ÑÑ ßπΘÑßΓóÑ¡¡δ¼
  1063.  ∩ó½∩ÑΓß∩ Γ«, τΓ« «Γαáªá∩ »α¿α«ñπ αẽ¿τ¡δσ á»»áαáΓ¡δσ ßαÑñ-
  1064.  ßΓó, αáß»αÑñѽѡ¿Ñ »«½Ñ⌐ ¡á ¡Ñ¬«Γ«αδσ ¼áΦ¿¡áσ «ßπΘÑßΓó½∩ÑΓß∩
  1065.  ß½Ñóá ¡á»αáó«, á ¡á ¡Ñ¬«Γ«αδσ ß»αáóá ¡á½Ñó«. ¥Γ« «º¡áτáÑΓ,
  1066.  τΓ« σ«Γ∩ »«½∩ «τÑ¡∞ »«½Ñº¡δ ñ½∩ αáí«Γδ ß ó¡πΓαÑ¡¡Ñ «»αÑñÑ-
  1067.  ½Ñ¡¡δ¼¿ ßΓαπ¬ΓπαἿ ñá¡¡δσ, »α¿ αáºñѽѡ¿¿ ó¡ÑΦ¡Ñ «»αÑñѽ∩Ñ-
  1068.  ¼δσ ñá¡¡δσ ß½ÑñπÑΓ ΓΘáΓѽ∞¡« αáßß¼áΓα¿óáΓ∞ ó«»α«ß « Γ«¼, ¬á-
  1069.  ¬«⌐ ¬«¡Ñµ »«ßΓπ»áÑΓ »Ñαóδ¼.
  1070.      äαπú¿Ñ «úαá¡¿τÑ¡¿∩, ¬«Γ«αδÑ ß½ÑñπÑΓ ¿¼ÑΓ∞ ó ó¿ñπ: »«½∩
  1071.  ¡Ñ ¿¼ÑεΓ º¡á¬á; «¡¿ ¼«úπΓ σαá¡¿Γ∞ß∩ Γ«½∞¬« ó »ÑαѼѡ¡δσ Γ¿»á
  1072.  INT (¿½¿, τΓ« φ¬ó¿óá½Ñ¡Γ¡«, Γ¿»á UNSIGNED); «¡¿ ¡Ñ ∩ó½∩εΓß∩
  1073.  ¼áßß¿óἿ; «¡¿ ¡Ñ ¿¼ÑεΓ áñαÑß«ó, ΓᬠτΓ« ¬ ¡¿¼ ¡Ñ »α¿¼Ñ¡¿¼á
  1074.  «»Ñαᵿ∩ &.
  1075.  
  1076.       6.8. ÄíΩÑñ¿¡Ñ¡¿∩.
  1077.      OíΩÑñ¿¡Ñ¡¿∩ - φΓ« »ÑαѼѡ¡á∩, ¬«Γ«αá∩ ó αẽ¿τ¡δÑ ¼«¼Ñ¡-
  1078.  Γδ óαѼѡ¿ ¼«ªÑΓ ß«ñÑαªáΓ∞ «íΩѬΓδ αạδσ Γ¿»«ó ¿ αẼÑα«ó,
  1079.  »α¿τѼ ¬«¼»¿½∩Γ«α íÑαÑΓ ¡á ßÑí∩ «Γ߽Ѫ¿óá¡¿Ñ αẼÑαá ¿ ΓαÑ-
  1080.  í«óá¡¿⌐ óδαáó¡¿óá¡¿∩. ÄíΩÑñ¿¡Ñ¡¿∩ »αÑñßΓáó½∩εΓ ó«º¼«ª¡«ßΓ∞
  1081.  αáí«ΓáΓ∞ ß αẽ¿τ¡δ¼¿ ó¿ñἿ ñá¡¡δσ ó «ñ¡«⌐ «í½áßΓ¿ »á¼∩Γ¿,
  1082.  ¡Ñ óó«ñ∩ ó »α«úαá¼¼π ¡¿¬á¬«⌐ ¼áΦ¿¡¡«-ºáó¿ß¿¼«⌐ ¿¡Σ«α¼áµ¿¿.
  1083.      é ¬áτÑßΓóÑ »α¿¼Ñαá, ß¡«óá ¿º ß¿¼ó«½∞¡«⌐ Γáí½¿µδ ¬«¼»¿½∩-
  1084.  Γ«αá, »αÑñ»«½«ª¿¼, τΓ« ¬«¡ßΓá¡Γδ ¼«úπΓ íδΓ∞ Γ¿»á INT , FLOAT
  1085.  ¿½¿ íδΓ∞ π¬áºáΓѽ∩¼¿ ¡á ß¿¼ó«½δ. º¡áτÑ¡¿Ñ ¬áªñ«⌐ ¬«¡¬αÑΓ¡«⌐
  1086.  ¬«¡ßΓá¡Γδ ñ«½ª¡« σαá¡¿Γ∞ß∩ ó »ÑαѼѡ¡«⌐ ß««ΓóÑßΓóπεΘÑú« Γ¿-
  1087.  »á, ¡« óßÑ ªÑ ñ½∩ π»αáó½Ñ¡¿∩ Γáí½¿µÑ⌐ ßá¼δ¼ πñ«í¡δ¼ í佫 íδ,
  1088.  Ñß½¿ φΓ« º¡áτÑ¡¿Ñ ºá¡¿¼á½« íδ «ñ¿¡ ¿ Γ«Γ ªÑ «íΩѼ »á¼∩Γ¿ ¿
  1089.  σαá¡¿½«ß∞ ó Γ«¼ ªÑ ßἫ¼ ¼ÑßΓÑ ¡Ñºáó¿ß¿¼« «Γ Ñú« Γ¿»á. φΓ« ¿
  1090.  ∩ó½∩ÑΓß∩ ¡áº¡áτÑ¡¿Ñ¼ «íΩÑñ¿¡Ñ¡¿∩ - óδñѽ¿Γ∞ «Γñѽ∞¡πε »ÑαÑ-
  1091.  ¼Ñ¡¡πε, ó ¬«Γ«α«⌐ ¼«ª¡« ºá¬«¡¡« σαá¡¿Γ∞ ½εíπε «ñ¡π ¿º »ÑαÑ-
  1092.  ¼Ñ¡¡δσ ¡Ñ߬«½∞¬¿σ Γ¿»«ó. èᬠ¿ ó ß½πτáÑ »«½Ñ⌐, ß¿¡Γá¬ß¿ß «ß-
  1093.  ¡«óδóáÑΓß∩ ¡á ßΓαπ¬Γπαáσ.
  1094.  
  1095.    UNION U_TAG \(
  1096.    INT IVAL;
  1097.    FLOAT FVAL;
  1098.    CHAR *PVAL;
  1099.    \) UVAL;
  1100.  
  1101.  ÅÑαѼѡ¡á∩ UVAL íπñÑΓ ¿¼ÑΓ∞ ñ«ßΓáΓ«τ¡« í«½∞Φ«⌐ αẼÑα,τΓ«íδ
  1102.  σαá¡¿Γ∞ ¡á¿í«½∞Φ¿⌐ ¿º ΓαÑσ Γ¿»«ó, ¡Ñºáó¿ß¿¼« «Γ ¼áΦ¿¡δ, ¡á
  1103.  ¬«Γ«α«⌐ «ßπΘÑßΓó½∩ÑΓß∩ ¬«¼»¿½∩µ¿∩, - »α«úαἼᠡѠíπñÑΓ ºá-
  1104.  ó¿ß¿Γ∞ «Γ σáαá¬ΓÑα¿ßΓ¿¬ á»»áαáΓ¡δσ ßαÑñßΓó. ïεí«⌐ ¿º φΓ¿σ
  1105.  ΓαÑσ Γ¿»«ó ¼«ªÑΓ íδΓ∞ »α¿ßó«Ñ¡ UVAR ¿ ºáΓѼ ¿ß»«½∞º«óá¡ ó
  1106.  óδαáªÑ¡¿∩σ, »«¬á ΓᬫѠ¿ß»«½∞º«óá¡¿Ñ ß«ó¼ÑßΓ¿¼«: ¿ºó½Ñ¬áѼδ⌐
  1107.  Γ¿» ñ«½ªÑ¡ ß«ó»áñáΓ∞ ß »«ß½Ññ¡¿¼ »«¼ÑΘÑ¡¡δ¼ Γ¿»«¼. äѽ«
  1108.  »α«úαá¼¼¿ßΓá - ß½Ññ¿Γ∞ ºá ΓѼ, ¬á¬«⌐ Γ¿» σαá¡¿Γß∩ ó «íΩÑñ¿-
  1109.  ¡Ñ¡¿¿ ó ñá¡¡δ⌐ ¼«¼Ñ¡Γ; Ñß½¿ τΓ«-½¿í« σαá¡¿Γß∩ ¬á¬ «ñ¿¡ Γ¿»,
  1110.  á ¿ºó½Ñ¬áÑΓß∩ ¬á¬ ñαπú«⌐, Γ« αѺπ½∞ΓáΓδ íπñπΓ ºáó¿ßÑΓ∞ «Γ
  1111.  ¿ß»«½∞ºπѼ«⌐ ¼áΦ¿¡δ.
  1112.      
  1113.                            - 149 -
  1114.      
  1115.      æ¿¡Γá¬ß¿τÑ߬¿ ñ«ßΓπ» ¬ τ½Ñ¡á¼ «íΩÑñ¿¡Ñ¡¿∩ «ßπΘÑßΓó½∩ÑΓß∩
  1116.  ß½ÑñπεΘ¿¼ «íαẫ¼:
  1117.  
  1118.    ¿¼∩ «íΩÑñ¿¡Ñ¡¿∩.τ½Ñ¡
  1119.    --------------------
  1120.  ¿½¿
  1121.    π¬áºáΓѽ∞ «íΩÑñ¿¡Ñ¡¿∩ ->τ½Ñ¡
  1122.    ----------------------------
  1123.  
  1124.  Γ« ÑßΓ∞ Γ«τ¡« ΓᬠªÑ, ¬á¬ ¿ ó ß½πτáÑ ßΓαπ¬Γπα. Ñß½¿ ñ½∩ «Γß-
  1125.  ½Ñª¿óá¡¿∩ Γ¿»á, σαá¡¿¼«ú« ó ñá¡¡δ⌐ ¼«¼Ñ¡Γ ó UVAL, ¿ß»«½∞ºπ-
  1126.  ÑΓß∩ »ÑαѼѡ¡á∩ UTYPE, Γ« ¼«ª¡« óßΓαÑΓ¿Γ∞ Γᬫ⌐ πτáßΓ«¬
  1127.  »α«úαá¼¼δ:
  1128.  
  1129.    IF (UTYPE == INT)
  1130.    PRINTF("%D\N", UVAL.IVAL);
  1131.    ELSE IF (UTYPE == FLOAT)
  1132.    PRINTF("%F\N", UVAL.FVAL);
  1133.    ELSE IF (UTYPE == STRING)
  1134.    PRINTF("%S\N", UVAL.PVAL);
  1135.    ELSE
  1136.    PRINTF("BAD TYPE %D IN UTYPE\N", UTYPE);
  1137.  
  1138.      ÄíΩÑñ¿¡Ñ¡¿∩ ¼«úπΓ »«∩ó½∩Γ∞ß∩ ó¡πΓα¿ ßΓαπ¬Γπα ¿ ¼áßß¿ó«ó
  1139.  ¿ ¡á«í«α«Γ. çỿß∞ ñ½∩ «íαáΘÑ¡¿∩ ¬ τ½Ñ¡π «íΩÑñ¿¡Ñ¡¿∩ ó
  1140.  ßΓαπ¬ΓπαÑ (¿½¿ ¡á«í«α«Γ) ß«óÑαΦÑ¡¡« ¿ñÑ¡Γ¿τ¡á Γ«⌐, ¬«Γ«αá∩
  1141.  ¿ß»«½∞ºπÑΓß∩ ó« ó½«ªÑ¡¡δσ ßΓαπ¬Γπαáσ. ¡á»α¿¼Ñα, ó ¼áßß¿óÑ
  1142.  ßΓαπ¬Γπα, «»αÑñѽѡ¡δ¼ ß½ÑñπεΘ¿¼ «íαẫ¼
  1143.  
  1144.   STRUCT \(
  1145.   CHAR *NAME;
  1146.   INT FLAGS;
  1147.   INT UTYPE;
  1148.   UNION \(
  1149.   INT IVAL;
  1150.   FLOAT FVAL;
  1151.   CHAR *PVAL;
  1152.   \) UVAL;
  1153.    \) SYMTAB[NSYM];
  1154.  
  1155.  ¡á »ÑαѼѡ¡πε IVAL ¼«ª¡« ß«ß½áΓ∞ß∩ ¬á¬
  1156.  
  1157.    SYMTAB[I].UVAL.IVAL
  1158.  
  1159.  á ¡á »Ñαóδ⌐ ß¿¼ó«½ ßΓ᫬¿ PVAL ¬á¬
  1160.  
  1161.    *SYMTAB[I].UVAL.PVAL
  1162.  
  1163.     é ßπΘ¡«ßΓ¿ «íΩÑñ¿¡Ñ¡¿Ñ ∩ó½∩ÑΓß∩ ßΓαπ¬Γπα«⌐, ó ¬«Γ«α«⌐ óßÑ
  1164.  τ½Ñ¡δ ¿¼ÑεΓ ¡π½Ñó«Ñ ß¼ÑΘÑ¡¿Ñ. æá¼á ßΓαπ¬Γπαá ñ«ßΓáΓ«τ¡« óÑ-
  1165.  ½¿¬á, τΓ«íδ σαá¡¿Γ∞ "ßá¼δ⌐ Φ¿α«¬¿⌐" τ½Ñ¡, ¿ óδαáó¡¿óá¡¿Ñ
  1166.  »α¿ú«ñ¡« ñ½∩ óßÑσ Γ¿»«ó, óσ«ñ∩Θ¿σ ó «íΩÑñ¿¡Ñ¡¿Ñ. èᬠ¿ ó
  1167.  ß½πτáÑ ßΓαπ¬Γπα, Ññ¿¡ßΓóÑ¡¡δ¼¿ «»Ñαᵿ∩¼¿, ¬«Γ«αδÑ ó ¡áßΓ«∩-
  1168.  ΘÑÑ óαѼ∩ ¼«ª¡« »α«ó«ñ¿Γ∞ ß «íΩÑñ¿¡Ñ¡¿∩¼¿, ∩ó½∩εΓß∩ ñ«ßΓπ» ¬
  1169.      
  1170.                            - 150 -
  1171.      
  1172.  τ½Ñ¡π ¿ ¿ºó½ÑτÑ¡¿Ñ áñαÑßá; «íΩÑñ¿¡Ñ¡¿∩ ¡Ñ ¼«úπΓ íδΓ∞ »α¿ßó«-
  1173.  Ñ¡δ, »ÑαÑñá¡δ Σπ¡¬µ¿∩¼ ¿½¿ ó«ºóαáΘÑ¡δ ¿¼¿. π¬áºáΓѽ¿ «íΩÑñ¿-
  1174.  ¡Ñ¡¿⌐ ¼«ª¡« ¿ß»«½∞º«óáΓ∞ ó Γ«τ¡« Γᬫ⌐ ªÑ ¼á¡ÑαÑ, ¬á¬ ¿ π¬á-
  1175.  ºáΓѽ¿ ßΓαπ¬Γπα.
  1176.     Åα«úαá¼¼á αáß»αÑñѽѡ¿∩ »á¼∩Γ¿, »α¿ó«ñ¿¼á∩ ó ú½áóÑ 8 ,
  1177.  »«¬áºδóáÑΓ, ¬á¬ ¼«ª¡« ¿ß»«½∞º«óáΓ∞ «íΩÑñ¿¡Ñ¡¿Ñ, τΓ«íδ ßñÑ-
  1178.  ½áΓ∞ ¡Ñ¬«Γ«απε »ÑαѼѡ¡πε óδα«ó¡Ñ¡¡«⌐ »« «»αÑñѽѡ¡«¼π ó¿ñπ
  1179.  úαá¡¿µδ »á¼∩Γ¿.
  1180.  
  1181.     6.9. Ä»αÑñѽѡ¿Ñ Γ¿»á
  1182.     é ∩ºδ¬Ñ "C" »αÑñπß¼«ΓαÑ¡á ó«º¼«ª¡«ßΓ∞, ¡áºδóáѼá∩ TYPEDEF
  1183.  ñ½∩ óóÑñÑ¡¿∩ ¡«óδσ ¿¼Ñ¡ ñ½∩ Γ¿»«ó ñá¡¡δσ. ìá»α¿¼Ñα, «»¿ßá¡¿Ñ
  1184.  
  1185.  TYPEDEF INT LENGTH;
  1186.  
  1187.  ñѽáÑΓ ¿¼∩ LENGTH ß¿¡«¡¿¼«¼ ñ½∩ INT. "Æ¿»" LENGTH ¼«ªÑΓ íδΓ∞
  1188.  ¿ß»«½∞º«óá¡ ó «»¿ßá¡¿∩σ, »ÑαÑó«ñ«ó Γ¿»«ó ¿ Γ.ñ. Æ«τ¡« Γᬿ¼
  1189.  ªÑ «íαẫ¼, ¬á¬ ¿ Γ¿» INT:
  1190.  
  1191.     LENGTH   LEN, MAXLEN;
  1192.     LENGTH   *LENGTHS[];
  1193.  
  1194.  Ç¡á½«ú¿τ¡« «»¿ßá¡¿ε
  1195.  
  1196.      TYPEDEF CHAR *STRING;
  1197.  
  1198.  ñѽáÑΓ STRING ß¿¡«¡¿¼«¼ ñ½∩ CHAR*, Γ« ÑßΓ∞ ñ½∩ π¬áºáΓѽ∩ ¡á
  1199.  ß¿¼ó«½δ, τΓ« ºáΓѼ ¼«ª¡« ¿ß»«½∞º«óáΓ∞ ó «»¿ßá¡¿∩σ ó¿ñá
  1200.  
  1201.      STRING P, LINEPTR[LINES], ALLOC();
  1202.  
  1203.      ÄíαáΓ¿ΓѠ󡿼᡿Ñ, τΓ« «íΩ∩ó½∩Ѽδ⌐ ó ¬«¡ßΓαπ¬µ¿¿ TYPEDEF
  1204.  Γ¿» »«∩ó½∩ÑΓß∩ ó »«º¿µ¿¿ ¿¼Ñ¡¿ »ÑαѼѡ¡«⌐, á ¡Ñ ßαáºπ ºá
  1205.  ß½«ó«¼ TYPEDEF. æ¿¡Γá¬ß¿τÑ߬¿ ¬«¡ßΓαπ¬µ¿∩ TYPEDEF »«ñ«í¡á
  1206.  «»¿ßá¡¿∩¼ ¬½áßßá »á¼∩Γ¿ EXTERN, STATIC ¿ Γ. ä. ¼δ ΓᬪѠ¿ß-
  1207.  »«½∞º«ó὿ »α«»¿ß¡δÑ íπ¬óδ, τΓ«íδ ∩ß¡ÑÑ óδñѽ¿Γ∞ ¿¼Ñ¡á.
  1208.      é ¬áτÑßΓóÑ í«½ÑÑ ß½«ª¡«ú« »α¿¼Ñαá ¼δ ¿ß»«½∞ºπѼ ¬«¡ßΓ-
  1209.  απ¬µ¿ε TYPEDEF ñ½∩ «»¿ßá¡¿∩ πº½«ó ñÑαÑóá, αáßß¼«ΓαÑ¡¡δσ αá-
  1210.  ¡ÑÑ ó φΓ«⌐ ú½áóÑ:
  1211.  
  1212.   TYPEDEF STRUCT TNODE \(     /* THE BASIC NODE */
  1213.   CHAR *WORD; /* POINTS TO THE TEXT */
  1214.   INT COUNT; /* NUMBER OF OCCURRENCES */
  1215.   STRUCT TNODE *LEFT;     /* LEFT CHILD */
  1216.   STRUCT TNODE *RIGHT;    /* RIGHT CHILD */
  1217.   \) TREENODE, *TREEPTR;
  1218.  
  1219.  é αѺπ½∞ΓáΓÑ »«½πτáѼ ñóá ¡«óδ󠬽ετÑóδσ ß½«óá: TREENODE
  1220.  (ßΓαπ¬Γπαá) ¿ TREEPTR (π¬áºáΓѽ∞ ¡á ßΓαπ¬Γπαπ). Æ«úñá Σπ¡¬-
  1221.  µ¿ε TALLOC ¼«ª¡« ºá»¿ßáΓ∞ ó ó¿ñÑ
  1222.             
  1223.                            - 151 -
  1224.   TREEPTR TALLOC()
  1225.   \(
  1226.      CHAR *ALLOC();
  1227.      RETURN((TREEPTR) ALLOC(SIZEOF(TREENODE)));
  1228.   \)
  1229.  
  1230.      ìÑ«íσ«ñ¿¼« »«ñτÑભπΓ∞, τΓ« «»¿ßá¡¿Ñ TYPEDEF ¡Ñ »α¿ó«ñ¿Γ
  1231.  ¬ ß«ºñá¡¿ε ¡«ó«ú« ó ¬á¬«¼-½¿í« ß¼δß½Ñ Γ¿»á; «¡« Γ«½∞¬« ñ«-
  1232.  íáó½∩ÑΓ ¡«ó«Ñ ¿¼∩ ñ½∩ ¡Ñ¬«Γ«α«ú« ßπΘÑßΓóπεΘÑú« Γ¿»á. »α¿
  1233.  φΓ«¼ ¡Ñ ó«º¡¿¬áÑΓ ¿ ¡¿¬á¬«⌐ ¡«ó«⌐ ßѼá¡Γ¿¬¿: «»¿ßá¡¡δÑ Γᬿ¼
  1234.  ß»«ß«í«¼ »ÑαѼѡ¡δÑ «í½áñáεΓ Γ«τ¡« ΓѼ¿ ªÑ ßó«⌐ßΓóἿ, τΓ« ¿
  1235.  »ÑαѼѡ¡δÑ, «»¿ßá¡¡δÑ ∩ó¡δ¼ «íαẫ¼. Å« ßπΘÑßΓó𠬫¡ßΓαπ¬µ¿∩
  1236.  TYPEDEF ßσ«ñ¡á ß #DEFINE ºá ¿ß¬½ετÑ¡¿Ñ¼ Γ«ú«, τΓ« «¡á ¿¡ΓÑα-
  1237.  »αÑΓ¿απÑΓß∩ ¬«¼»¿½∩Γ«α«¼ ¿ »«Γ«¼π ¼«ªÑΓ «ßπΘÑßΓó½∩Γ∞ »«ñßΓá-
  1238.  ¡«ó¬¿ ΓѬßΓá, ¬«Γ«αδÑ óδσ«ñ∩Γ ºá »αÑñѽδ ó«º¼«ª¡«ßΓÑ⌐ ¼á¬-
  1239.  α«»α«µÑßß«αá ∩ºδ¬á "C". ìá»α¿¼Ñα,
  1240.  
  1241.   TYPEDEF INT (*PFI) ();
  1242.  
  1243.  ß«ºñáÑΓ Γ¿» PFI ñ½∩ "π¬áºáΓѽ∩ Σπ¡¬µ¿¿, ó«ºóαáΘáεΘÑ⌐ º¡áτÑ-
  1244.  ¡¿Ñ Γ¿»á INT", ¬«Γ«αδ⌐ ºáΓѼ ¼«ª¡« í佫 íδ ¿ß»«½∞º«óáΓ∞ ó
  1245.  »α«úαἼѠ߫αΓ¿α«ó¬¿ ¿º ú½áóδ 5 ó ¬«¡ΓѬßΓÑ ó¿ñá
  1246.  
  1247.  PFI STRCMP, NUMCMP, SWAP;
  1248.  
  1249.  
  1250.      ê¼ÑεΓß∩ ñóÑ «ß¡«ó¡δÑ »α¿τ¿¡δ »α¿¼Ñ¡Ñ¡¿∩ «»¿ßá¡¿⌐
  1251.  TYPEDEF. ÅÑαóá∩ »α¿τ¿¡á ßó∩ºá¡á ß »áαá¼ÑΓα¿ºáµ¿Ñ⌐ »α«úαá¼¼δ,
  1252.  τΓ«íδ «í½Ñúτ¿Γ∞ αÑΦÑ¡¿Ñ »α«í½Ñ¼δ »ÑαÑ¡«ß¿¼«ßΓ¿. àß½¿ ñ½∩ Γ¿-
  1253.  »«ó ñá¡¡δσ, ¬«Γ«αδÑ ¼«úπΓ íδΓ∞ ¼áΦ¿¡¡«-ºáó¿ß¿¼δ¼¿, ¿ß»«½∞º«-
  1254.  óáΓ∞ «»¿ßá¡¿Ñ TYPEDEF, Γ« »α¿ »ÑαÑ¡«ßÑ »α«úαá¼¼δ ¡á ñαπúπε
  1255.  ¼áΦ¿¡π »α¿ñÑΓß∩ ¿º¼Ñ¡¿Γ∞ Γ«½∞¬« φΓ¿ «»¿ßá¡¿∩. Äñ¡á ¿º Γ¿»¿τ-
  1256.  ¡δσ ß¿Γπᵿ⌐ ß«ßΓ«¿Γ ó ¿ß»«½∞º«óá¡¿¿ «»αÑñѽ∩Ѽδσ ß »«¼«Θ∞ε
  1257.  TYPEDEF ¿¼Ñ¡ ñ½∩ αẽ¿τ¡δσ µÑ½δσ óѽ¿τ¿¡ ¿ ó »«ß½ÑñπεΘѼ
  1258.  »«ñσ«ñ∩ΘѼ óδí«αÑ Γ¿»«ó SHORT, INT ¿ LONG ñ½∩ ¬áªñ«⌐ ¿¼Ñε-
  1259.  ΘÑ⌐ß∩ ¼áΦ¿¡δ.
  1260.  éΓ«α«Ñ ¡áº¡áτÑ¡¿Ñ TYPEDEF ß«ßΓ«¿Γ ó «íÑß»ÑτÑ¡¿¿ ½πτΦÑ⌐ ñ«¬π-
  1261.  ¼Ñ¡Γᵿ¿ ñ½∩ »α«úαá¼¼δ - Γ¿» ß ¿¼Ñ¡Ñ¼ TREEPTR ¼«ªÑΓ «¬áºáΓ∞-
  1262.  ß∩ í«½ÑÑ πñ«í¡δ¼ ñ½∩ ó«ß»α¿∩Γ¿∩, τѼ Γ¿», ¬«Γ«αδ⌐ «»¿ßá¡
  1263.  Γ«½∞¬« ¬á¬ π¬áºáΓѽ∞ ß½«ª¡«⌐ ßΓαπ¬Γπαδ.
  1264.  ê ¡á¬«¡Ñµ, óßÑúñá ßπΘÑßΓóπÑΓ óÑα«∩Γ¡«ßΓ∞, τΓ« ó íπñπΘѼ ¬«¼-
  1265.  »¿½∩Γ«α ¿½¿ ¡Ñ¬«Γ«αá∩ ñαπúá∩ »α«úαá¼¼á, Γá¬á∩ ¬á¬ LINT, ß¼«-
  1266.  ªÑΓ ¿ß»«½∞º«óáΓ∞ ß«ñÑαªáΘπεß∩ ó «»¿ßá¡¿∩σ TYPEDEF ¿¡Σ«α¼áµ¿ε
  1267.  ñ½∩ »α«óÑñÑ¡¿∩ ¡Ñ¬«Γ«α«⌐ ñ«»«½¡¿Γѽ∞¡«⌐ »α«óÑન »α«úαá¼¼δ.
  1268.