home *** CD-ROM | disk | FTP | other *** search
/ For Beginners & Professional Hackers / cd.iso / docum / c.doc / 07.prn < prev    next >
Encoding:
Text File  |  1990-12-05  |  90.5 KB  |  3,061 lines

  1.                                   âïÇéÇ 7                     -- 1 --
  2.                                   -------
  3.  
  4.                            êìÆàÉÅÉàÆÇÆÄÉ¢ ƒç¢èÇ.
  5.      -----------------------------------------------------------------
  6.  
  7.            éδ ¬«úñá-¡¿íπñ∞  σ«Γѽ¿ ß«ºñáΓ∞ ßó«⌐ ∩ºδ¬ »α«úαá¼¼¿α«óá¡¿∩?
  8.      ü«½∞Φ¿¡ßΓó«  »α«úαá¼¼¿ßΓ«ó  »α¿ºδóáεΓ  ¬  »«¿ß¬π  ¿ñÑ¿  ß«ºñá¡¿∩,
  9.      π»αáó½Ñ¡¿∩  ¿ ¼«ñ¿Σ¿¬áµ¿¿ ßó«¿σ ∩ºδ¬«ó »α«úαá¼¼¿α«óá¡¿∩.  Äñ¡á¬«,
  10.      ½¿Φ∞ ¡Ñ¼¡«ú¿Ñ »α«úαá¼¼¿ßΓδ ¼«úπΓ ½Ñú¬«  ¿  ¡Ñ»α¿¡πªñÑ¡¡«  ß«ºñáΓ∞
  11.      ∩ºδ¬  »α«úαá¼¼¿α«óá¡¿∩.  æ«ºñá¡¿Ñ  »«½¡«ú«  ¬«¼»¿½∩Γ«αá  ∩ó½∩ÑΓß∩
  12.      ¼¡«ú««í∩ºδóáεΘÑ⌐ ºáñáτÑ⌐,  ¡« ú«αáºñ« »α«ΘÑ ß«ºñáΓ∞ ¿¡ΓÑα»αÑΓáΓ«α
  13.      ∩ºδ¬á.  îÑΓ«ñδ,  ¿ß»«½∞ºπѼδÑ  ñ½∩ ß«ºñá¡¿∩ ¿ΓÑα»αÑΓáΓ«α«ó ∩ºδ¬á,
  14.      ¿ºπτáεΓß∩ αÑñ¬« ¿½¿ ¿ºπτáεΓß∩ ñ«ó«½∞¡« áíßΓαá¬Γ¡«.  é φΓ«⌐  ú½áóÑ
  15.      ¡á  »αá¬Γ¿τÑ߬¿σ »α¿¼Ñαáσ óδ íπñÑΓÑ ¿ºπτáΓ∞ ßѬαÑΓδ ¿¡ΓÑα»αÑΓᵿ¿
  16.      ∩ºδ¬á ¿ úαá¼¼áΓ¿τÑ߬«ú« αáºí«αá óδαáªÑ¡¿⌐.
  17.  
  18.           ê¡ΓÑα»αÑΓáΓ«αδ óáª¡δ  »«   ΓαѼ   «τÑ¡∞   óáª¡δ¼   »α¿τ¿¡á¼.
  19.      é«-»Ñαóδσ,  «¡¿  ¼«úπΓ  «íÑß»Ñτ¿óáΓ∞  πñ«í¡πε ¿¡ΓÑαá¬Γ¿ó¡πε ßαÑñπ
  20.      (¬á¬ ñ«¬áºáΓѽ∞ßΓó« -  ¿¡ΓÑα»αÑΓáΓ«α  ßΓá¡ñáαΓ¡«ú«  ∩ºδ¬á  BASIC,
  21.      ¬«Γ«α묨  ß¡áíªáεΓß∩ í«½∞Φ¿¡ßΓó« »Ñαß«¡á½∞¡δ󠬫¼»∞ΓÑα«ó). î¡«ú¿Ñ
  22.      »«½∞º«óáΓѽ¿-¡«ó¿τ¬¿  ¡áσ«ñ∩Γ,  τΓ«  ¿¡ΓÑαá¬Γ¿ó¡á∩  ßαÑñá   í«½ÑÑ
  23.      πñ«í¡á,   τѼ   ¬«¼»¿½∩Γ«α.   é«-óΓ«αδσ,   ¿¡ΓÑα»αÑΓáΓ«αδ   ∩ºδ¬á
  24.      «íÑß»Ñτ¿óáεΓ »αÑó«ßσ«ñ¡δÑ ¿¡ΓÑαá¬Γ¿ó¡δÑ  «Γ½áñ«τ¡δÑ  ó«º¼«ª¡«ßΓ¿.
  25.      äáªÑ óÑΓÑαá¡δ-»α«úαá¼¼¿ßΓδ »α¿ «Γ½áñ¬Ñ Γαπñ¡δσ »α«úαá¼¼ »α¿íÑúáεΓ
  26.      ¬ »«¼«Θ¿ ¿¡ΓÑα»αÑΓáΓ«αá ∩ºδ¬á,  »«Γ«¼π τΓ« «¡ »«ºó«½∩ÑΓ ñ¿¡á¼¿τ¡«
  27.      πßΓá¡áó½¿óáΓ∞   º¡áτÑ¡¿∩   »ÑαѼѡ¡δσ   ¿   πß½«ó¿⌐.   é-ΓαÑΓ∞¿σ,
  28.      í«½∞Φ¿¡ßΓó« ∩ºδ¬«ó ºá»α«ß«ó  ¬  íáºÑ  ñá¡¡δσ  αáí«ΓáεΓ  ó  αѪ¿¼Ñ
  29.      ¿¡ΓÑα»αÑΓᵿ¿.
  30.  
  31.           é φΓ«⌐ ú½áóÑ íπñÑΓ αáºαáí«Γá¡ ¿¡ΓÑα»αÑΓáΓ«α ñ½∩ »«ñ¼¡«ªÑßΓóá
  32.      ∩ºδ¬á BASIC,  ¬«Γ«αδ⌐ ÑΘÑ ¡áºδóáεΓ "SMALL  BASIC".  BASIC  óδíαá¡
  33.      ó¼ÑßΓ«  C¿,  »«Γ«¼π τΓ« BASIC ½ÑúτÑ ¿¡ΓÑα»αÑΓ¿απÑΓß∩,  τѼ C¿ ¿½¿
  34.      ñαπú«⌐ ßΓαπ¬Γπα¡δ⌐ ∩ºδ¬.  ê¡ΓÑα»αÑΓáΓ«α ñ½∩  ßΓαπ¬Γπα¡«ú«  ∩ºδ¬á,
  35.      Γᬫú«  ¬á¬  C¿  í«½ÑÑ  ΓαπñÑ¡,  τѼ  ñ½∩  BASIC ¿º-ºá áóΓ«¡«¼¡δσ
  36.      Σπ¡¬µ¿⌐   ß   ½«¬á½∞¡δ¼¿   »ÑαѼѡ¡δ¼¿,   ¬«Γ«αδÑ    «íÑß»Ñτ¿óáεΓ
  37.      ¿¡ΓÑα»αÑΓáΓ«απ    ¼¡«ú«º¡áτ¡«ßΓ∞.    Åα¿¡µ¿»δ,   ¿ß»«½∞ºπѼδÑ   ó
  38.      ¿¡ΓÑα»αÑΓáΓ«αÑ BASIC,  »α¿¼Ñ¡¿¼δ ¿ ñ½∩ ñαπú¿σ ∩ºδ¬«ó, ¿ óδ ¼«ªÑΓÑ
  39.      ¿ß»«½∞º«óáΓ∞  ¡á»¿ßá¡¡δÑ  »α«úαá¼¼δ  ó  ¬áτÑßΓóÑ «Γ»αáó¡«⌐ Γ«τ¬¿.
  40.      ÅαѪñÑ,  τѼ ¡áτáΓ∞ αáí«Γπ,  ¡Ñ«íσ«ñ¿¼« ¿ºπτ¿Γ∞ ßπΘ¡«ßΓ∞ ∩ºδ¬«ó«⌐
  41.      ¿¡ΓÑα»αÑΓᵿ¿,  «ß«íÑ¡¡«  »ÑαÑñ ΓѼ,  ¬á¬ íαáΓ∞ß∩ ºá ¿¡ΓÑα»ÑΓᵿε
  42.      Γᬫú« ß½«ª¡«ú« ∩ºδ¬á,  ¬á¬ C¿.  àß½¿  óδ  ¡Ñ  º¡áÑΓÑ  BASIC,  ¡Ñ
  43.      íÑß»«¬«⌐ΓÑß∞, ¬«¼á¡ñδ ¿ß»«½∞ºπѼδÑ ó SMALL BASIC «τÑ¡∞ ½Ñú¬¿Ñ ñ½∩
  44.      »«¡¿¼á¡¿∩.
  45.  
  46.           îδ ¡áτ¿¡áѼ ß ßÑαñµá ½εí«ú«  ¿¡ΓÑα»αÑΓáΓ«αá: ß¿¡Γá¬ß¿τÑ߬«ú«
  47.      á¡á½¿ºáΓ«αá óδαáªÑ¡¿⌐.
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  61. â½áóá VII                                                    -- 2 --
  62.  
  63.  
  64.                       æêìÆÇèæêùàæèêë ÉÇçüÄÉ é¢ÉÇåàìêë
  65.      -----------------------------------------------------------------
  66.  
  67.           ìá¿í«½ÑÑ ó᪡«⌐   τáßΓ∞ε   ¿¡ΓÑα»αÑΓáΓ«αá   ∩ºδ¬á   ∩ó½∩ÑΓß∩
  68.      ß¿¡Γá¬Γ¿τÑ߬¿⌐ á¡á½¿ºáΓ«α óδαáªÑ¡¿⌐, ¬«Γ«αδ⌐ »αÑ«íαáºπÑΓ τ¿ß½«óδÑ
  69.      óδαáªÑ¡¿∩,  ΓᬿѠ¬á¬ (10-X)/23,  ó Γá¬πε Σ«α¼π,  τΓ«íδ ¬«¼»∞εΓÑα
  70.      ¼«ú  »«¡∩Γ∞  ÑÑ  ¿ óδτ¿ß½¿Γ∞.  é ¬¡¿úÑ »« ∩ºδ¬π C¿:  The Complete
  71.      Reference   (Osborne/McGraw-uill,   1987)   óßΓπ»¿Γѽ∞¡á∩   ú½áóá
  72.      »«ßó∩Θѡᠠ߿¡Γá¬ß¿τÑ߬«¼π  á¡á½¿ºπ óδαáªÑ¡¿⌐.  Å«ñ«í¡«ú« ªÑ α«ñá
  73.      ß¿¡Γá¬ß¿τÑ߬¿⌐ á¡á½¿º,  «ß¡«óá¡¡δ⌐  ¡á  »α¿¡µ¿»áσ,  ¿º½«ªÑ¡¡δσ  ó
  74.      óδΦÑπ»«¼∩¡πΓ«⌐  ¬¡¿úÑ,  (»αáóñá,  ß ¡Ñí«½∞Φ¿¼¿ ¿º¼Ñ¡Ñ¡¿∩¼¿) íπñÑΓ
  75.      ¿ß»«½∞º«óáΓ∞ß∩ ñ½∩ »«ßΓα«Ñ¡¿∩ ¿¡ΓÑα»αÑΓáΓ«αá SMALL BASIC ó ñá¡¡«⌐
  76.      ú½áóÑ  ¡áΦÑ⌐  ¬¡¿ú¿.  (Æá¬  ¬á¬ φΓá ú½áóá ß«ñÑαª¿Γ Γ«½∞¬« ¬αáΓ¬¿Ñ
  77.      ßóÑñÑ¡¿∩  «  ß¿¡Γá¬ß¿τÑ߬«¼  á¡á½¿ºÑ  óδαáªÑ¡¿⌐,  Γ«  ñ½∩   í«½ÑÑ
  78.      ñÑΓá½∞¡«ú«  ¿ºπτÑ¡¿∩  φΓ«⌐  »α«í½Ñ¼δ  ß«óÑΓπѼ  óá¼  «íαáΓ¿Γ∞ß∩ ¬
  79.      ¿ßΓ«τ¡¿¬π: The Compelete Reference.
  80.  
  81.           æ¿¡Γá¬ß¿τÑ߬¿⌐ á¡á½¿º óδαáªÑ¡¿⌐  ∩ó½∩ÑΓß∩  ñ«ó«½∞¡«  ß½«ª¡«⌐
  82.      ºáñáτÑ⌐,  «ñ¡á¬«  ó ¡Ñ¬«Γ«αδσ ß½πτá∩σ «¡á «í½ÑúτáÑΓß∩ ΓѼ,  τΓ« ó
  83.      »α«µÑßßÑ ß¿¡Γá¬ß¿τÑ߬«ú« á¡á½¿ºá  ¿ß»«½∞ºπεΓß∩  ñ«ó«½∞¡«  ßΓα«ú¿Ñ
  84.      »αáó¿½á  á½úÑíαδ.  æ¿¡Γá¬ß¿τÑ߬¿⌐  á¡á½¿ºáΓ«α,  «»¿ßá¡¡δ⌐  ó φΓ«⌐
  85.      ú½áóÑ,  ó «íΘѼ ¼«ªÑΓ  íδΓ∞  ¬½áßß¿Σ¿µ¿α«óá¡  ¬á¬  ß¿¡Γá¬ß¿τÑ߬¿⌐
  86.      á¡á½¿ºáΓ«α αѬπαß¿ó¡«ú« ß»π߬á.
  87.  
  88.           ÅÑαÑñ ΓѼ,    ¬á¬    »α¿ßΓπ»¿Γ∞   ¬   ñÑΓá½∞¡«⌐   αáºαáí«Γ¬Ñ
  89.      ß¿¡Γá¬ß¿τÑ߬«ú« á¡á½¿ºáΓ«αá,  óδ  ñ«½ª¡δ  ¿¼ÑΓ∞  »αÑñßΓáó½Ñ¡¿Ñ  «
  90.      óδαáªÑ¡¿∩σ.  Å«φΓ«¼π ¡áΦ ß½ÑñπεΘ¿⌐ »áαáúαáΣ »«ßó∩ΘÑ¡ ¿¼Ñ¡¡« φΓ«¼π
  91.      ó«»α«ßπ.
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  121. â½áóá VII                                                    -- 3 --
  122.  
  123.  
  124.                                  é¢ÉÇåàìêƒ
  125.      -----------------------------------------------------------------
  126.  
  127.           ò«Γ∩ óδαáªÑ¡¿∩  ¼«úπΓ  íδΓ∞  ß«ßΓáó½Ñ¡δ  ó »α¿¡µ¿»Ñ ¿º ½εíδσ
  128.      Γ¿»«ó ñá¡¡δσ, ó φΓ«⌐ ú½áóÑ ¼δ íπñѼ ¿¼ÑΓ∞ ñѽ« Γ«½∞¬« ß τ¿ß½«ó묨
  129.      óδαáªÑ¡¿∩¼¿.   üπñѼ   ßτ¿ΓáΓ∞,  τΓ«  ñ½∩  ¡áΦ¿σ  µÑ½Ñ⌐  τ¿ß½«óδÑ
  130.      óδαáªÑ¡¿∩ ¼«úπΓ ßΓα«¿Γß∩ ¿º ß½ÑñπεΘ¿σ φ½Ñ¼Ñ¡Γ«ó:
  131.  
  132.            - τ¿ß½á
  133.            - «»ÑαáΓ«αδ  + - / * ^ % = () <> ; ,
  134.            - ß¬«í¬¿
  135.            - »ÑαѼѡ¡δÑ
  136.  
  137.           æ¿¼ó«½ '^'  «º¡áτáÑΓ φ¬ß»«¡Ñ¡Γπ,  á  ß¿¼ó«½ '=' ¿ß»«½∞ºπÑΓß∩
  138.      ¬á¬ «»ÑαáΓ«α »α¿ßóá¿óá¡¿∩, á ΓᬪѠ¬á¬ º¡á¬ αáóÑ¡ßΓóá ó «»Ñαᵿ∩σ
  139.      ßαáó¡Ñ¡¿∩.    ¥½Ñ¼Ñ¡Γδ  óδαáªÑ¡¿∩  ¼«ª¡«  ¬«¼í¿¡¿α«óáΓ∞  ß«ú½áß¡«
  140.      »αáó¿½á¼ á½úÑíαδ.
  141.  
  142.           é«Γ ¡Ñ¬«Γ«αδÑ »α¿¼Ñαδ óδαáªÑ¡¿⌐:
  143.  
  144.       7-8 (100-5)*14/6
  145.       a+b-c
  146.       10^5
  147.       a=7-b
  148.  
  149.           æ¿¼ó«½δ '=', '>', '<', ',', ';' ∩ó½∩εΓß∩ «»ÑαáΓ«αἿ, «¡¿ ¡Ñ
  150.      ¼«úπΓ ¿ß»«½∞º«óáΓß∩ ó óδαáªÑ¡¿∩σ Σπ¡¬µ¿⌐ ¿ ¬«¡ßΓαπ¬µ¿∩σ  Γ¿»á IF,
  151.      PRINT ¿ «»ÑαáΓ«αáσ »α¿ßóá¿óá¡¿∩.  (çá¼ÑΓ¿¼,  τΓ« á¡á½¿ºáΓ«α ∩ºδ¬á
  152.      C¿  ñ«½ªÑ¡  «íαáíáΓδóáΓ∞  ¿  φΓ¿   «»ÑαáΓ«αδ   ó   αẽ¿τ¡δσ   ¿σ
  153.      ¬«¼í¿¡áµ¿∩σ).
  154.  
  155.           ùΓ« ¬áßáÑΓß∩   ∩ºδ¬á   BASIC,   ßΓáαΦ¿¡ßΓó«   «»ÑαáΓ«α«ó  ¡Ñ
  156.      «»αÑñѽѡ«.   é   »α«µÑßßÑ   αáí«Γδ   ß¿¡Γá¬ß¿τÑ߬¿⌐   á¡á½¿ºáΓ«α
  157.      »α¿ßóá¿óáÑΓ «»ÑαáΓ«αá¼ ß½ÑñπεΘ¿Ñ »α¿«α¿ΓÑΓδ:
  158.  
  159.          óδßΦ¿⌐      ()
  160.                      ^
  161.                      *  /  %
  162.                      +  -
  163.          ¡¿ºΦ¿⌐      =
  164.  
  165.           Ä»ÑαáΓ«αδ αáó¡«ú« »α¿«α¿ΓÑΓá óδ»«½¡∩εΓß∩ ß½Ñóá ¡á»αáó«.
  166.  
  167.           æ¿¡Γá¬ß¿ß ∩ºδ¬á SMALL BASIC »αÑñ»«½áúáÑΓ, τΓ« óßÑ »ÑαѼѡ¡δÑ
  168.      «í«º¡áτáεΓß∩ «ñ¡«⌐ íπ¬ó«⌐.  ¥Γ« »«ºó«½∩ÑΓ «»Ñα¿α«óáΓ∞ ó »α«úαá¼¼Ñ
  169.      ñóáñµáΓ¿ ΦÑßΓ∞ε   »ÑαѼѡ¡δ¼¿   (íπ¬óδ   «Γ   A   ñ«   Z).   ò«Γ∩
  170.      ¿¡ΓÑα»αÑΓáΓ«αδ ∩ºδ¬á  BASIC  »«ññÑনóáεΓ  «íδτ¡«  í«½∞ΦÑÑ  τ¿ß½«
  171.      ß¿¼ó«½«ó  ó  «»αÑñѽѡ¿¿ »ÑαѼѡ¡«⌐,  (¡á»α¿¼Ñα,  »ÑαѼѡ¡δÑ Γ¿»á
  172.      ò27),  ¡« ñ½∩ »α«ßΓ«Γδ ¿º½«ªÑ¡¿∩  «ß¡«ó¡δσ  »α¿¡µ¿»«ó  »«ßΓα«Ñ¡¿∩
  173.      ¿¡ΓÑα»αÑΓáΓ«α«ó  ¡áΦ ¿¡ΓÑα»αÑΓáΓ«α ∩ºδ¬á SMALL BASIC φΓ«ú« ñѽáΓ∞
  174.      ¡Ñ íπñÑΓ. üπñѼ ßτ¿ΓáΓ∞ ΓᬪÑ, τΓ« »ÑαѼѡ¡δÑ αạδσ αÑú¿ßΓα«ó ¡Ñ
  175.      «Γ½¿τáεΓß∩ ñαπú «Γ ñαπúá ¿,  »«φΓ«¼π,  »ÑαѼѡ¡δÑ "a" ¿ "A" íπñπΓ
  176.      Γαá¬Γ«óáΓ∞ß∩ ¬á¬ «ñ¡á ¿ Γá  ªÑ  »ÑαѼѡ¡á∩.  ôß½«ó¿¼ß∩,  τΓ«  óßÑ
  177.      τ¿ß½á ∩ó½∩εΓß∩ µÑ½δ¼¿,  σ«Γ∩ óδ íѺ «ß«í«ú« Γαπñá ¼«ªÑΓÑ ¡á»¿ßáΓ∞
  178.  
  179.  
  180.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  181. â½áóá VII                                                    -- 4 --
  182.  
  183.  
  184.      »α«úαá¼¼δ  ñ½∩  ¼á¡¿»π½¿α«óá¡¿∩  ñαπú¿¼¿   Γ¿»á¼¿   τ¿ßѽ.   ò«Γ∩
  185.      ß¿¼ó«½∞¡δÑ  »ÑαѼѡ¡δÑ  ó ¡áΦÑ⌐ óÑαß¿¿ ∩ºδ¬á ¿ ¡Ñ »«ññÑনóáεΓß∩,
  186.      íπñѼ  ßτ¿ΓáΓ∞,  τΓ«  ó«º¼«ªÑ¡  óδó«ñ   «úαá¡¿τÑ¡¡δσ   ß¿¼ó«½∞¡δσ
  187.      ¬«¡ßΓá¡Γ ¡á φ¬αá¡ ó ó¿ñÑ αẽ¿τ¡δσ ß««íΘÑ¡¿⌐.
  188.  
  189.           êΓá¬, íπñѼ  ßΓα«¿Γ∞  ß¿¡Γá¬ß¿τÑ߬¿⌐  á¡á½¿ºáΓ«α  ¿ßσ«ñ∩  ¿º
  190.      »ÑαÑτ¿ß½Ñ¡¡δσ óδΦÑ ñ«»πΘÑ¡¿⌐.  ÆÑ»Ñα∞  ñáóá⌐ΓÑ  αáßß¼«Γα¿¼  ΓᬫÑ
  191.      íẫó«Ñ »«¡∩Γ¿Ñ ΓÑ«α¿¿ ß¿¡Γá¬ß¿τÑ߬«ú« á¡á½¿ºá ¬á¬ ½Ñ¬ßѼá.
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211.  
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  241. â½áóá VII                                                    -- 5 --
  242.  
  243.  
  244.                               ïàèæàî¢
  245.      -----------------------------------------------------------------
  246.  
  247.           ÅÑαÑñ ΓѼ,   ¬á¬   »«ßΓα«¿Γ∞   ß¿¡Γá¬ß¿τÑ߬¿⌐    á¡á½¿ºáΓ«α,
  248.      αáºí¿αáεΘ¿⌐   º¡áτÑ¡¿∩   óδαáªÑ¡¿⌐,  óδ  ñ«½ª¡δ  ¿¼ÑΓ∞  ¡Ñ߬«½∞¬«
  249.      óáα¿á¡Γ«ó αáºí¿Ñ¡¿∩ ßΓ᫬¿, ß«ñÑαªáΘÑ⌐ óδαáªÑ¡¿Ñ, ¡á ß«ßΓáó½∩εΘ¿Ñ
  250.      τáßΓ¿. ìá»α¿¼Ñα, óδαáªÑ¡¿Ñ
  251.  
  252.                                  Ç*é-(W+10)
  253.  
  254.      ß«ñÑαª¿Γ  ¬«¼»«¡Ñ¡Γδ  "Ç",  "*",  "é", "-", "(", "W", "+", "10" ¿
  255.      ")". èáªñδ⌐  ¬«¼»«¡Ñ¡Γ  »αÑñßΓáó½∩ÑΓ  ß«í«⌐   ¡Ññѽ¿¼δ⌐   φ½Ñ¼Ñ¡Γ
  256.      óδαáªÑ¡¿∩.   Æá¬«⌐  ¬«¼»«¡Ñ¡Γ  ¿½¿  ¡Ñºáó¿ß¿¼á∩  τáßΓ∞  óδαáªÑ¡¿∩
  257.      ¡áºδóáÑΓß∩ ½Ñ¬ßѼ«⌐.  öπ¡¬µ¿∩, αáºí¿óáεΘá∩ óδαáªÑ¡¿Ñ ¡á ß«ßΓáó¡δÑ
  258.      τáßΓ¿,  ñ«½ª¡á  αÑΦáΓ∞ τÑΓδαÑ ºáñáτ¿:  (1) ¿ú¡«α¿α«óáΓ∞ »α«íÑ½δ ¿
  259.      ß¿¼ó«½δ Γáíπ½∩µ¿¿,  (2) ¿ºó½Ñ¬áΓ∞ ¬áªñπε ½Ñ¬ßÑ¼π ¿º  ΓѬßΓá,  (3)
  260.      Ñß½¿  ¡Ñ«íσ«ñ¿¼«,  »αÑ«íαẫóδóáΓ∞  ½Ñ¬ßѼπ ó« ó¡πΓαÑ¡¡¿⌐ Σ«α¼áΓ,
  261.      (4) «»αÑñѽ∩Γ∞ Γ¿» ½Ñ¬ßѼδ.
  262.  
  263.           èáªñá∩ ½Ñ¬ßѼᠿ¼ÑÑΓ  ñóá  Σ«α¼áΓá:  ó¡ÑΦ¡¿⌐  ¿  ó¡πΓαÑ¡¡¿⌐.
  264.      é¡ÑΦ¡¿⌐  Σ«α¼áΓ  -  φΓ«  ß¿¼ó«½∞¡á∩ ßΓ᫬á,  ß »«¼«Θ∞ε ¬«Γ«α«⌐ óδ
  265.      »¿Φ¿ΓÑ »α«úαá¼¼δ ¡á ¬á¬«¼-½¿í« ∩ºδ¬Ñ  »α«úαá¼¼¿α«óá¡¿∩. ìá»α¿¼Ñα,
  266.      "PRINT"  -  φΓ«  ó¡ÑΦ¡∩∩  Σ«α¼á ¬«¼á¡ñδ PRINT ∩ºδ¬á BASIC.  î«ª¡«
  267.      »«ßΓα«¿Γ∞  ¿¡ΓÑα»αÑΓáΓ«α   ¿º   αáßτÑΓá,   τΓ«   ¬áªñá∩   ½Ñ¬ßѼá
  268.      ¿ß»«½∞ºπÑΓß∩ ó« ó¡ÑΦ¡Ñ¼ Σ«α¼áΓÑ, ¡« φΓ« Γ¿»¿τ¡«Ñ αÑΦÑ¡¿Ñ »α«í½Ñ¼δ
  269.      »α«úαá¼¼¿ßΓ«¼-¡Ñ»α«ΣÑßß¿«¡á½«¼,  ¬«Γ«αδ⌐  ½¿Φ∞  ñóá  τáßá   ¡áºáñ
  270.      «Γ«αóá½ß∩   «Γ  ¼áΓÑα¿¡«⌐  εí¬¿  ¿  τáß  ¡áºáñ  πó¿ñѽ  ¡áßΓ«∩Θ¿⌐
  271.      ¬«¼»∞εΓÑα.  ìáßΓ«∩Θ¿Ñ ¼πªτ¿¡δ «α¿Ñ¡Γ¿απεΓß∩ ¡á ó¡πΓαÑ¡¡¿⌐  Σ«α¼áΓ
  272.      ½Ñ¬ßѼδ, ¬«Γ«αδ⌐   ∩ó½∩ÑΓß∩   »α«ßΓ«   τ¿ß½«¼,   ¿  αáºαáíáΓδóáεΓ
  273.      ¿¡ΓÑα»αÑΓáΓ«αδ ¿ßσ«ñ∩ ¿º φΓ«⌐ »α«ΣÑßß¿«¡á½∞¡«⌐  Γ«τ¬¿  ºαÑ¡¿∩  ¡á
  274.      »α«í½Ñ¼π.  Å«∩ß¡¿¼  φëà »«ñσ«ñ.  ìá»α¿¼Ñα,  ¬«¼á¡ñá PRINT ¼«ªÑΓ
  275.      ¿¼ÑΓ∞ »«α∩ñ¬«óδ⌐ ó¡πΓαÑ¡¡¿⌐ ¡«¼Ñα 1,  ¬«¼á¡ñá INPUT -  2  ¿  Γ.ñ.
  276.      ÅαÑ¿¼πΘÑßΓó«   ó¡πΓαÑ¡¡Ñú«   Σ«α¼áΓá   ºá¬½ετáÑΓß∩   ó  Γ«¼,  τΓ«
  277.      »α«úαá¼¼δ,  «íαáíáΓδóáεΘ¿Ñ τ¿ß½á,  í«½ÑÑ  íδßΓα«ñÑ⌐ßΓóπεΘ¿Ñ,  τѼ
  278.      »α«úαá¼¼δ,  «íαáíáΓδóáεΘ¿Ñ ßΓ᫬¿.  ä½∩ αÑ὿ºáµ¿¿ Γᬫú« »«ñσ«ñá
  279.      ¡Ñ«íσ«ñ¿¼á Σπ¡¬µ¿∩,  ¬«Γ«αá∩  íÑαÑΓ  ¿º  óσ«ñ¡«ú«  »«Γ«¬á  ñá¡¡δσ
  280.      «τÑαÑñ¡πε  ½Ñ¬ßÑ¼π  ¿  »αÑ«íαáºπÑΓ  ÑÑ  ¿º  ó¡ÑΦ¡Ñú«  Σ«α¼áΓá  ó«
  281.      ó¡πΓαÑ¡¡¿⌐.  Å«¼¡¿ΓÑ,  τΓ« ¡Ñ óßÑ ½Ñ¬ßÑ¼δ ¿¼ÑεΓ  αạδÑ  Σ«α¼áΓδ.
  282.      ìá»α¿¼Ñα,  «»ÑαáΓ«αδ  ¡Ñ »«ñ½ÑªáΓ »αÑ«íαẫóá¡¿ε »«Γ«¼π,  τΓ« «¡¿
  283.      ¼«úπΓ  Γαá¬Γ«óáΓ∞ß∩  ¬á¬  ß¿¼ó«½δ  ¿½¿  τ¿ß½á  ó  ßó«¿σ   ó¡ÑΦ¡¿σ
  284.      Σ«α¼áΓáσ.
  285.  
  286.           ÄτÑ¡∞ ó᪡«  º¡áΓ∞,  ¬á¬«⌐ Γ¿» ½Ñ¬ßѼδ ó«ºóαáΘÑ¡.  ìá»α¿¼Ñα,
  287.      á¡á½¿ºáΓ«απ óδαáªÑ¡¿⌐ ¡Ñ«íσ«ñ¿¼«  º¡áΓ∞,  ∩ó½∩ÑΓß∩  ½¿  ß½ÑñπεΘá∩
  288.      ½Ñ¬ßѼá τ¿ß½«¼,  «»ÑαáΓ«α«¼ ¿½¿ »ÑαѼѡ¡«⌐. ç¡áτÑ¡¿Ñ Γ¿»á ½Ñ¬ßѼδ
  289.      ñ½∩  »α«µÑßßá  á¡á½¿ºá  ó  µÑ½«¼  ßΓá¡ÑΓ  «τÑó¿ñ¡δ¼,   ¬«úñá   óδ
  290.      »α¿ßΓπ»¿ΓÑ ¡Ñ»«ßαÑñßΓóÑ¡¡« ¬ αáºαáí«Γ¬Ñ ¿¡ΓÑα»αÑΓáΓ«αá.
  291.  
  292.           öπ¡¬µ¿∩, ¬«Γ«αá∩  ó«ºóαáΘáÑΓ  ß½ÑñπεΘπε ½Ñ¬ßѼπ ó óδαáªÑ¡¿¿,
  293.      ¡áºδóáÑΓß∩ get_token( ).  Ä¡á αáí«ΓáÑΓ ¿º  αáßτÑΓá  Γ«ú«,  τΓ«  ó
  294.      ∩ºδ¬Ñ   SMALL   BASIC,   »α«úαἼᠠ σαá¡¿Γß∩  ¬á¬  «ñ¡á  ßΓ᫬á,
  295.      «úαá¡¿τÑ¡¡á∩ ó ¬«¡µÑ  ß¿¼ó«½«¼ ºáóÑαΦÑ¡¿∩  ßΓ᫬¿  (\0).  öπ¡¬µ¿∩
  296.      get_token() ß¬á¡¿απÑΓ   ΓѬßΓ  »α«úαá¼¼δ,  á¡á½¿º¿απ∩  »«  «ñ¡«¼π
  297.      ß¿¼ó«½π,  »α¿ φΓ«¼  ú½«íá½∞¡δ⌐  π¬áºáΓѽ∞  á¡á½¿ºáΓ«αá  »α¿¡¿¼áÑΓ
  298.  
  299.  
  300.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  301. â½áóá VII                                                    -- 6 --
  302.  
  303.  
  304.      º¡áτÑ¡¿Ñ áñαÑßá «τÑαÑñ¡«⌐ ßτ¿Γá¡«⌐ ½Ñ¬ßѼδ. é óÑαß¿¿ get_token(),
  305.      »α¿óÑñÑ¡¡«⌐ ¡¿ªÑ,  φëàπ¬áºáΓѽ∞ ¡áºδóáÑΓß∩ prog.  Æá¬ ¬á¬  prog
  306.      ∩ó½∩ÑΓß∩  ú½«íá½∞¡«⌐  »ÑαѼѡ¡«⌐,  Γ« Ñú« º¡áτÑ¡¿Ñ ¼Ñªñπ ó맮óἿ
  307.      get_token ß«σαá¡∩ÑΓß∩ ¿ »«ºó«½∩ÑΓ  ñαπú¿¼  Σπ¡¬µ¿∩¼  ¿ß»«½∞º«óáΓ∞
  308.      Ñú«.
  309.  
  310.           Ç¡á½¿ºáΓ«α, αáºαáíáΓδóáѼδ⌐  ó φΓ«⌐ ú½áóÑ,  ¿ß»«½∞ºπÑΓ ΦÑßΓ∞
  311.      Γ¿»«ó ½Ñ¬ßѼ:  DELIMITER,  VARIABLE,  NUMBER,  COMMAND,  STRING ¿
  312.      QUOTE   (αáºñѽ¿Γѽ∞,   »ÑαѼѡ¡á∩,   τ¿ß½«,  ¬«¼á¡ñá,  ßΓα«¬á  ¿
  313.      ¬áóδτ¬¿). Æ¿» VARIABLE »α¿»¿ßδóáÑΓß∩  »ÑαѼѡ¡δ¼.  Æ¿»  DELIMITER
  314.      »α¿»¿ßδóáÑΓß∩ «»ÑαáΓ«αá¼ ¿ ß¬«í¬á¼.  Æ¿» NUMBER - ñ½∩ τ¿ßѽ.  Æ¿»
  315.      COMMAND - ñ½∩ ¬«¼á¡ñ  ∩ºδ¬á  SMALL  BASIC.  Æ¿»  STRING  óαѼѡ¡«
  316.      ¿ß»«½∞ºπÑΓß∩  ó¡πΓα¿  get_token()  »«¬á ¿ñÑΓ αáºí«α ½Ñ¬ßѼδ.  Æ¿»
  317.      QUOTE  ¿ß»«½∞ºπÑΓß∩  »α¿  «»αÑñѽѡ¿¿   ¬áóδτѬ,   «úαá¡¿τ¿óáεΘ¿σ
  318.      ßΓ᫬π.  â½«íá½∞¡á∩  »ÑαѼѡ¡á∩  token_type ß«ñÑαª¿Γ Γ¿» ½Ñ¬ßѼδ.
  319.      é¡πΓαÑ¡¡ÑÑ  »αÑñßΓáó½Ñ¡¿Ñ   ½Ñ¬ßÑ¼δ   »«¼ÑΘáÑΓß∩   ó   ú½«íá½∞¡πε
  320.      »ÑαѼѡ¡πε tok.
  321.  
  322.           ì¿ªÑ   »α¿óÑñѡᠠ Σπ¡¬µ¿∩    get_token().   éßÑ   «ßΓá½∞¡δÑ
  323.      ¡Ñ«íσ«ñ¿¼δÑ óß»«¼«úáΓѽ∞¡δÑ Σπ¡¬µ¿¿ ñ½∩  »«½¡«ú«  ß¿¡Γá¬ß¿τÑ߬«ú«
  324.      á¡¿½¿ºáΓ«αá íπñπΓ »α¿óÑñÑ¡δ ó φΓ«⌐ ú½áóÑ ¡Ñ¼¡«ú« »«ºªÑ.
  325.  
  326.  
  327.           #define DELIMITER  1
  328.           #define VARIABLE   2
  329.           #define NUMBER     3
  330.           #define COMMAND    4
  331.           #define STRING     5
  332.           #define QUOTE      6
  333.           #define FINISHED   10
  334.           #define EOL        9
  335.  
  336.           extern char token[80];
  337.           extern int tok, token_type;
  338.           extern char *prog;  /* æ«ñÑαª¿Γ á¡á½¿º¿απѼ«Ñ óδαáªÑ¡¿Ñ */
  339.           /* Å«½πτ¿Γ∞ ½Ñ¬ßѼπ */
  340.           get_token()
  341.           {
  342.             register char *temp;
  343.  
  344.             token_type=0; tok=0;
  345.             temp=token;
  346.  
  347.             if(*prog=='\0')  { /* è«¡Ñµ Σá⌐½á */
  348.               *token=0;
  349.               tok=FINISHED;
  350.               return(token_type=DELIMITER);
  351.              }
  352.  
  353.              while(iswhite(*prog)) ++prog;  /* »α«»π߬ »α«íѽ«ó */
  354.  
  355.              if(*prog=='\r') { /* crtl */
  356.                ++prog; ++prog;
  357.                tok= EOL; *token='\r';
  358.  
  359.  
  360.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  361. â½áóá VII                                                    -- 7 --
  362.  
  363.  
  364.                token[1]='\n';token[2]=0;
  365.                return (token_type = DELIMITER);
  366.              }
  367.  
  368.              if(strchr("+-*^/%=;(),><", *prog)) { /* αáºñѽ¿Γѽ∞ */
  369.                *temp=*prog;
  370.                prog++; /* »ÑαÑσ«ñ ¡á ß½¬ñπεΘπε »«º¿µ¿ε */
  371.                temp++;
  372.                *temp=0;
  373.                return (token_type=DELIMITER);
  374.              }
  375.  
  376.              if(*prog=='"')  { /* ßΓ᫬á ó ¬áóδτ¬áσ */
  377.               prog++;
  378.                while(*prog != '"' && *prog!='\r') *temp++=*prog++;
  379.                if(*prog=='\r') serror(1);
  380.                prog++;*temp=0;
  381.                return(token_type=QUOTE);
  382.              }
  383.  
  384.              if(isdigit(*prog)) { /* τ¿ß½« */
  385.                while(!isdelim(*prog)) *temp++=*prog++;
  386.                *temp = '\0';
  387.                return(token_type = NUMBER);
  388.              }
  389.  
  390.              if(isalpha(*prog))  { /* »ÑαѼѡ¡á∩ ¿½¿ ¬«¼á¡ñá */
  391.                while(!isdelim(*prog)) *temp++=*prog++;
  392.                token_type=STRING;
  393.              }
  394.  
  395.              *temp = '\0';
  396.       /* Åα«ß¼áΓα¿óáÑΓß∩, Ñß½¿ ßΓ᫬á ÑßΓ∞ ¬«¼á¡ñá ¿½¿ »ÑαѼѡ¡á∩ */
  397.              if(token_type==STRING) {
  398.                tok=look_up(token); /* »αÑ«íαẫóá¡¿Ñ ó« ó¡πΓαÑ¡¡¿⌐
  399.                                       Σ«α¼áΓ */
  400.                if(!tok) token_type = VARIABLE;
  401.                else token_type = COMMAND; /* φΓ« ¬«¼á¡ñá */
  402.              }
  403.              return token_type;
  404.            }
  405.  
  406.  
  407.           Å«ß¼«Γα¿ΓÑ ó¡¿¼áΓѽ∞¡« ¡á get_token().  î¡«ú¿Ñ  »α«úαá¼¼¿ßΓδ
  408.      ½εí∩Γ   »«¼ÑΘáΓ∞   »α«íÑ½δ   »ÑαÑñ   óδαáªÑ¡¿∩¼¿   ñ½∩  π½πτΦÑ¡¿∩
  409.      πñ«í«τ¿ΓáѼ«ßΓ¿ ¿ ¡áú½∩ñ¡«ßΓ¿ ßó«Ñ⌐ »α«úαá¼¼δ. ï¿ñ¿απεΘ¿Ñ »α«íѽδ
  410.      »α«»π߬áεΓß∩  ß  »«¼«Φ∞ε  Σπ¡¬µ¿¿ is_white(),  ¬«Γ«αá∩ ó«ºóαáΘáÑΓ
  411.      º¡áτÑ¡¿Ñ "¿ßΓ¿¡á" ("TRUE"),  Ñß½¿ ÑÑ áαúπ¼Ñ¡Γ  ∩ó½∩ÑΓß∩  »α«íѽ«¼
  412.      ¿½¿   ß¿¼ó«½«¼   Γáíπ½∩µ¿¿.   Å߽Ѡ  »α«»π߬ᠠ»α«íѽ«ó,  ß¬á¡Ñα,
  413.      αÑ὿ºπѼδ⌐ ß »«¼«Θ∞ε »α«úαá¼¼δ prog,  π¬áºδóáÑΓ ¡á ¬áªñ«Ñ τ¿ß½«,
  414.      »ÑαѼѡ¡πε,  ¬«¼á¡ñπ,  ß¿¼ó«½  "ó«ºóαáΓ  ¬áαÑΓ¬¿" ¿½¿ ¡«½∞,  Ñß½¿
  415.      ñ«ßΓ¿ú¡πΓ   ¬«¡Ñµ   óδαáªÑ¡¿∩   (»α«úαá¼¼δ).    àß½¿    «τÑαÑñ¡δ¼
  416.      á¡á½¿º¿απÑ¼δ¼ ß¿¼ó«½«¼ ∩ó½∩ÑΓß∩ ß¿¼ó«½ "ó«ºóαáΓ ¬áαÑΓ¬¿" (\r), Γ«
  417.      ó«ºóαáΘáÑΓß∩ º¡áτÑ¡¿Ñ  "¬«¡Ñµ  ßΓ᫬¿  »α«úαá¼¼δ"  ("EOL").  àß½¿
  418.  
  419.  
  420.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  421. â½áóá VII                                                    -- 8 --
  422.  
  423.  
  424.      «τÑαÑñ¡«⌐  ß¿¼ó«½  ∩ó½∩ÑΓß∩  «»ÑαáΓ«α«¼,  Γ«  ó ¬áτÑßΓóÑ º¡áτÑ¡¿∩
  425.      ú½«íá½∞¡«⌐ »ÑαѼѡ¡«⌐ token ó«ºóαáΘáÑΓß∩  ß««ΓóÑΓßΓóπεΘá∩ ßΓ᫬á,
  426.      »α¿ φΓ«¼ ó »ÑαѼѡ¡πε token_type »«¼ÑΘáÑΓß∩ º¡áτÑ¡¿Ñ DELIMITER. é
  427.      »α«Γ¿ó¡«¼ ß½πτáÑ »α«óÑα∩ÑΓß∩ ¡á½¿τ¿Ñ  ¬áóδτѬ.  çáΓѼ  »α«¿ßσ«ñ¿Γ
  428.      »α«óÑα¬á  ∩ó½∩ÑΓß∩  ½¿  ½Ñ¬ßѼᠠτ¿ß½«¼.  àß½¿  ½Ñ¬ßѼᠠ∩ó½∩ÑΓß∩
  429.      ß¿¼ó«½«¼,  Γ« «¡á,  ß½Ññ«óáΓѽ∞¡«,  ∩ó½∩ÑΓß∩ ¿½¿  »ÑαѼѡ¡«⌐  ¿½¿
  430.      ¬«¼á¡ñ«⌐.  öπ¡¬µ¿∩  look_up() ßαáó¡¿óáÑΓ ó¡ÑΦ¡¿⌐ Σ«α¼áΓ ½Ñ¬ßѼδ ß
  431.      Γáí½¿µÑ⌐ ½Ñ¬ßѼ,  «»αÑñѽѡ¡«⌐ »α¿ αáºαáí«Γ¬Ñ á¡á½¿ºáΓ«αá ¿, Ñß½¿
  432.      ¡áσ«ñ¿Γ  ß««ΓóÑΓßΓóπεΘÑ  º¡áτÑ¡¿Ñ  ó  ¡Ñ⌐,  ó«ºóαáΘáÑΓ ó¡πΓαÑ¡¡ÑÑ
  433.      »αÑñßΓáó½Ñ¡¿Ñ  ½Ñ¬ßÑ¼δ  (¬«¼á¡ñδ).  é  »α«Γ¿ó¡«¼  ß½πτáÑ  ½Ñ¬ßѼá
  434.      Γαá¬ΓπÑΓß∩   ¬á¬   »ÑαѼѡ¡á∩.   ê,   ¡á¬«¡Ñµ,   Ñß½¿  ß¿¼ó«½  ¡Ñ
  435.      πñ«ó½ÑΓó«α∩ÑΓ ¡¿ «ñ¡«¼π  ¿º  πß½«ó¿⌐,  »α¿óÑñÑ¡¡δσ  óδΦÑ,  Γ«  «¡
  436.      Γαá¬ΓπÑΓß∩  ¬á¬  ß¿¼ó«½ ¬«¡µá óδαáªÑ¡¿∩.  Åα¿ φΓ«¼ º¡áτÑ¡¿Ñ token
  437.      «í¡π½∩ÑΓß∩.
  438.  
  439.           ä½∩ ½πτΦÑú«  »«¡¿¼á¡¿∩  αáí«Γδ  get_token()  ¿ºπτ¿ΓÑ   Γ¿»δ,
  440.      ¬«Γ«αδÑ ó«ºóαáΘáÑΓ Σπ¡¬µ¿∩ ñ½∩ ¬áªñ«⌐ ½Ñ¬ßѼδ:
  441.  
  442.                             PRINT A+100-(B*C)/2
  443.  
  444.      --------------------------------
  445.      ïѬßѼᠠ       Æ¿» ½Ñ¬ßѼδ.
  446.  
  447.           PRINT           COMMAND
  448.           A               VARIABLE
  449.           +               DELIMITER
  450.           100             NUMBER
  451.           -               DELIMITER
  452.           (               DELIMITER
  453.           B               VARIABLE
  454.           *               DELIMITER
  455.           C               VARIABLE
  456.           )               DELIMITER
  457.           /               DELIMITER
  458.           2               NUMBER
  459.           null            DELIMITER
  460.      --------------------------------
  461.  
  462.           Å«¼¡¿ΓÑ, τΓ«  º¡áτÑ¡¿Ñ  »ÑαѼѡ¡«⌐  token  αáó¡« ¡π½ε,  Ñß½¿
  463.      ½Ñ¬ßѼá ß«ßΓ«¿Γ ¿º «ñ¡«ú« ß¿¼ó«½á.
  464.  
  465.           ìѬ«Γ«αδÑ Σπ¡¬µ¿¿  ¿¡ΓÑα»αÑΓáΓ«αá  ¡πªñáεΓß∩   ó   »«óΓ«α¡«¼
  466.      »α«ß¼«ΓαÑ  ½Ñ¬ßѼδ.  é φΓ«¼ ß½πτáÑ ½Ñ¬ßѼá ñ«½ª¡á íδΓ∞ ó«ºóαáΘÑ¡á
  467.      ó« óσ«ñ¡«⌐ »«Γ«¬. öπ¡¬µ¿∩ putback() αÑΦáÑΓ φΓπ ºáñáτπ.
  468.  
  469.       /*  é«ºóαáΘáÑΓ ½Ñ¬ßѼπ «íαáΓ¡« ó« óσ«ñ¡«⌐ »«Γ«¬ */
  470.           void putback()
  471.           {
  472.  
  473.             char *t;
  474.  
  475.             t = token;
  476.             for(; *t; t++) prog--;
  477.           }
  478.  
  479.  
  480.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  481. â½áóá VII                                                    -- 9 --
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.  
  489.  
  490.  
  491.  
  492.  
  493.  
  494.  
  495.  
  496.  
  497.  
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  541. â½áóá VII                                                    -- 10 --
  542.  
  543.  
  544.                         ÅÄɃäÄè ÅÄæÆÉÄàìꃠé¢ÉÇåàìêë
  545.      -----------------------------------------------------------------
  546.  
  547.           ê¼ÑÑΓß∩ ¼¡«ú«  óáα¿á¡Γ«ó á¡á½¿ºá ¿ óδτ¿ß½Ñ¡¿∩ óδαáªÑ¡¿⌐. ä½∩
  548.      ¿ß»«½∞º«óá¡¿∩ »«½¡«ú«  ß¿¡Γá¬ß¿τÑ߬«ú«  á¡á½¿ºáΓ«αá  αѬπαß¿ó¡«ú«
  549.      ß»π߬ᠠ ¼δ  ñ«½ª¡δ  »αÑñßΓáó¿Γ∞  óδαáªÑ¡¿Ñ  ó  ó¿ñÑ  αѬπαß¿ó¡«⌐
  550.      ßΓαπ¬Γπαδ ñá¡¡δσ.  ¥Γ« «º¡áτáÑΓ,  τΓ«  óδαáªÑ¡¿Ñ  «»αÑñѽ∩ÑΓß∩  ó
  551.      ΓÑα¼áσ   ßἫú«   ßÑí∩.   àß½¿   óδαáªÑ¡¿Ñ   ¼«ª¡«  «»αÑñѽ¿Γ∞  ß
  552.      ¿ß»«½∞º«ó᡿Ѽ Γ«½∞¬« ß¿¼ó«½«ó "+" ,"-" ,"*" ,"/"  ¿  ß¬«í«¬,  Γ«
  553.      óßÑ  óδαáªÑ¡¿∩  ¼«úπΓ  íδΓ∞ «»αÑñѽѡδ ß ¿ß»«½∞º«ó᡿Ѽ ß½ÑñπεΘ¿σ
  554.      »αáó¿½:
  555.  
  556.                   éδαáªÑ¡¿Ñ = > ÆÑα¼ [+ÆÑα¼][-ÆÑα¼]
  557.                   ÆÑα¼      = > öá¬Γ«α [*öá¬Γ«α][/öá¬Γ«α]
  558.                   öá¬Γ«α    = > ÅÑαѼѡ¡á∩, ù¿ß½« ¿½¿ (éδαáªÑ¡¿Ñ)
  559.  
  560.           ÄτÑó¿ñ¡«,    τΓ«   ¡Ñ¬«Γ«αδÑ   τáßΓ¿   ó   óδαáªÑ¡¿¿   ¼«úπΓ
  561.      «ΓßπΓßΓó«óáΓ∞ ó««íΘÑ.  èóáñαáΓ¡δÑ  ß¬«í¬¿  «º¡áτáεΓ  ¿¼Ñ¡¡« ΓᬿÑ
  562.      ¡Ñ«í∩ºáΓѽ∞¡δÑ   φ½Ñ¼Ñ¡Γδ  óδαáªÑ¡¿∩.   æ¿¼ó«½   =>  ¿¼ÑÑΓ  ß¼δß½
  563.      "»α«ñπµ¿απÑΓ".
  564.  
  565.           öá¬Γ¿τÑ߬¿,   óδΦÑ  »ÑαÑτ¿ß½Ñ¡δ   »αáó¿½á,   ¬«Γ«αδÑ  «íδτ¡«
  566.      ¡áºδóáεΓ    »αáó¿½á¼¿ óδó«ñá  óδαáªÑ¡¿∩.  é ß««ΓóÑΓßΓó¿¿  ß φΓ¿¼¿
  567.      »αáó¿½á¼¿     ΓÑα¼   ¼«ª¡«   «»αÑñѽ¿Γ∞   Γá¬:   "ÆÑα¼   ∩ó½∩ÑΓß∩
  568.      »α«¿ºóÑñÑ¡¿Ñ¼ ¿½¿ «Γ¡«ΦÑ¡¿Ñ¼ Σá¬Γ«α«ó".
  569.  
  570.           éδ óÑα«∩Γ¡« ºá¼ÑΓ¿½¿,  τΓ« »α¿«α¿ΓÑΓ «»ÑαáΓ«α«ó íѺπß½«óÑ¡ ó
  571.      «»¿ßá¡¡δσ  óδαáªÑ¡¿∩σ,   Γ«  ÑßΓ∞  ó½«ªÑ¡¡δÑ   φ½Ñ¼Ñ¡Γδ  ó¬½ετáεΓ
  572.      «»ÑαáΓ«αδ ß í«½ÑÑ óδß«¬¿¼ »α¿«α¿ΓÑΓ«¼.
  573.  
  574.           é ßó∩º¿ ß φΓ¿¼ αáßß¼«Γα¿¼ α∩ñ »α¿¼Ñα«ó. éδαáªÑ¡¿Ñ
  575.  
  576.                                    10+5*B
  577.  
  578.      ß«ñÑαª¿Γ ñóá ΓÑα¼á: "10" ¿ "5*B". Ä¡¿, ó ßó«ε «τÑαÑñ∞, ß«ßΓ«∩Γ ¿º
  579.      ΓαÑσ  Σá¬Γ«α«ó:  "10",  "5"  ¿  "B",  ß«ñÑαªáΘ¿σ ñóá τ¿ß½á ¿ «ñ¡π
  580.      »ÑαѼѡ¡πε.
  581.  
  582.           é ñαπú«¼ ß½πτáÑ óδαáªÑ¡¿Ñ
  583.  
  584.                                   14*(7-C)
  585.  
  586.      ß«ñÑαª¿Γ  ñóá Σá¬Γ«αá "14"  ¿ "(7-C)",  ¬«Γ«αδÑ,  ó ßó«ε «τÑαÑñ∞,
  587.      ß«ßΓ«∩Γ ¿º  τ¿ß½á ¿  óδαáªÑ¡¿∩  ó  ß¬«í¬áσ.  éδαáªÑ¡¿Ñ  ó ß¬«í¬áσ
  588.      óδτ¿ß½∩ÑΓß∩ ¬á¬ αạ«ßΓ∞ τ¿ß½á ¿ »ÑαѼѡ¡«⌐.
  589.  
  590.           î«ª¡« »αÑ«íαẫóáΓ∞ »αáó¿½á  óδó«ñá  óδαáªÑ¡¿⌐  ó  ¼¡«ªÑßΓó«
  591.      «íΘ¿σ  αѬπαß¿ó¡δσ  Σπ¡¬µ¿⌐,  τΓ«  ¿  ∩ó½∩ÑΓß∩  ºáτáßΓπε «ß¡«ó¡«⌐
  592.      Σ«α¼«⌐ ß¿¡Γá¬ß¿τÑ߬«ú« á¡á½¿ºáΓ«αá αѬπαß¿ó¡«ú« ß»π߬á. ìá ¬áªñ«¼
  593.      ΦáúÑ  á¡á½¿ºáΓ«α  Γᬫú«  Γ¿»á óδ»«½¡∩ÑΓ ß»Ñµ¿Σ¿τÑ߬¿Ñ «»Ñαᵿ¿ ó
  594.      ß««ΓóÑΓßΓó¿¿ ß πßΓá¡«ó½Ñ¡¡δ¼¿ á½úÑíαá¿τÑ߬¿¼¿  »αáó¿½á¼¿.  Éáí«Γπ
  595.      φΓ«ú«  »α«µÑßßá  ¼«ª¡« αáßß¼«ΓαÑΓ∞ ¡á »α¿¼ÑαÑ á¡á½¿ºá óδαáªÑ¡¿∩ ¿
  596.      óδ»«½¡Ñ¡¿∩ áα¿Σ¼ÑΓ¿τÑ߬¿σ «»Ñαᵿ⌐.
  597.  
  598.  
  599.  
  600.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  601. â½áóá VII                                                    -- 11 --
  602.  
  603.  
  604.           ÅπßΓ∞ ¡á óσ«ñ á¡á½¿ºáΓ«αá »«ßΓπ»áÑΓ ß½ÑñπεΘÑÑ óδαáªÑ¡¿Ñ:
  605.  
  606.                                 9/3-(100+56)
  607.  
  608.           Ç¡á½¿ºáΓ«α ó φΓ«¼ ß½πτáÑ íπñÑΓ αáí«ΓáΓ∞ »« Γᬫ⌐ ßσѼÑ:
  609.  
  610.      1.  üÑαѼ »Ñαóδ⌐ ΓÑα¼: "9/3".
  611.      2.  üÑαѼ   ¬áªñδ⌐  Σá¬Γ«α  ¿  óδ»«½¡∩Ѽ  ñѽѡ¿Ñ τ¿ßѽ, »«½πτáѼ
  612.          αѺπ½∞ΓáΓ "3".
  613.      3.  üÑαѼ   óΓ«α«⌐  ΓÑα¼:  "(100+56)".  é  φΓ«⌐   Γ«τ¬Ñ  ßΓáαΓπÑΓ
  614.          αѬπαß¿ó¡δ⌐ á¡á½¿º óΓ«α«ú« óδαáªÑ¡¿∩.
  615.      4.  üÑαѼ  ¬áªñδ⌐  Σá¬Γ«α  ¿  ßπ¼¼¿απѼ  ¿σ ¼Ñªñπ ß«í«⌐, »«½πτáѼ
  616.          αѺπ½∞ΓáΓ 156
  617.      5.  üÑαѼ  τ¿ß½«,  óÑα¡πóΦÑÑß∩  ¿º  αѬπαß¿¿,  ¿  óδτ¿ΓáѼ Ñú« ¿º
  618.          »Ñαó«ú«: 3-156. Å«½πτáѼ ¿Γ«ú«óδ⌐ αѺπ½∞ΓáΓ "-153".
  619.  
  620.  
  621.           àß½¿ óδ   ¡Ñ¼¡«ú«   ß¼πΘÑ¡δ   ßΓ«½∞  ß½«ª¡«⌐  ßσѼ«⌐  αáí«Γδ
  622.      á¡á½¿ºáΓ«αá,  Γ« πóÑα∩Ѽ óáß,  τΓ« φΓ« ¡Ñ Γᬠπª ßΓαáΦ¡«. â«αáºñ«
  623.      ßΓαáΦ¡ÑÑ  «¬áºáΓ∞ß∩  π  ΓѽÑ󿺫αá,  ¬«úñá  Γαá¡ß½¿απεΓ Σ¿¡á½∞¡δ⌐
  624.      ΣπΓí«½∞¡δ⌐ ¼áΓτ,  ¡Ñ  ¿¼Ñ∩  ß  ß«í«⌐  ñ«ßΓáΓ«τ¡«ú«  ºá»áßá  »¿óá.
  625.      Å«φΓ«¼π ¡Ñ »πúá⌐ΓÑß∞ ¬«¼»½Ñ¬ß¡«ú« »«ñσ«ñá.
  626.  
  627.           éδ ñ«½ª¡δ  »«¼¡¿Γ∞  ñóÑ  «ß¡«ó¡δÑ  ¿ñÑ¿ αѬπαß¿ó¡«ú« αáºí«αá
  628.      óδαáªÑ¡¿⌐:  (1)  »α¿«α¿ΓÑΓ  «»ÑαáΓ«α«ó  ∩ó½∩ÑΓß∩  íѺπß½«ó¡δ¼   ó
  629.      »α«ñπ¬µ¿«¡¡δσ   »αáó¿½áσ  ¿  «»αÑñѽѡ  ó  ¡¿σ;  (2)  φëà ¼ÑΓ«ñ
  630.      ß¿¡Γá¬ß¿τÑ߬«ú« á¡á½¿ºá ¿ óδτ¿ß½Ñ¡¿∩  óδαáªÑ¡¿⌐  «τÑ¡∞  »«σ«ª  ¡á
  631.      Γ«Γ,   ¬«Γ«αδ⌐  óδ  ßἿ  ¿ß»«½∞ºπÑΓÑ  ñ½∩  óδ»«½¡Ñ¡¿∩  Γá¬¿σ  ªÑ
  632.      «»Ñαᵿ⌐.
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  661. â½áóá VII                                                    -- 12 --
  662.  
  663.  
  664.                     æêìÆÇèæêùàæèêë ÇìÇïêçÇÆÄÉ é¢ÉÇåàìêë
  665.      -----------------------------------------------------------------
  666.  
  667.           Å«½¡δ⌐ »α«ßΓ«⌐ ß¿¡Γá¬ß¿τÑ߬¿⌐ á¡á½¿ºáΓ«α αѬπαß¿ó¡«ú« ß»π߬á
  668.      ñ½∩  µÑ½δσ τ¿ß½«óδσ  óδαáªÑ¡¿⌐ ó¬½ετáÑΓ  ó ßÑí∩  α∩ñ  Σπ¡¬µ¿⌐. éδ
  669.      ñ«½ª¡δ  óº∩Γ∞ ΓѬßΓδ  φΓ¿σ Σπ¡¬µ¿⌐  ¿ ß«σαá¡¿Γ∞ ¿σ  ó ßó«Ñ¼ Σá⌐½Ñ
  670.      (¬«úñá ΓѬßΓδ á¡á½¿ºáΓ«αá ¿ ¿¡ΓÑα»αÑΓáΓ«αá  «íΩÑñ¿¡∩Γß∩ »«½πτ¿Γß∩
  671.      ñ«ó«½∞¡«  í«½∞Φ«⌐  Σá⌐½,  »«φΓ«¼π  αѬ«¼Ñ¡ñπÑΓß∩  «Γ¬«¼»¿½¿α«óáΓ∞
  672.      Σá⌐½δ «Γñѽ∞¡«). æ¼δß½  ¿ß»«½∞º«óá¡¿∩ ú½«íá½∞¡δσ »ÑαѼѡ¡δσ íπñÑΓ
  673.      ¬αáΓ¬« «»¿ßá¡, ó »α«µÑßßÑ «íßπªñÑ¡¿∩ ¿¡ΓÑα»αÑΓáΓ«αá.
  674.  
  675.           êßσ«ñ¡δ⌐   ΓѬßΓ   »α«ßΓÑ⌐ΦÑú«  ß¿¡Γá¬ß¿τÑ߬«ú«  á¡á½¿ºáΓ«αá
  676.      αѬπαß¿ó¡«ú« ß»π߬á ñ½∩ µÑ½«τ¿ß½Ñ¡¡δσ óδαáªÑ¡¿⌐ »α¿óÑñÑ¡ ¡¿ªÑ.
  677.  
  678.  
  679.           /* æ¿¡Γá¬ß¿τÑ߬¿⌐ á¡á½¿ºáΓ«α αѬπαß¿ó¡«ú« ß»π߬á
  680.              ñ½∩ µÑ½«τ¿ß½Ñ¡¡δσ óδαáªÑ¡¿⌐, ¬«Γ«αδ⌐ ß«ñÑনΓ
  681.              α∩ñ ó¬½ετáѼδσ »ÑαѼѡ¡δσ
  682.           */
  683.              #include "setjmp.h"
  684.              #include "math.h"
  685.              #include "ctype.h"
  686.              #include "stdlib.h"
  687.              #define  DELIMITER 1
  688.              #define  VARIABLE  2
  689.              #define  NUMBER    3
  690.              #define  COMMAND   4
  691.              #define  STRING    5
  692.              #define  QUOTE     6
  693.              #define  EOL       9
  694.              #define  FINISHED  10
  695.  
  696.              extern char *prog;  /* íπΣÑα á¡á½¿º¿απѼ«ú« óδαáªÑ¡¿∩ */
  697.              extern jmp_buf e_buf; /* íπΣÑα ßαÑñδ Σπ¡¬µ¿¿ longjmp() */
  698.              extern int variables[26]; /* »ÑαѼѡ¡δÑ */
  699.                extern struct commands {
  700.                char command[20];
  701.                char tok;
  702.              } table[];
  703.  
  704.            extern char token[80]; /* ó¡ÑΦ¡ÑÑ »αÑñßΓáó½Ñ¡¿Ñ ½Ñ¬ßѼδ */
  705.            extern char token_type; /* Γ¿» ½Ñ¬ßѼδ */
  706.            extern char tok; /* ó¡πΓαÑ¡¡ÑÑ »αÑñßΓáó½Ñ¡¿Ñ ½Ñ¬ßѼδ */
  707.              void get_exp(),level2(),level3(),level4(),level5();
  708.              void level6(),primitive(),arith(),unary();
  709.              void serror(), putback();
  710.  
  711.              /* Æ«τ¬á óσ«ñá ó á¡á½¿ºáΓ«α. */
  712.              void get_exp(result)
  713.              int *result;
  714.              {
  715.                get_token();
  716.                if(!*token) {
  717.                  serror(2);
  718.  
  719.  
  720.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  721. â½áóá VII                                                    -- 13 --
  722.  
  723.  
  724.                  return;
  725.                }
  726.                level2(result);
  727.                putback(); /* ó«ºóαáΘáÑΓ »«ß½Ññ¡εε ßτ¿Γá¡πε
  728.                              ½Ñ¬ßѼπ «íαáΓ¡« ó« óσ«ñ¡«⌐ »«Γ«¬ */
  729.              }
  730.  
  731.              /* æ½«ªÑ¡¿Ñ ¿½¿ óδτ¿Γá¡¿Ñ ñóπσ ΓÑମó */
  732.              void level2(result)
  733.              int *result;
  734.              {
  735.                register char op;
  736.                int hold;
  737.  
  738.                level3(result);
  739.                while((op=*token) == '+' || op == '-') {
  740.                  get_token();
  741.                  level3(&hold);
  742.                  arith(op,result,&hold);
  743.                }
  744.              }
  745.  
  746.             /* éδτ¿ß½Ñ¡¿Ñ »α«¿ºóÑñÑ¡¿∩ ¿½¿ τáßΓ¡«ú« ñóπσ Σó¬Γ«α«ó */
  747.              void level3(result)
  748.              int *result;
  749.              {
  750.                register char op;
  751.                int hold;
  752.  
  753.                level4(result);
  754.  
  755.                while((op = *token) == '+' || op == '/' || op == '%') {
  756.                  get_token();
  757.                  level4(&hold);
  758.                  arith(op,result,&hold);
  759.                }
  760.              }
  761.  
  762.              /* Äíαáí«Γ¬á ßΓѻѡ¿ τ¿ß½á (µÑ½«τ¿ß½Ñ¡¡«⌐) */
  763.              void level4(result)
  764.              int *result;
  765.              {
  766.                int hold;
  767.  
  768.                level5(result);
  769.                if(*token== '^') {
  770.                  get_token();
  771.                  level4(&hold);
  772.                  arith('^', result, &hold);
  773.                }
  774.              }
  775.  
  776.              /* ô¡áα¡δ⌐ + ¿½¿ - */
  777.              void level5(result)
  778.  
  779.  
  780.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  781. â½áóá VII                                                    -- 14 --
  782.  
  783.  
  784.              int *result;
  785.              {
  786.                register char op;
  787.  
  788.                op = 0;
  789.            if((token_type==DELIMITER) && *token=='+' || *token=='-') {
  790.                  op = *token;
  791.                  get_token();
  792.                }
  793.                level6(result);
  794.                if(op)
  795.                  unary(op, result);
  796.              }
  797.  
  798.              /* Äíαáí«Γ¬á óδαáªÑ¡¿∩ ó ¬απú½δσ ß¬«í¬áσ */
  799.              void level6(result)
  800.              int *result;
  801.              {
  802.                if((*token == '(') && (token_type == DELIMITER)) {
  803.                  get_token();
  804.                  level2(result);
  805.                  if(*token != ')')
  806.                    serror(1);
  807.                  get_token();
  808.                }
  809.                else
  810.                  primitive(result);
  811.              }
  812.  
  813.              /* Ä»αÑñѽѡ¿Ñ º¡áτÑ¡¿∩ »ÑαѼѡ¡«⌐ »« ÑÑ ¿¼Ñ¡¿ */
  814.              void primitive(result)
  815.              int *result;
  816.              {
  817.                switch(token_type) {
  818.                case VARIABLE:
  819.                  *result = find_var(token);
  820.                  get_token();
  821.                  return;
  822.                case NUMBER:
  823.                  *result  = atoi(token);
  824.                  get_token();
  825.                  return;
  826.                default:
  827.                  serror(0);
  828.                }
  829.              }
  830.  
  831.              /* éδ»«½¡Ñ¡¿Ñ ß»Ñµ¿Σ¿µ¿α«óá¡¡«⌐ áα¿Σ¼ÑΓ¿¬¿ */
  832.              void arith(o, r, h)
  833.              char o;
  834.              int *r, *h;
  835.              {register int t, ex;
  836.  
  837.              switch(o) {
  838.  
  839.  
  840.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  841. â½áóá VII                                                    -- 15 --
  842.  
  843.  
  844.                case '-':
  845.                  *r = *r-*h;
  846.                  break;
  847.                case '+':
  848.                  *r = *r+*h;
  849.                  break;
  850.                case '*':
  851.                  *r = *r * *h;
  852.                  break;
  853.                case '/':
  854.                  *r = (*r)/(*h);
  855.                  break;
  856.                case '%':
  857.                  t = (*r)/(*h);
  858.                  *r = *r-(t*(*h));
  859.                  break;
  860.                case '^':
  861.                  ex =*r;
  862.                  if(*h==0) {
  863.                    *r = 1;
  864.                    break;
  865.                  }
  866.                  for(t=*h-1; t>0; --t) *r = (*r) * ex;
  867.                  break;
  868.                }
  869.              }
  870.  
  871.              /* êº¼Ñ¡Ñ¡¿Ñ º¡á¬á */
  872.              void unary(o, r)
  873.              char o;
  874.              int *r;
  875.              {
  876.                if(o=='-') *r = -(*r);
  877.              }
  878.  
  879.              /* Å«¿ß¬ º¡áτÑ¡¿∩ »ÑαѼѡ¡«⌐ */
  880.              int find_var(s)
  881.              char *s;
  882.              {
  883.                if(!isalpha(*s)){
  884.                  serror(4); /* ¡Ñ »ÑαѼѡ¡á∩ */
  885.                  return 0;
  886.                }
  887.                return variables[toupper(*token)-'^'];
  888.              }
  889.  
  890.              /* óδñáΓ∞ ß««íΘÑ¡¿Ñ «í «Φ¿í¬Ñ */
  891.              void serror(error)
  892.              int error;
  893.              {
  894.                static char *e[]= {
  895.                  "æ¿¡Γá¬ß¿τÑ߬á∩ «Φ¿í¬á",
  896.                  "ìÑ»áα¡δÑ ¬απú½δѠ߬«í¬¿",
  897.                  "¥Γ« ¡Ñ óδαáªÑ¡¿Ñt",
  898.  
  899.  
  900.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  901. â½áóá VII                                                    -- 16 --
  902.  
  903.  
  904.                  "ÅαÑñ»«½áúáÑΓß∩ ß¿¼ó«½ αáóÑ¡ßΓóá",
  905.                  "ìÑ »ÑαѼѡ¡á∩",
  906.                  "Æáí½¿µá ¼ÑΓ«¬ »ÑαÑ»«½¡Ñ¡á",
  907.                  "äπí½¿α«óá¡¿Ñ ¼ÑΓ«¬",
  908.                  "ìÑ«»αÑñѽѡ¡á∩ ¼ÑΓ¬á",
  909.                  "ìÑ«íσ«ñ¿¼ «»ÑαáΓ«α THEN",
  910.                  "ìÑ«íσ«ñ¿¼ «»ÑαáΓ«α TO",
  911.                  "ôα«óÑ¡∞ ó½«ªÑ¡¡«ßΓ¿ µ¿¬½á FOR ß½¿Φ¬«¼ óѽ¿¬",
  912.                  "NEXT ¡Ñ ß««ΓóÑΓßΓóπÑΓ FOR",
  913.                  "ôα«óÑ¡∞ ó½«ªÑ¡¡«ßΓ¿ GOSUB ß½¿Φ¬«¼ óѽ¿¬",
  914.                  "RETURN ¡Ñ ß««ΓóÑΓßΓóπÑΓ GOSUB"
  915.                };
  916.                printf("&4%s\n",e[error]);
  917.                longjmp(e_buf, 1); /* ó«ºóαáΓ ó Γ«τ¬π ß«σαá¡Ñ¡¿∩ */
  918.              }
  919.  
  920.              /* ùΓÑ¡¿Ñ ½Ñ¬ßѼδ. */
  921.              get_token()
  922.              {
  923.  
  924.                register char *temp;
  925.                token_type=0; tok=0;
  926.                temp=token;
  927.                if(*prog=='\0') { /* è«¡Ñµ Σá⌐½á */
  928.                  *token=0;
  929.                  tok = FINISHED;
  930.                  return(token_type=DELIMITER);
  931.                }
  932.                while(iswhite(*prog)) ++prog; /* »α«»π߬ »α«íѽ«ó */
  933.  
  934.                if(*prog=='\r') { /* ¬«¡Ñ⌐ ßΓ᫬¿ »α«úαá¼¼δ */
  935.                  ++prog; ++prog;
  936.                  tok = EOL; *token='\r';
  937.                  token[1]='\n'; token[2]=0;
  938.                  return (token_type = DELIMITER);
  939.                }
  940.  
  941.                if(strchr("+-^/%=;(),><", *prog)){ /* αáºñѽ¿Γѽ∞ */
  942.                  *temp=*prog;
  943.                  prog++; /* »ÑαÑσ«ñ ¡á ß½ÑñπεΘπε »«º¿µ¿ε */
  944.                  temp++;
  945.                  *temp=0;
  946.                  return (token_type=DELIMITER);
  947.                }
  948.  
  949.                if(*prog=='"') { /* ßΓα«¬á ¬áóδτѬ */
  950.                  prog++;
  951.                  while(*prog != '"' && *prog!='\r') *temp++=*prog++;
  952.                  if(*prog=='\r') serror(1);
  953.                  prog++;*temp=0;
  954.                  return(token_type=QUOTE);
  955.                }
  956.  
  957.                if(isdigit(*prog)) { /* τ¿ß½« */
  958.  
  959.  
  960.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  961. â½áóá VII                                                    -- 17 --
  962.  
  963.  
  964.                  while(!isdelim(*prog)) *temp++=*prog++;
  965.                  *temp = '\0';
  966.                  return(token_type = NUMBER);
  967.                }
  968.  
  969.                if(isalpha(*prog)) { /* »ÑαѼѡ¡á∩ ¿½¿ ¬«¼á¡ñá */
  970.                  while(!isdelim(*prog)) *temp++=*prog++;
  971.                  token_type=STRING;
  972.                }
  973.  
  974.                *temp = '\0';
  975.  
  976.         /* »α«ß¼áΓα¿óáÑΓß∩, Ñß½¿ ßΓ᫬á - »ÑαѼѡ¡á∩ ¿½¿ ¬«¼á¡ñá */
  977.                if (token_type==STRING) {
  978.        tok=look_up(token); /* ÅαÑ«íαẫóá¡¿Ñ ó« ó¡πΓαÑ¡¡¿⌐ Σ«α¼áΓ */
  979.                  if (!tok) token_type = VARIABLE;
  980.                  else token_type = COMMAND; /* φΓ« ¬«¼á¡ñá */
  981.                }
  982.                return token_type;
  983.              }
  984.  
  985.              /* é«ºóαáΓ ½Ñ¬ßѼδ ó« óσ«ñ¡«⌐ »«Γ«¬ */
  986.             void putback()
  987.              {
  988.  
  989.                char *t;
  990.  
  991.                t = token;
  992.                for(; *t; t++) prog--;
  993.              }
  994.  
  995.              /* Å«¿ß¬ ß««ΓóÑΓßΓó¿∩ ó¡πΓαÑ¡¡Ñú« Σ«α¼áΓá ñ½∩
  996.                 ΓѬπΘÑ⌐ ½Ñ¬ßѼδ ó Γáí½¿µÑ ½Ñ¬ßѼ.
  997.              */
  998.              look_up(s)
  999.              char *s;
  1000.              {
  1001.                register int i,j;
  1002.                char *p;
  1003.  
  1004.                /* »αÑ«íαẫóá¡¿Ñ ¬ ¡¿ª¡Ñ¼π αÑú¿ßΓαπ */
  1005.                p = s;
  1006.                while(*p){ *p = tolower(*p); p++; }
  1007.  
  1008.                /* »α«ß¼áΓα¿óáÑΓß∩, Ñß½¿ ½Ñ¬ßѼᠫí¡áαπªÑ¡á ó
  1009.                   Γáí½¿µÑ */
  1010.                for(i=0; *table[i].command; i++)
  1011.                  if(!strcmp(table[i].command, s)) return table[i].tok;
  1012.                return 0; /* ¡Ñαáß»«º¡á¡¡á∩ ¬«¼á¡ñá */
  1013.              }
  1014.  
  1015.              /* é«ºóαáΘáÑΓ "¿ßΓ¿¡π", Ñß½¿ "c" αáºñѽ¿Γѽ∞ */
  1016.              isdelim(c)
  1017.              char c;
  1018.  
  1019.  
  1020.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1021. â½áóá VII                                                    -- 18 --
  1022.  
  1023.  
  1024.              {
  1025.              if(strchr(" ;,+-<>/*%^=()",c) || c==9 || c=='\r' || c==0)
  1026.                  return 1;
  1027.                return 0;
  1028.              }
  1029.  
  1030.              /* é«ºóαáΘáÑΓ 1, Ñß½¿ "ß" »α«íѽ ¿½¿ Γáíπ½∩µ¿∩ */
  1031.              iswhite(c)
  1032.              char c;
  1033.              {
  1034.                if(c==' ' || c=='\t') return 1;
  1035.                else return 0;
  1036.              }
  1037.  
  1038.  
  1039.           Ç¡á½¿ºáΓ«α »«ññÑনóáÑΓ ß½ÑñπεΘ¿Ñ «»ÑαáΓ«αδ:  "+", "-", "*",
  1040.      "/",  "%",  µÑ½«τ¿ß½Ñ¡¡δ⌐ »«¬áºáΓѽ∞ ßΓѻѡ¿ (^) ¿ π¡áα¡δ⌐ ¼¿¡πß.
  1041.      éßÑ  φΓ¿  «»Ñαᵿ¿  ¼«úπΓ  ¿ß»«½∞º«óáΓ∞ß∩  ó ß«τÑΓá¡¿¿ ß ¬απú½δ¼¿
  1042.      ß¬«í¬á¼¿. éδ, óÑα«∩Γ¡«, ºá¼ÑΓ¿½¿, τΓ« ó »α«úαἼѠ¿¼ÑεΓß∩ Σπ¡¬µ¿¿
  1043.      ΦÑßΓ¿  πα«ó¡Ñ⌐,   ¬«Γ«αδÑ  αáí«ΓáεΓ  Γ«τ¡«   ΓᬪѠ ¬á¬   Σπ¡¬µ¿∩
  1044.      primitive(), óαáΘáεΘá∩  º¡áτÑ¡¿Ñ  τ¿ß½á.  Å«¼¿¼«  φΓ¿σ   Σπ¡¬µ¿⌐,
  1045.      αÑ὿ºπεΘ¿σ áα¿Σ¼ÑΓ¿τÑ߬¿Ñ «»Ñαᵿ¿,  ó ß«ßΓáó »α«úαá¼¼δ ó¬½ετÑ¡δ
  1046.      Σπ¡¬µ¿¿ arith() ¿ unary(), á ΓᬪѠget_token().
  1047.  
  1048.           Åα¿ óδτ¿ß½Ñ¡¿¿ óδαáªÑ¡¿∩ prog π¬áºδóáÑΓ  ¡á  ¡áτὫ  ßΓ᫬¿,
  1049.      ß«ñÑαªáΘÑ⌐ óδαáªÑ¡¿Ñ,  ¿ óδºδóáÑΓ get_exp() ß áñαÑß«¼ »ÑαѼѡ¡«⌐,
  1050.      ó ¬«Γ«απε óδ σ«Γ¿ΓÑ »«¼ÑßΓ¿Γ∞ αѺπ½∞ΓáΓ.
  1051.  
  1052.           ÄíαáΓ¿ΓÑ «ß«í«Ñ  ó¡¿¼á¡¿Ñ  ¡á  Σπ¡¬µ¿ε   serror(),   ¬«Γ«αá∩
  1053.      ¿ß»«½∞ºπÑΓß∩  ñ½∩  óδñáτ¿  ß««íΘÑ¡¿⌐ «í «Φ¿í¬áσ.  Åα¿ «í¡áαπªÑ¡¿¿
  1054.      ß¿¡Γá¬ß¿τÑ߬«⌐ «Φ¿í¬¿ serror() óδºδóáÑΓß∩ ß ¡«¼Ñα«¼ φΓ«⌐ «Φ¿í¬¿ ó
  1055.      ¬áτÑßΓóÑ  áαúπ¼Ñ¡Γá.  ÄΦ¿í¬á  ß  ¬«ñ«¼  0,  ¬«Γ«α«⌐ ß««ΓóÑΓßΓóπÑΓ
  1056.      ß««íΘÑ¡¿Ñ "ß¿¡Γá¬ß¿τÑ߬á∩ «Φ¿í¬á",  óδñáÑΓß∩ ó Γ«¼ ß½πτáÑ,  ¬«úñá
  1057.      Γ¿»  «Φ¿í¬¿  ¡Ñ½∞º∩ «»αÑñѽ¿Γ∞ í«½ÑÑ ¬«¡¬αÑΓ¡«.  é ñαπú¿σ ß½πτá∩σ
  1058.      «Φ¿í¬á πΓ«τ¡∩ÑΓß∩.  çá¼ÑΓ∞ΓÑ,  τΓ« serror() ºá¬á¡τ¿óáÑΓß∩ ó맮ó«¼
  1059.      Σπ¡¬µ¿¿ longjmp().
  1060.  
  1061.           öπ¡¬µ¿∩ logjmp()  óδ»«½¡∩ÑΓ ¡Ñ½«¬á½∞¡δ⌐ »ÑαÑσ«ñ, ó«ºóαáΘá∩ß∞
  1062.      ó  Γ«τ¬π,  «»αÑñѽѡ¡πε  ß  »«¼«Θ∞ε  Σπ¡¬µ¿¿  setjmp().   öπ¡¬µ¿∩
  1063.      setjmp()   ó¬½ετѡᠠ ó  ¿ßσ«ñ¡δ⌐  ΓѬßΓ  ¿¡ΓÑα»αÑΓáΓ«αá.  ÅÑαóδ⌐
  1064.      áαúπ¼Ñ¡Γ Σπ¡¬µ¿¿ logjmp() ∩ó½∩ÑΓß∩ íπΣÑα«¼  ßαÑñδ, ¿¡¿µ¿¿α«óá¡¡«⌐
  1065.      ß  »«¼«Θ∞ε  setjmp().  éΓ«α«⌐  áαúπ¼Ñ¡Γ  - φΓ« º¡áτÑ¡¿Ñ,  ¬«Γ«α«Ñ
  1066.      «»αÑñѽ∩ÑΓß∩ »α¿ »ÑαÑñáτÑ π»αáó½Ñ¡¿∩ ¿º setjmp() «íαáΓ¡«  ó Γ«τ¬π
  1067.      ÑÑ ó맮óá. èᬠφΓ« ñѽáÑΓß∩ óδ, πó¿ñ¿ΓÑ »«ºªÑ.
  1068.  
  1069.           êß»«½∞º«óá¡¿Ñ ljgjmp()  π»α«ΘáÑΓ  «íαáí«Γ¬π «Φ¿í«¬,  Γᬠ¬á¬
  1070.      »α«úαá¼¼δ-á¡á½¿ºáΓ«αδ  ¡Ñ   ñ«½ª¡δ   áóáα¿⌐¡«   ºáóÑαΦáΓ∞ß∩   »α¿
  1071.      «í¡áαπªÑ¡¿¿  «Φ¿í¬¿.  àß½¿  óáΦ  ¬«¼»¿½∩Γ«α  æ¿  ¡Ñ  »«ññÑনóáÑΓ
  1072.      Σπ¡¬µ¿¿ setjmp() ¿ logjmp(),  Γ« ¬áªñá∩ Σπ¡¬µ¿∩  »α¿  «í¡áαπªÑ¡¿¿
  1073.      «Φ¿í«¬ ñ«½ª¡á  óδ»«½¡∩Γ∞  ó«ºóαáΓ  ó  Γ«τ¬π  ó«º¡¿¬¡«óÑ¡¿∩ «Φ¿í¬¿
  1074.      ßἫßΓ«∩Γѽ∞¡«.
  1075.  
  1076.  
  1077.  
  1078.  
  1079.  
  1080.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1081. â½áóá VII                                                    -- 19 --
  1082.  
  1083.  
  1084.                    èÇè ÇìÇïêçÇÆÄÉ ÄüÉÇüÇÆ¢éÇàÆ ÅàÉàîàìì¢à
  1085.      -----------------------------------------------------------------
  1086.  
  1087.           èᬠí佫  ß¬áºá¡«  αá¡∞ΦÑ,  ¿¡ΓÑα»αÑΓáΓ«α  ∩ºδ¬á SMALL BASIC
  1088.      αáß»«º¡áÑΓ »ÑαѼѡ¡δÑ ß ¿¼Ñ¡á¼¿ Γ«½∞¬«  «Γ  "A"  ñ«  "Z".  èáªñ«⌐
  1089.      »ÑαѼѡ¡«⌐ ß««ΓóÑΓßΓóπÑΓ φ½Ñ¼Ñ¡Γ ¼áßß¿óá variables, ß«ßΓ«∩ΘÑú« ¿º
  1090.      26 φ½Ñ¼Ñ¡Γ«ó.  ¥Γ«Γ ¼áß߿󠫻αÑñѽѡ ó ΓѬßΓÑ ¿¡ΓÑα»αÑΓáΓ«αá, ¬á¬
  1091.      »«¬áºá¡« ¡¿ªÑ, ¿ ¿¡¿µ¿á½¿º¿απÑΓß∩ ¡π½Ñó묨 º¡áτÑ¡¿∩¼¿.
  1092.  
  1093.         int variables[26]= {   /* 26 »ÑαѼѡ¡δσ »«½∞º«óáΓѽ∩, A-Z */
  1094.           0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  1095.           0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  1096.           0, 0, 0, 0, 0, 0
  1097.         };
  1098.           Æá¬ ¬á¬ ¿¼Ñ¡á¼¿ »ÑαѼѡ¡δσ ∩ó½∩εΓß∩ íπ¬óδ «Γ "A" ñ«  "Z", Γ«
  1099.      ¿¡ñѬ߿α«óá¡¿Ñ  ¼áßß¿óá  variables  ¼«ª¡« ½Ñú¬« «ßπΘÑßΓó¿Γ∞ »πΓѼ
  1100.      óδτ¿Γá¡¿∩ ¿º ß««ΓóÑΓßΓóπεΘ¿σ  º¡áτÑ¡¿⌐  ¿¼Ñ¡  »ÑαѼѡ¡δσ  ó  ¬«ñÑ
  1101.      ASCII ¬«ñá ß¿¼ó«½á 'A'. öπ¡¬µ¿∩ find_var(), «»αÑñѽ∩εΘá∩ º¡áτÑ¡¿Ñ
  1102.      »ÑαѼѡ¡«⌐ ó ºáó¿ß¿¼«ßΓ¿ «Γ ÑÑ ¿¼Ñ¡¿, »αÑñßΓáó½Ñ¡á ¡¿ªÑ.
  1103.  
  1104.          /* Ä»αÑñѽѡ¿Ñ º¡áτÑ¡¿∩ »ÑαѼѡ¡«⌐ »« ÑÑ ¿¼Ñ¡¿*/
  1105.          int find_var(s)
  1106.          char *s;
  1107.          {
  1108.            if(!isalpha(*s)){
  1109.              serror(4); /* φΓ« ¡Ñ »ÑαѼѡ¡á∩ */
  1110.              return 0;
  1111.            }
  1112.            return variables[toupper(*token)-'A'];
  1113.          }
  1114.  
  1115.           ¥Γá Σπ¡¬µ¿∩  ñ«»π߬áÑΓ ¿ß»«½∞º«óá¡¿Ñ í«½ÑÑ ñ½¿¡¡δσ ¿¼Ñ¡,  ¡«
  1116.      Γ«½∞¬« »Ñαóá∩ íπ¬óá ¿¼Ñ¡¿ »ÑαѼѡ¡«⌐ ∩ó½∩ÑΓß∩ º¡áτáΘÑ⌐.
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.  
  1127.  
  1128.  
  1129.  
  1130.  
  1131.  
  1132.  
  1133.  
  1134.  
  1135.  
  1136.  
  1137.  
  1138.  
  1139.  
  1140.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1141. â½áóá VII                                                    -- 20 --
  1142.  
  1143.  
  1144.                       êìÆàÉÅÉàÆÇÆÄÉ ƒç¢èÇ  SMALL BASIC
  1145.      -----------------------------------------------------------------
  1146.  
  1147.           ÉáºαáíáΓδóáѼδ⌐ ¿¡ΓÑα»αÑΓáΓ«α  íπñÑΓ  αáß»«º¡áóáΓ∞ ß½ÑñπεΘ¿Ñ
  1148.      ¬½ετÑóδÑ ß½«óá ∩ºδ¬á »α«úαá¼¼¿α«óá¡¿∩ BASIC:
  1149.  
  1150.             PRINT
  1151.             INPUT
  1152.             IF
  1153.             THEN
  1154.             FOR
  1155.             NEXT
  1156.             TO
  1157.             GOTO
  1158.             GOSUB
  1159.             RETURN
  1160.             END
  1161.  
  1162.           é¡πΓαÑ¡¡ÑÑ »αÑñßΓáó½Ñ¡¿Ñ φΓ¿σ ¬«¼á¡ñ (»½εß º¡áτÑ¡¿Ñ  EOL ñ½∩
  1163.      ¬«¡µá  ßΓ᫬¿  ¿  FINISHED  ñ½∩  ß¿ú¡á½¿ºáµ¿¿  « ¬«¡µÑ »α«úαá¼¼δ)
  1164.      «»αÑñѽ∩ÑΓß∩ Γá¬:
  1165.  
  1166.           #define PRINT   1
  1167.           #define INPUT   2
  1168.           #define IF      3
  1169.           #define THEN    4
  1170.           #define FOR     5
  1171.           #define NEXT    6
  1172.           #define TO      7
  1173.           #define GOTO    8
  1174.           #define EOL     9
  1175.           #define FINISHED 10
  1176.           #define GOSUB    11
  1177.           #define RETURN   12
  1178.           #define END      13
  1179.  
  1180.           ä½∩ »αÑ«íαẫóá¡¿∩   ó¡ÑΦ¡Ñú«   »αÑñßΓáó½Ñ¡¿∩   ½Ñ¬ßѼ    ó«
  1181.      ó¡πΓαÑ¡¡¿⌐ Σ«α¼áΓ ¿ß»«½∞ºπÑΓß∩ óß»«¼áúáΓѽ∞¡á∩ ßΓαπ¬Γπαá table.
  1182.  
  1183.           struct commands { /* éß»«¼«úáΓѽ∞¡á∩ ßΓαπ¬Γπαá ¬½ετÑóδσ
  1184.                                ß½«ó á¡á½¿ºáΓ«αá                  */
  1185.             char command[20];
  1186.             char tok;
  1187.           } table[] = { /* Æáí½¿µá «íαáíáΓδóáÑΓ ¬«¼á¡ñδ, óóÑñÑ¡¡δÑ */
  1188.             "print",PRINT, /* ¡á ¡¿ª¡Ñ¼ αÑú¿ßΓαÑ */
  1189.             "input",INPUT,
  1190.             "if",IF,
  1191.             "then",THEN,
  1192.             "goto",GOTO,
  1193.             "for",FOR,
  1194.             "next",NEXT,
  1195.             "to",TO,
  1196.             "gosub",GOSUB,
  1197.             "return",RETURN,
  1198.  
  1199.  
  1200.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1201. â½áóá VII                                                    -- 21 --
  1202.  
  1203.  
  1204.             "end",END,
  1205.             "",END  /* mark end of table */
  1206.           };
  1207.  
  1208.           ÄíαáΓ¿ΓѠ󡿼᡿Ѡ¡á Γ«,  τΓ« »α¿º¡á¬ ¬«¡µá  Σá⌐½á  (¡π½Ñóá∩
  1209.      ßΓ᫬á) »«¼ÑΘÑ¡ ó ¬«¡Ñµ Γáí½¿µδ.
  1210.  
  1211.           öπ¡¬µ¿∩ look_up() ó«ºóαáΘáÑΓ ó¡πΓαÑ¡¡ÑÑ »αÑñßΓáó½Ñ¡¿Ñ ¬áªñ«⌐
  1212.      ½Ñ¬ßÑ¼δ ¿½¿ ß¿¼ó«½á '\0', Ñß½¿ Γᬫóá∩ ¡Ñ «í¡áαπªÑ¡á.
  1213.  
  1214.           /* ÅαÑ«íαẫóá¡¿Ñ ¬áªñ«⌐ ½Ñ¬ßÑ¼δ ¿º Γáí½¿µδ ½Ñ¬ßѼ
  1215.              ó« ó¡πΓαÑ¡¡ÑÑ »αÑñßΓáó½Ñ¡¿Ñ.
  1216.           */
  1217.           look_up(s)
  1218.           char *s;
  1219.           {
  1220.             register int i,j;
  1221.             char *p;
  1222.             /* »αÑ«íαẫóá¡¿Ñ ó ß¿¼ó«½δ ¡¿ª¡Ñú« αÑú¿ßΓαá */
  1223.             p =s;
  1224.             while(*p){ *p = tolower(*p); p++; }
  1225.  
  1226.             /* Ñß½¿ ½Ñ¬ßѼᠫí¡áαπªÑ¡á ó Γáí½¿µÑ */
  1227.             for(i=0; *table[i].command; i++)
  1228.                 if(!strcmp(table[i].command, s)) return table[i].tok;
  1229.             return 0; /* ¬«¼á¡ñá ¡Ñ αáß»«º¡á¡á */
  1230.           }
  1231.  
  1232.           ê¡ΓÑα»αÑΓáΓ«α ∩ºδ¬á SMALL  BASIC  ¡Ñ  »«ññÑনóáÑΓ  αÑñá¬Γ«α
  1233.      ΓѬßΓ«ó,  »«φΓ«¼π  óδ  ñ«½ª¡δ ß«ºñáóáΓ∞ »α«úαá¼¼δ ¡á ∩ºδ¬Ñ BASIC,
  1234.      ¿ß»«½∞ºπ∩ ßΓá¡ñáαΓ¡δ⌐ ΓѬßΓ«óδ⌐ αÑñá¬Γ«α.
  1235.  
  1236.           èáªñá∩ »α«úαἼᠠßτ¿ΓδóáÑΓß∩  ¿   óδ»«½¡∩ÑΓß∩   ß   »«¼«Θ∞ε
  1237.      ¿¡ΓÑα»αÑΓáΓ«αá.  öπ¡¬µ¿∩, ¬«Γ«αá∩ ºáúαπªáÑΓ »α«úαá¼¼π, ¡áºδóáÑΓß∩
  1238.      load_program().
  1239.  
  1240.  
  1241.          /* çáúαπº¬á »α«úαá¼¼δ */
  1242.          load_program(p, fname)
  1243.          char *p;
  1244.          char *fname;
  1245.          {
  1246.            FILE *fp;
  1247.            int i=0;
  1248.            if(!(fp=fopen(fname, "rb"))) return 0;
  1249.  
  1250.            i = 0;
  1251.              do {
  1252.                 *p = getc(fp);
  1253.                 p++; i++;
  1254.              } while(!feof(fp) && i<PROG_SIZE);
  1255.              *(p-2) = '\0'; /* æ¿¼ó«½ ¬«¡µá ºáúαπªáѼ«⌐ »α«úαá¼¼δ */
  1256.              fclose(fp);
  1257.              return 1;
  1258.  
  1259.  
  1260.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1261. â½áóá VII                                                    -- 22 --
  1262.  
  1263.  
  1264.            }
  1265.  
  1266.  
  1267.  
  1268.  
  1269.  
  1270.  
  1271.  
  1272.  
  1273.  
  1274.  
  1275.  
  1276.  
  1277.  
  1278.  
  1279.  
  1280.  
  1281.  
  1282.  
  1283.  
  1284.  
  1285.  
  1286.  
  1287.  
  1288.  
  1289.  
  1290.  
  1291.  
  1292.  
  1293.  
  1294.  
  1295.  
  1296.  
  1297.  
  1298.  
  1299.  
  1300.  
  1301.  
  1302.  
  1303.  
  1304.  
  1305.  
  1306.  
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1321. â½áóá VII                                                    -- 23 --
  1322.  
  1323.  
  1324.                       ÄæìÄéìÄë ûêèï ÉÇüÄÆ¢ ÇìÇïêçÇÆÄÉÇ
  1325.      -----------------------------------------------------------------
  1326.  
  1327.           éßÑ ¿¡ΓÑα»αÑΓáΓ«αδ   óδ»«½¡∩εΓ   «»Ñαᵿ¿  »πΓѼ  ßτ¿Γδóá¡¿∩
  1328.      ½Ñ¬ßÑ¼δ »α«úαá¼¼δ ¿ óδí«αá ¡Ñ«íσ«ñ¿¼«⌐ Σπ¡¬µ¿¿ ñ½∩ ÑÑ óδ»«½¡Ñ¡¿∩.
  1329.      Äß¡«ó¡«⌐   µ¿¬½  αáí«Γδ  ñ½∩  ¿¡ΓÑα»αÑΓáΓ«αá  ∩ºδ¬á  SMALL  BASIC
  1330.      óδú½∩ñ¿Γ ß½ÑñπεΘ¿¼ «íαẫ¼.
  1331.  
  1332.            do {
  1333.              token_type = get_token();
  1334.              /* Åα«óÑα¬á ¡á ß««ΓóÑΓßΓó¿Ñ «»ÑαáΓ«απ ∩ºδ¬á */
  1335.              if (token_type == VARIABLE) {
  1336.                putback(); /* ó«ºóαáΓ »ÑαѼѡ¡«⌐ ó« óσ«ñ¡«⌐ »«Γ«¬ */
  1337.                assignment(); /* ñ½ªÑ¡ íδΓ∞ «»ÑαáΓ«α »α¿ßóá¿óá¡¿∩ */
  1338.              }
  1339.              else /* φΓ« ¬«¼á¡ñá */
  1340.  
  1341.  
  1342.                switch(tok) {
  1343.                  case PRINT:
  1344.                    print();
  1345.                    break;
  1346.                  case GOTO:
  1347.                    exec_if();
  1348.                    break;
  1349.  
  1350.                  case FOR:
  1351.                    exec_for();
  1352.                    break;
  1353.                  case NEXT:
  1354.                    next();
  1355.                    break;
  1356.                  case INPUT:
  1357.                    input();
  1358.                    break;
  1359.                  case GOSUB:
  1360.                    gosub();
  1361.                    break;
  1362.                  case RETURN:
  1363.                    greturn();
  1364.                    break;
  1365.                  case END:
  1366.                    exit(0);
  1367.                }
  1368.            } while (tok != FINISHED);
  1369.  
  1370.  
  1371.           æ¡áτá½á ½Ñ¬ßѼᠠ ßτ¿ΓδóáÑΓß∩  ¿º  »α«úαá¼¼δ.  ä½∩  πñ«íßΓóá
  1372.      á¡á½¿ºá ¬áªñá∩ ½Ñ¬ßѼá αáß»«½áúáÑΓß∩ ¡á  «Γñѽ∞¡«⌐  ßΓ᫬Ñ.  àß½¿
  1373.      ½Ñ¬ßѼá ∩ó½∩ÑΓß∩ »ÑαѼѡ¡«⌐,  Γ«, ß½Ññπ∩ ß¿¡Γá¬ß¿ßπ ∩ºδ¬á, ºá ¡Ñ⌐
  1374.      ñ«½ªÑ¡  ß½Ññ«óáΓ∞   «»ÑαáΓ«α   »α¿ßóá¿óá¡¿∩   (SMALL   BASIC   ¡Ñ
  1375.      »«ññÑনóáÑΓ   ßΓáα«¼«ñ¡πε  ¬«¼á¡ñπ  LET).  é  »α«Γ¿ó¡«¼  ß½πτáÑ,
  1376.      ½Ñ¬ßѼᠠßτ¿ΓáÑΓß∩  ¬«¼á¡ñ«⌐  ¿  ß  »«¼«Θ∞ε  «»ÑαáΓ«αá   case   ó
  1377.      ºáó¿ß¿¼«ßΓ¿  «Γ  º¡áτÑ¡¿∩  tok  »α«¿ßσ«ñ¿Γ  óδí«α ß««ΓóÑΓßΓóπεΘÑ⌐
  1378.  
  1379.  
  1380.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1381. â½áóá VII                                                    -- 24 --
  1382.  
  1383.  
  1384.      ¬«¼á¡ñδ. Å«ß¼«Γα¿ΓÑ, ¬á¬ αáí«ΓáÑΓ ¬áªñá∩ ¿º ¡¿σ.
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390.  
  1391.  
  1392.  
  1393.  
  1394.  
  1395.  
  1396.  
  1397.  
  1398.  
  1399.  
  1400.  
  1401.  
  1402.  
  1403.  
  1404.  
  1405.  
  1406.  
  1407.  
  1408.  
  1409.  
  1410.  
  1411.  
  1412.  
  1413.  
  1414.  
  1415.  
  1416.  
  1417.  
  1418.  
  1419.  
  1420.  
  1421.  
  1422.  
  1423.  
  1424.  
  1425.  
  1426.  
  1427.  
  1428.  
  1429.  
  1430.  
  1431.  
  1432.  
  1433.  
  1434.  
  1435.  
  1436.  
  1437.  
  1438.  
  1439.  
  1440.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1441. â½áóá VII                                                    -- 25 --
  1442.  
  1443.  
  1444.                èÄîÇìäÇ ÅÉêæéÇêéÇìꃠçìÇùàìêë.
  1445.      -----------------------------------------------------------------
  1446.  
  1447.           é  ∩ºδ¬Ñ   BASIC  «ß¡«ó¡«⌐   Σ«α¼«⌐  «»ÑαáΓ«αá  »α¿ßóá¿óá¡¿∩
  1448.      ∩ó½∩ÑΓß∩ ß½ÑñπεΘá∩:
  1449.  
  1450.                         <¿¼∩ »ÑαѼѡ¡«⌐>=<óδαáªÑ¡¿Ñ>
  1451.  
  1452.           öπ¡¬µ¿∩ assignment() »«ññÑনóáÑΓ φΓ«Γ Γ¿» »α¿ßóá¿óá¡¿∩.
  1453.  
  1454.            /* Åα¿ßó«¿Γ∞ º¡áτÑ¡¿Ñ »ÑαѼѡ¡«⌐ */
  1455.            assignment()
  1456.            {
  1457.              int var, value;
  1458.              /* »«½πτ¿Γ∞ ¿¼∩ »ÑαѼѡ¡«⌐ */
  1459.              get_token();
  1460.                if(!isalpha(*token)) {
  1461.                  serror(4); /* φΓ« ¡Ñ »ÑαѼѡ¡á∩ */
  1462.                  return;
  1463.                }
  1464.  
  1465.                /* »«¿ß¬ ¿¡ñѬßá »ÑαѼѡ¡«⌐ ó ¼áßß¿óÑ */
  1466.                var = toupper(*token)-'A';
  1467.  
  1468.                /* ßτ¿ΓáΓ∞ ß¿¼ó«½ αáóÑ¡ßΓóá*/
  1469.                get_token();
  1470.                if(*token!='=') {}
  1471.                  serror(3);
  1472.                  return;
  1473.                }
  1474.  
  1475.                /* ßτ¿ΓáΓ∞ »α¿ßóáѼ«Ñ »ÑαѼѡ¡«⌐ º¡áτÑ¡¿Ñ */
  1476.                get_exp(&value);
  1477.  
  1478.                /* »α¿ßó«¿Γ∞ º¡áτÑ¡¿Ñ*/
  1479.                variables[var] = value;
  1480.              }
  1481.  
  1482.  
  1483.           æ¡áτá½á assignment()  ßτ¿ΓδóáÑΓ ½Ñ¬ßÑ¼π ¿º »α«úαá¼¼δ.  ¥Γ« -
  1484.      ½Ñ¬ßѼá-»ÑαѼѡ¡á∩,  ¬«Γ«α«⌐ ñ«½ª¡á íδΓ∞ »α¿ßó«Ñ¡á óѽ¿τ¿¡á. àß½¿
  1485.      ½Ñ¬ßѼᠠ¡Ñ ∩ó½∩ÑΓß∩ »ÑαѼѡ¡«⌐,  Γ« ß««íΘáÑΓß∩ «í «Φ¿í¬Ñ.  çáΓѼ
  1486.      ßτ¿ΓδóáÑΓß∩ º¡á¬ αáóÑ¡ßΓóá («τÑαÑñ¡á∩ ½Ñ¬ßѼá).  äá½ÑÑ óδºδóáÑΓß∩
  1487.      Σπ¡¬µ¿∩ get_exp(), ¬«Γ«αá∩ óδτ¿ß½∩ÑΓ º¡áτÑ¡¿Ñ »ÑαѼѡ¡«⌐. öπ¡¬µ¿∩
  1488.      »«½πτáÑΓß∩ πñ¿ó¿Γѽ∞¡« »α«ßΓ«⌐ »«Γ«¼π, τΓ« á¡á½¿ºáΓ«α óδαáªÑ¡¿⌐ ¿
  1489.      get_token ñѽáεΓ í«½∞Φπε τáßΓ∞ απΓ¿¡¡«⌐ αáí«Γδ.
  1490.  
  1491.  
  1492.  
  1493.  
  1494.  
  1495.  
  1496.  
  1497.  
  1498.  
  1499.  
  1500.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1501. â½áóá VII                                                    -- 26 --
  1502.  
  1503.  
  1504.                èÄîÇìäÇ PRINT
  1505.      -----------------------------------------------------------------
  1506.  
  1507.           è«¼á¡ñá PRINT  ßΓá¡ñáαΓá  ∩ºδ¬á  BASIC  ñ«ßΓáΓ«τ¡«  ¼«Θ¡á∩ ¿
  1508.      ú¿í¬á∩,  «ß«íÑ¡¡« ¬«úñá »α¿¼Ñ¡∩ÑΓß∩ ÑÑ Σ«α¼áΓ PRINT  USING.  ò«Γ∩
  1509.      ß«ºñá¡¿Ñ Σπ¡¬µ¿¿, ¬«Γ«αá∩ αÑ὿ºπÑΓ óßѠ󫺼«ª¡«ßΓ¿ φΓ«⌐ ¬«¼á¡ñδ,
  1510.      óδσ«ñ¿Γ ºá αἬ¿ φΓ«⌐  ú½áóδ,  αáºαáíáΓδóáѼá∩  Σπ¡¬µ¿∩  ∩ó½∩ÑΓß∩
  1511.      ¡á¿í«½ÑÑ ó᪡«⌐.  é«Γ  «ß¡«ó¡á∩  Σ«α¼á  ¬«¼á¡ñδ PRINT ∩ºδ¬á SMALL
  1512.      BASIC:
  1513.  
  1514.                          PRINT <ß»¿ß«¬ áαúπ¼ÑÑ¡Γ«ó>
  1515.  
  1516.      úñÑ <ß»¿ß«¬ áαúπ¼Ñ¡Γ«ó> »αÑñßΓáó½∩ÑΓ ß«í«⌐  »ÑαÑτÑ¡∞  »ÑαѼѡ¡δσ,
  1517.      ºá¬½ετÑ¡¡δσ  ó  ¬áóδτ¬¿  ¿  αáºñѽѡ¡δσ  ºá»∩Γ묨  ¿½¿  Γ«τ¬«⌐  ß
  1518.      ºá»∩Γ«⌐.  öπ¡¬µ¿∩ print(), »αÑñßΓáó½Ñ¡¡á∩ ¡¿ªÑ, ∩ó½∩ÑΓß∩ á¡á½«ú«¼
  1519.      ¬«¼á¡ñδ   PRINT   ∩ºδ¬á  BASIC.  ÄíαáΓ¿ΓÑ  ó¡¿¼á¡¿Ñ,  τΓ«  »ÑτáΓ∞
  1520.      óδ»«½¡∩ÑΓß∩ ó ΓѽѠµ¿¬½á do-while,  πß½«ó¿Ñ¼ ºáóÑαΦÑ¡¿∩  ¬«Γ«α«ú«
  1521.      ∩ó½∩ÑΓß∩ óδó«ñ ¡á »ÑτáΓ∞ óßÑú« ß»¿ß¬á áαúπ¼Ñ¡Γ«ó ¬«¼á¡ñδ.
  1522.  
  1523.  
  1524.         /* Åα«ßΓÑ⌐Φá∩ óÑαß¿∩ «»ÑαáΓ«αá PRINT */
  1525.         void print()
  1526.         {
  1527.           int answer;
  1528.           int len=0, spaces;
  1529.           char last_delim;
  1530.           do {
  1531.                get_token(); /* »«½πτ¿Γ∞ ß½ÑñπεΘ¿⌐ φ½Ñ¼Ñ¡Γ ß»¿ß¬á */
  1532.                if (tok == EOL || tok == FINISHED) break;
  1533.                if (token_tipe == QUOTE) { /* φΓ« ßΓ᫬á */
  1534.                    printf(token);
  1535.                      len += strlen(token);
  1536.                     get_token();
  1537.               }
  1538.                else { /* φΓ« óδαáªÑ¡¿Ñ */
  1539.                   putback();
  1540.                   get_exp(&answer);
  1541.                   get_token();
  1542.                   len+= printf("%d", answer);
  1543.                }
  1544.                last_delim = *token;
  1545.                if (*token == ';') {
  1546.           /* éδτ¿ß½Ñ¡¿Ñ τ¿ß½á »α«íѽ«ó »α¿ »ÑαÑσ«ñÑ ¬ ß½ÑñπεΘÑ⌐
  1547.              Γáíπ½∩µ¿¿ */
  1548.                spaces = 8-(len % 8);
  1549.                len += spaces; /* ß¼ÑΘÑ¡¿Ñ ¡á «ñ¡π Γáíπ½∩µ¿ε */
  1550.                while (spaces) {
  1551.                  printf(" ");
  1552.                  spaces--;
  1553.                }
  1554.                }
  1555.                else if (*token == ','); /* ¡¿τÑú« ¡Ñ ñѽáΓ∞ */;
  1556.                else if (tok != EOL && tok != FINESHED) serror(0);
  1557.                } while (*token == ';' || *token == ',');
  1558.  
  1559.  
  1560.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1561. â½áóá VII                                                    -- 27 --
  1562.  
  1563.  
  1564.                if (tok == EOL || tok == FINESHED) {
  1565.                   if (last_delim != ';' && last_delim != ',')
  1566.                                                         printf("\n");
  1567.                   else serror(0); /* ÄΓßπΓßΓóπÑΓ αáºñѽ¿Γѽ∞ */
  1568.               }
  1569.  
  1570.           è«¼á¡ñá PRINT ¼«ªÑΓ  íδΓ∞  ¿ß»«½∞º«óá¡á  ñ½∩  óδó«ñá  ß»¿ß¬á
  1571.      »ÑαѼѡ¡δσ  ¿  ßΓα«τ¡δσ  ¬«¡ßΓá¡Γ  ¡á  φ¬αá¡.  àß½¿  ñóá φ½Ñ¼Ñ¡Γá
  1572.      αáºñÑ½Ñ¡δ  ºá»∩Γ«⌐,  Γ«  ¿σ  º¡áτÑ¡¿∩  óδó«ñ∩Γß∩  ¡á  »ÑτáΓ∞  íѺ
  1573.      »α«íѽ«ó (¬«¡¬áΓÑ¡¿απεΓß∩). àß½¿ ªÑ ñóá φ½Ñ¼Ñ¡Γá αáºñѽѡδ Γ«τ¬«⌐
  1574.      ß ºá»∩Γ«⌐,  Γ« óΓ«α«⌐ φ½Ñ¼Ñ¡Γ  óδó«ñ¿Γß∩  ¡áτ¿¡á∩,  ß«  ß½ÑñπεΘÑ⌐
  1575.      »«º¿µ¿¿  Γáíπ½∩µ¿¿.  àß½¿  ß»¿ß«¬ φ½Ñ¼Ñ¡Γ«ó ºá¬á¡τ¿óáÑΓß∩ ºá»∩Γ«⌐
  1576.      ¿½¿ Γ«τ¬«⌐ ß ºá»∩Γ«⌐,  Γ« »ÑαÑσ«ñ ¡á ¡«óπε ßΓ᫬π ¡Ñ óδ»«½¡∩ÑΓß∩.
  1577.  
  1578.           Åα¿óÑñÑ¡¡δÑ ¡¿ªÑ  »α¿¼Ñαδ  ó맮óπΓ  »ÑτáΓ∞  ñá¡¡δσ  ß  ¡«ó«⌐
  1579.      ßΓ᫬¿:
  1580.  
  1581.      PRINT X; Y; "¥ÆÄ æÆÉÄèÇ"
  1582.      PRINT 10 / 4
  1583.      PRINT
  1584.  
  1585.           öπ¡¬µ¿∩ print()  ¿ß»«½∞ºπÑΓ  Σπ¡¬µ¿ε  putback() ñ½∩ ó«ºóαáΓá
  1586.      ½Ñ¬ßѼδ ó« óσ«ñ¡«⌐ »«Γ«¬. Åα¿τ¿¡«⌐ φΓ«ú« ∩ó½∩ÑΓß∩ Γ«, τΓ« »αѪñÑ,
  1587.      τѼ  ¡áτáΓ∞  »ÑτáΓ∞ ßΓ᫬¿,  ºá¬½ετÑ¡¡«⌐ ó ß¬«í¬¿,  ¿½¿ τ¿ß½«ó«ú«
  1588.      óδαáªÑ¡¿∩,  Σπ¡¬µ¿∩  print()  ñ«½ª¡á  »α«á¡á½¿º¿α«óáΓ∞  ß½ÑñπεΘ¿⌐
  1589.      φ½Ñ¼Ñ¡Γ   ß»¿ß¬á  áαúπ¼Ñ¡Γ«ó.  àß½¿  ß½ÑñπεΘ¿⌐  φ½Ñ¼Ñ¡Γ  ∩ó½∩ÑΓß∩
  1590.      óδαáªÑ¡¿Ñ¼,  Γ« »Ñαóδ⌐ ΓÑα¼ óδαáªÑ¡¿∩ ñ«½ªÑ¡ íδΓ∞ »«¼ÑΘÑ¡ «íαáΓ¡«
  1591.      ó«  óσ«ñ¡«⌐  »«Γ«¬,  Γᬠ ¬á¬  ó  »α«Γ¿ó¡«¼ ß½πτáÑ á¡á½¿ºáΓ«απ ¡Ñ
  1592.      πñáßΓß∩ ¬«ααÑ¬Γ¡« «íαáí«ΓáΓ∞ φΓ« óδαáªÑ¡¿Ñ.
  1593.  
  1594.  
  1595.  
  1596.  
  1597.  
  1598.  
  1599.  
  1600.  
  1601.  
  1602.  
  1603.  
  1604.  
  1605.  
  1606.  
  1607.  
  1608.  
  1609.  
  1610.  
  1611.  
  1612.  
  1613.  
  1614.  
  1615.  
  1616.  
  1617.  
  1618.  
  1619.  
  1620.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1621. â½áóá VII                                                    -- 28 --
  1622.  
  1623.  
  1624.           èÄîÇìäÇ INPUT.
  1625.      -----------------------------------------------------------------
  1626.  
  1627.           é ∩ºδ¬Ñ   BASIC   ¬«¼á¡ñá   INPUT  ¿ß»«½∞ºπÑΓß∩  ñ½∩  τΓÑ¡¿∩
  1628.      ¿¡Σ«α¼áµ¿¿ ß ¬½áó¿áΓπαδ ¿ ß«σαá¡Ñ¡¿∩ ÑÑ ó »ÑαѼѡ¡δσ.  Ä¡á  ¿¼ÑÑΓ
  1629.      ñóá  «ß¡«ó¡δσ  Σ«α¼áΓá.  ÅÑαóδ⌐  Σ«α¼áΓ  ¬«¼á¡ñδ  óδó«ñ¿Γ  ¼áα¬Ñα
  1630.      «ª¿ñá¡¿∩ óó«ñá ñá¡¡δσ ('?') ¿ »ÑαÑó«ñ¿Γ óßε »α«úαá¼¼π  ó «ª¿ñá¡¿Ñ
  1631.      óó«ñá ñá¡¡δσ:
  1632.  
  1633.                            INPUT <¿¼∩ »ÑαѼѡ¡«⌐>
  1634.  
  1635.           éΓ«α«⌐ Σ«α¼áΓ   »α¿ó«ñ¿Γ  ¬  «Γ«íαáªÑ¡¿ε  ¡á  φ¬αá¡Ñ  ßΓ᫬¿
  1636.      ß¿¼ó«½«ó, »«ß½Ñ τÑú« «ª¿ñáÑΓß∩ óó«ñ ñá¡¡δσ:
  1637.  
  1638.                INPUT "<ß¿¼ó«½∞¡á∩ ßΓ᫬á>" <¿¼∩ »ÑαѼѡ¡«⌐>
  1639.  
  1640.           öπ¡¬µ¿∩ input (),  »α¿óÑñÑ¡¡á∩ ¡¿ªÑ, αÑ὿ºπÑΓ ¬«¼á¡ñπ ∩ºδ¬á
  1641.      BASIC INPUT.
  1642.  
  1643.          /* Åα«ßΓÑ⌐Φá∩ óÑαß¿∩ «»ÑαáΓ«αá INPUT */
  1644.          void input()
  1645.          {
  1646.            char str[80], var;
  1647.            int i;
  1648.  
  1649.            get_token(); /*ǡ὿º ¡á½¿τ¿∩ ß¿¼ó«½∞¡«⌐ ßΓ᫬¿ */
  1650.            if (token_type == QUOTE) {
  1651.              printf(token); /*àß½¿ ßΓ᫬á ÑßΓ∞, »α«óÑα¬á ºá»∩Γ«⌐ */
  1652.              get_token();
  1653.              if (*token != ',') serror(1);
  1654.              get_token();
  1655.            }
  1656.            else printf("? "); /* é »α«Γ¿ó¡«¼ ß½πτáÑ «Γ«íαáªÑ¡¿Ñ "? "*/
  1657.       var = toupper(*token)-'A'; /* éδτ¿ß½Ñ¡¿Ñ ¿¡ñѬßá ¼áßß¿óá ¿¼Ñ¡ */
  1658.            scanf("%d",&i);   /* ùΓÑ¡¿Ñ óσ«ñ¡δσ ñá¡¡δσ */
  1659.            variables[var] = i;  /* æ«σαá¡Ñ¡¿Ñ ¿σ */
  1660.          }
  1661.  
  1662.           Éáí«Γá  Σπ¡¬µ¿¿  ßΓá¡ÑΓ  ∩ß¡«⌐   ¿   »«¡∩Γ¡«⌐  »«ß½Ñ  τΓÑ¡¿∩
  1663.      ¬«¼¼Ñ¡Γáα¿Ñó.
  1664.  
  1665.  
  1666.  
  1667.  
  1668.  
  1669.  
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.  
  1676.  
  1677.  
  1678.  
  1679.  
  1680.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1681. â½áóá VII                                                    -- 29 --
  1682.  
  1683.  
  1684.                èÄîÇìäÇ GOTO
  1685.      -----------------------------------------------------------------
  1686.  
  1687.           æÑ⌐τáß óδ πó¿ñ¿ΓÑ αÑ὿ºáµ¿ε «ñ¡«⌐ ¿º ßá¼δσ  »α«ßΓδ󠬫¼á¡ñ,
  1688.      ¡« ó Γ« ªÑ óαѼ∩ ñ«ó«½∞¡« ß½«ª¡«⌐ ñ½∩ αáºαáí«Γτ¿¬á. é ∩ºδ¬Ñ BASIC
  1689.      «ß¡«ó¡«⌐ Σ«α¼«⌐ »α«úαá¼¼¡«ú« π»αáó½Ñ¡¿∩ ∩ó½∩ÑΓß∩ ¬«¼á¡ñá  GOTO. é
  1690.      ßΓá¡ñáαΓÑ ∩ºδ¬á BASIC «íΩÑ¬Γ«¼, ¡á ¬«Γ«αδ⌐ ñ«½ªÑ¡ π¬áºδóáΓ∞ GOTO,
  1691.      ∩ó½∩ÑΓß∩ ¡«¼Ñα ßΓ᫬¿.  ¥Γ«Γ Γαáñ¿µ¿«¡¡δ⌐ »«ñσ«ñ ß«σαá¡∩ÑΓß∩ ¿  ó
  1692.      ∩ºδ¬Ñ  SMALL BASIC.  Äñ¡á¬«,  SMALL BASIC ¡Ñ ΓαÑíπÑΓß∩ ¡π¼Ñα«óáΓ∞
  1693.      ¬áªñπε ßΓ᫬π.  ì«¼Ñα ßΓ᫬¿ ¡Ñ«íσ«ñ¿¼ Γ«½∞¬« ó Γ«¼ ß½πτáÑ,  Ñß½¿
  1694.      ¡á  ¡ÑÑ  ßßδ½áÑΓß∩  ¬«¼á¡ñá  GOTO.  Äß¡«ó¡«⌐  Σ«α¼áΓ ¬«¼á¡ñδ GOTO
  1695.      »αÑñßΓáó½Ñ¡ ¡¿ªÑ:
  1696.  
  1697.                           GOTO <¡«¼Ñα ßΓ᫬¿>
  1698.  
  1699.           Äß¡«ó¡«⌐ ß½«ª¡«ßΓ∞ε αÑ὿ºáµ¿¿ «»ÑαáΓ«αá GOTO  ∩ó½∩ÑΓß∩  Γ«,
  1700.      τΓ« «¡ ñ«½ªÑ¡ »«ºó«½∩Γ∞ ß«óÑαΦáΓ∞ »ÑαÑσ«ñδ ¬á¬ ó¡¿º,  Γᬠ¿ óóÑασ
  1701.      »«  »α«úαá¼¼Ñ.  ä½∩  πñ«ó½ÑΓó«αÑ¡¿∩  φΓ«ú«  ΓαÑí«óá¡¿∩  ¡Ñ«íσ«ñ¿¼
  1702.      ¼Ñσá¡¿º¼, ¬«Γ«αδ⌐ íδ »α«ß¼áΓα¿óá½ »α«úαá¼¼π, óδí¿αá½ ¬áªñπε ¼ÑΓ¬π
  1703.      ¿ »«¼ÑΘá½ ÑÑ ó Γáí½¿µπ, ß«ñÑαªáΘπε ¬á¬ ¿¼∩ ¼ÑΓ¬¿ Γá¬, ¿ π¬áºáΓѽ∞
  1704.      ÑÑ αẼÑΘÑ¡¿∩ ó »α«úαá¼¼Ñ. Æá¬á∩ Γáí½¿µá «»αÑñѽѡᠡ¿ªÑ.
  1705.  
  1706.           struct label {
  1707.             char name[LAB_LEN]; /* ¿¼∩ ¼ÑΓ¬¿ */
  1708.             char *p; /* π¬áºáΓѽ∞ ¡á ¼ÑßΓ« αẼÑΘÑ¡¿∩ ó »α«úαἼѠ*/
  1709.           };
  1710.           struct label label_table[NUM_LAB];
  1711.  
  1712.           öπ¡¬µ¿∩, ¬«Γ«αá∩  »α«ß¼áΓα¿óáÑΓ  »α«úαá¼¼π ¿ óδí¿αáÑΓ ¬áªñπε
  1713.      ¼ÑΓ¬π ñ½∩ αẼÑΘÑ¡¿∩ ÑÑ ó Γáí½¿µÑ,  ¡áºδóáÑΓß∩ scan_labels(). Ä¡á
  1714.      ¿ «ß¡«ó¡δÑ »«ññÑনóáεΘ¿Ñ ÑÑ Σπ¡¬µ¿¿ »α¿óÑñÑ¡δ ¡¿ªÑ.
  1715.  
  1716.          /* Å«¿ß¬ óßÑσ ¼ÑΓ«¬ */
  1717.          void scan_labels()
  1718.          {
  1719.            register int loc;
  1720.            char *temp;
  1721.  
  1722.            label_init();  /* «í¡π½Ñ¡¿Ñ óßÑσ ¼ÑΓ«¬ */
  1723.            temp = prog;   /* ºá»¿ß∞ π¬áºáΓѽ∩ ¡á ¡áτὫ »α«úαá¼¼δ */
  1724.            /* àß½¿ »Ñαóá∩ ½Ñ¬ßѼá Σá⌐½á ∩ó½∩ÑΓß∩ ¼ÑΓ¬«⌐ */
  1725.            get_token();
  1726.            if(token_type==NUMBER) {
  1727.              strcpy(label_table[0].name,token);
  1728.              label_table[0].p=prog;
  1729.            }
  1730.  
  1731.            find_eol();
  1732.            do {
  1733.              get_token();
  1734.              if(token_type==NUMBER) {
  1735.                loc=get_next_label(token);
  1736.                if(loc == -1 || loc == -2) {
  1737.                    (loc == -1) ? serror(5):serror(6);
  1738.  
  1739.  
  1740.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1741. â½áóá VII                                                    -- 30 --
  1742.  
  1743.  
  1744.                }
  1745.                strcpy(label_table[loc].name, token);
  1746.            label_table[loc].p = prog; /* ΓѬπΘ¿⌐ π¬áºáΓѽ∞ »α«úαá¼¼δ*/
  1747.              }
  1748.              /* àß½¿ ßΓα«¬á ¡Ñ »«¼ÑτÑ¡á, »ÑαÑσ«ñ ¬ ß½ÑñπεΘÑ⌐ */
  1749.              if(tok!=EOL) find_eol();
  1750.            } while(tok != FINISHED);
  1751.            prog = temp; /* ó«ßßΓá¡«ó¿Γ∞ ¡áτá½∞¡«Ñ º¡áτÑ¡¿Ñ*/
  1752.          }
  1753.  
  1754.          /* ê¡¿µ¿á½¿ºáµ¿∩ ¼áßß¿óá σαá¡Ñ¡¿∩ ¼ÑΓ«¬.
  1755.             Å« ß«ú½áΦÑ¡¿ε ¿¼∩ ¡π½Ñó«⌐ ¼ÑΓ¬¿ π¬áºδóáÑΓ, τΓ«
  1756.             ñá¡¡á∩ »«º¿µ¿∩ ¼áßß¿óá ¡Ñ ¿ß»«½∞ºπÑΓß∩  */
  1757.          void label_init()
  1758.          {
  1759.            register int t;
  1760.            for(t=0;t<NUM_LAB;++t) lable_table[t].name[0]='\0';
  1761.          }
  1762.          /* Å«¿ß¬ ¡áτá½á ß½ÑñπεΘÑ⌐ ßΓ᫬¿ */
  1763.          void find_eol()
  1764.          {
  1765.            while (*prog!='\n'  && *prog!='\0') ++prog;
  1766.            if (*prog) prog++;
  1767.          }
  1768.  
  1769.          /* é«ºóαáΘáÑΓ ¿¡ñѬߠ߽ÑñπεΘÑ⌐ ßó«í«ñ¡«⌐ »«º¿µ¿¿ ó ¼áßß¿óÑ
  1770.             ¼ÑΓ«¬. ç¡áτÑ¡¿Ñ -1 π¬áºδóáÑΓ ¡á »ÑαÑ»«½¡Ñ¡¿Ñ ¼áßß¿óá.
  1771.             ç¡áτÑ¡¿Ñ -2 π¬áºδóáÑΓ ¡á ñπí½¿α«óá¡¿Ñ ¿¼Ñ¡ ¼ÑΓ«¬      */
  1772.          get_next_label(s)
  1773.          char *s;
  1774.          {
  1775.            register int t;
  1776.  
  1777.            for (t=0;t<NUM_LAB;++t) {
  1778.              if (label_table[t].name[0] == 0) return t;
  1779.              if(!strcmp(label_table[t].name,s)) return -2; /* ñπí½∞ */
  1780.            }
  1781.            return -1;
  1782.          }
  1783.  
  1784.  
  1785.           öπ¡¬µ¿∩ scan_labels() ß««íΘáÑΓ « ñóπσ Γ¿»áσ «Φ¿í«¬. ÅÑαóδ⌐ -
  1786.      φΓ« ñπí½¿απεΘ¿Ñ ¼ÑΓ¬¿.  é ∩ºδ¬Ñ BASIC (¬á¬ ¿ ó í«½∞Φ¿¡ßΓóÑ ñαπú¿σ
  1787.      ∩ºδ¬«ó)  ¡Ñ ¼«ªÑΓ íδΓ∞ ñóπσ «ñ¿¡á¬«óδσ ¼ÑΓ«¬. éΓ«α«⌐ Γ¿» «Φ¿í¬¿ -
  1788.      φΓ«  »ÑαÑ»«½¡Ñ¡¿Ñ  Γáí½¿µδ  ¼ÑΓ«¬.  ÉẼÑα  Γáí½¿µδ  «»αÑñѽѡ  ß
  1789.      »«¼«Θ∞ε ¼á¬α««»αÑñѽѡ¿∩ NUM_LAB. éδ ¼«ªÑΓÑ ¿º¼Ñ¡¿Γ∞ Ñú« ó Γπ ¿½¿
  1790.      ¿¡πε ßΓ«α«¡π.
  1791.  
  1792.           Æáí½¿µá ¼ÑΓ«¬ ßΓα«¿Γß∩ «ñ¿¡ αáº,  ¿ óδ»«½¡Ñ¡¿Ñ »ÑαÑσ«ñá GOTO
  1793.      óδ»«½¡∩ÑΓß∩ ß »«¼«Θ∞ε Σπ¡¬µ¿¿ exec_goto(), »α¿óÑñÑ¡¡«⌐ ¡¿ªÑ.
  1794.  
  1795.  
  1796.          /* ÉÑ὿ºáµ¿∩ «»ÑαáΓ«αá GOTO */
  1797.          void exec_goto()
  1798.  
  1799.  
  1800.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1801. â½áóá VII                                                    -- 31 --
  1802.  
  1803.  
  1804.          {
  1805.            char *loc;
  1806.  
  1807.            get_token(); /* »«½πτ¿Γ∞ ¼ÑΓ¬π »ÑαÑσ«ñá */
  1808.            /* Å«¿ß¬ ¼ÑßΓ«»«½«ªÑ¡¿∩ ¼ÑΓ¬¿ ó »α«úαá¼¼Ñ*/
  1809.            loc = find_label(token);
  1810.            if (loc == '\0')
  1811.              serror(7);   /* îÑΓ¬á ¡Ñ ¡á⌐ñѡᠠ*/
  1812.            else prog=loc; /*Åα«úαἼᠡáτá½á óδ»«½¡∩Γß∩ ¡Ñ ß ¡áτá½á*/
  1813.          }
  1814.  
  1815.          /* Å«¿ß¬ ¼ÑßΓ«»«½«ªÑ¡¿∩ ¼ÑΓ¬¿. ì«½∞ ó«ºóαáΘáÑΓß∩, Ñß½¿ ¼ÑΓ¬á
  1816.             ¡Ñ ¡á⌐ñÑ¡á; ó »α«Γ¿ó¡«¼ ß½πτáÑ ó«ºóαáΘáÑΓß∩ π¬áºáΓѽ∞ ¡á
  1817.             ¼ÑßΓ«, úñÑ αáß»«½«ªÑ¡á ¼ÑΓ¬á                            */
  1818.  
  1819.          char *find_label(s)
  1820.          char *s;
  1821.          {
  1822.          register int t;
  1823.  
  1824.          for (t=0;t<NUM_LAB;++t)
  1825.           if (!strcmp(label_tabel[t].name,s)) return label_tabel[t].p;
  1826.          return '\0';
  1827.          }
  1828.  
  1829.           éß»«¼«úáΓѽ∞¡á∩ Σπ¡¬µ¿∩ find_label(), »«½πτá∩ ¼ÑΓ¬π, ¿ΘÑΓ ÑÑ
  1830.      ó  Γáí½¿µÑ  ¼ÑΓ«¬  ¿  ó«ºóαáΘáÑΓ π¬áºáΓѽ∞ ¡á ¡ÑÑ.  àß½¿ ¼ÑΓ¬á ¡Ñ
  1831.      «í¡áαπªÑ¡á,  ó«ºóαáΘáÑΓ, º¡áτÑ¡¿Ñ null. àß½¿ áñαÑß ¡Ñ null, Γ« «¡
  1832.      »α¿ßóá¿óáÑΓß∩   »ÑαѼѡ¡«⌐  prog,  τΓ«  óδºδóáÑΓ  óδ»«½¡Ñ¡¿Ñ  Γ«⌐
  1833.      ßΓ᫬¿,  ¬«Γ«αá∩  íδ½á  »«¼Ñτѡᠠ¼ÑΓ¬«⌐.  (Å«¼¡¿ΓÑ  «  Γ«¼,  τΓ«
  1834.      π¬áºáΓѽ∞  prog  «»¿ßδóáÑΓ  »πΓ∞  óδ»«½¡Ñ¡¿∩ ßτ¿Γá¡«⌐ »α«úαá¼¼δ).
  1835.      àß½¿ π¬áºáΓѽ∞ ¡Ñ «í¡áαπªÑ¡,  Γ« óδñáÑΓß∩ ß««íΘÑ¡¿Ñ  «  Γ«¼,  τΓ«
  1836.      ¼ÑΓ¬á ¡Ñ«»αÑñѽѡá.
  1837.  
  1838.  
  1839.  
  1840.  
  1841.  
  1842.  
  1843.  
  1844.  
  1845.  
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852.  
  1853.  
  1854.  
  1855.  
  1856.  
  1857.  
  1858.  
  1859.  
  1860.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1861. â½áóá VII                                                    -- 32 --
  1862.  
  1863.  
  1864.                ÄÅàÉÇÆÄÉ IF
  1865.      -----------------------------------------------------------------
  1866.  
  1867.            ê¡ΓÑα»αÑΓáΓ«α SMALL  BASIC  «íαáíáΓδóáÑΓ  «»ÑαáΓ«α   IF   ó
  1868.      ß««ΓóÑΓßΓó¿¿   ß«   ßΓá¡ñáαΓ«¼   ∩ºδ¬á   BASIC.  é  SMALL  BASIC,
  1869.      «ΓßπΓßΓóπÑΓ ELSE ¿ »«ññÑনóáÑΓß∩ Γ«½∞¬« Γα¿  πß½«ó¿∩:  "í«½∞ΦÑ",
  1870.      "¼Ñ¡∞ΦÑ" ¿½¿ "αáó¡«". (¥Γ« ßñѽᡫ ñ½∩ Γ«ú«, τΓ«íδ óδ ¼«ú½¿ ½Ñú¬«
  1871.      »«¡∩Γ∞ αáí«Γπ φΓ«ú« «»ÑαáΓ«αá). Äß¡«ó¡«⌐ Σ«α¼áΓ «»ÑαáΓ«αá:
  1872.  
  1873.             IF <óδαáªÑ¡¿Ñ><«»ÑαáΓ«α><óδαáªÑ¡¿Ñ> THEN <«»ÑαáΓ«α>
  1874.  
  1875.           Ä»ÑαáΓ«α, ßΓ«∩Θ¿⌐  »«ß½Ñ  THEN,  óδ»«½¡∩ÑΓß∩  Γ«½∞¬«  ó  Γ«¼
  1876.      ß½πτáÑ,   Ñß½¿  º¡áτÑ¡¿Ñ  ßαáó¡Ñ¡¿∩  ∩ó½∩ÑΓß∩  ¿ßΓ¿¡¡δ¼.  öπ¡¬µ¿∩
  1877.      exec_if(),  »α¿óÑñÑ¡¡á∩ ¡¿ªÑ,  «íÑß»Ñτ¿óáÑΓ óδ»«½¡Ñ¡¿Ñ φΓ«⌐ Σ«α¼δ
  1878.      «»ÑαáΓ«αá IF.
  1879.  
  1880.          /* Åα«ßΓÑ⌐Φá∩ αÑ὿ºáµ¿∩ «»ÑαáΓ«αá IF  */
  1881.          void exec_if()
  1882.          {
  1883.            int x , y, cond;
  1884.            char op;
  1885.            get_exp(&x); /* »«½πτ¿Γ∞ ½Ñó«Ñ óδαáªÑ¡¿Ñ */
  1886.            get_token(); /* »«½πτ¿Γ∞ «»ÑαáΓ«α  */
  1887.            if (!strchr("=<>", *token)) {
  1888.            serror(0);      /* ¡Ññ«»πßΓ¿¼δ⌐ «»ÑαáΓ«α  */
  1889.            return;
  1890.          }
  1891.          op=*token;
  1892.          get_exp(&y);  /* »«½πτ¿Γ∞ »αáó«Ñ óδαáªÑ¡¿Ñ */
  1893.          /* Ä»αÑñѽѡ¿Ñ αѺπ½∞ΓáΓá */
  1894.          cond=0;
  1895.          switch(op) {
  1896.              case '=':
  1897.            if(x==y) cond=1;
  1898.            break;
  1899.              case '<':
  1900.            if(x<y) cond=1;
  1901.            break;
  1902.              case '>':
  1903.            if(x>y) cond=1;
  1904.            break;
  1905.          }
  1906.          if(cond) {  /* Ñß½¿ ¿ßΓ¿¡á, Γ« »«¿ß¬ ¡πª¡«ú« IF  */
  1907.            get_token();
  1908.            if(tok!=THEN) {
  1909.               serror(8);
  1910.               return;
  1911.            }  /* é »α«Γ¿ó¡«¼ ß½πτáÑ »α«úαἼᠻα«ñ«½ªáÑΓß∩ ß«
  1912.                    ß½ÑñπεΘÑ⌐ ßΓ᫬¿  */
  1913.          }
  1914.          else find_eol(); /* »«¿ß¬ ßΓ᫬¿ »α«ñ«½ªÑ¡¿∩ »α«úαá¼¼δ */
  1915.        }
  1916.  
  1917.           öπ¡¬µ¿∩ exec_if() óδ»«½¡∩ÑΓß∩ ß½ÑñπεΘ¿¼ «íαẫ¼:
  1918.  
  1919.  
  1920.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1921. â½áóá VII                                                    -- 33 --
  1922.  
  1923.  
  1924.          1. éδτ¿ß½∩ÑΓß∩ º¡áτÑ¡¿Ñ ½Ñó«ú« óδαáªÑ¡¿∩.
  1925.          2. æτ¿ΓδóáÑΓß∩ «»ÑαáΓ«α ßαáó¡Ñ¡¿∩.
  1926.          3. éδτ¿ß½∩ÑΓß∩ óѽ¿τ¿¡á »αáó«ú« óδαáªÑ¡¡¿∩.
  1927.          4. éδ»«½¡∩ÑΓß∩ «»Ñαᵿ∩ ßαáó¡Ñ¡¿∩.
  1928.          5. àß½¿ πß½«ó¿Ñ ∩ó½∩ÑΓß∩ ¿ßΓ¿¡«⌐, Γ« óδ»«½¡∩ÑΓß∩ »«¿ß¬  THEN;
  1929.             ó  »α«Γ¿ó¡«¼ ß½πτáÑ, find_eol  óδ»«½¡∩ÑΓ »ÑαÑσ«ñ ¡á ¡áτὫ
  1930.             ß½ÑñπεΘÑ⌐ ßΓ᫬¿.
  1931.  
  1932.  
  1933.  
  1934.  
  1935.  
  1936.  
  1937.  
  1938.  
  1939.  
  1940.  
  1941.  
  1942.  
  1943.  
  1944.  
  1945.  
  1946.  
  1947.  
  1948.  
  1949.  
  1950.  
  1951.  
  1952.  
  1953.  
  1954.  
  1955.  
  1956.  
  1957.  
  1958.  
  1959.  
  1960.  
  1961.  
  1962.  
  1963.  
  1964.  
  1965.  
  1966.  
  1967.  
  1968.  
  1969.  
  1970.  
  1971.  
  1972.  
  1973.  
  1974.  
  1975.  
  1976.  
  1977.  
  1978.  
  1979.  
  1980.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  1981. â½áóá VII                                                    -- 34 --
  1982.  
  1983.  
  1984.                ûêèï FOR
  1985.      -----------------------------------------------------------------
  1986.  
  1987.           Åα«í½Ñ¼á «íαáí«Γ¬¿  ¿¡ΓÑα»αÑΓáΓ«α«¼  «»ÑαáΓ«αá  µ¿¬½á   FOR,
  1988.      óσ«ñ∩ΘÑú«  ó  ß«ßΓáó  «»ÑαáΓ«αá  BASIC,  αÑΦѡᠠ󠠡áΦѼ  ß½πτáÑ
  1989.      ñ«ó«½∞¡«  «α¿ú¿¡á½∞¡«.  Äß¡«ó¡«⌐  Σ«α¼áΓ  «»ÑαáΓ«αá   µ¿¬½á   FOR
  1990.      ß½ÑñπεΘ¿⌐:
  1991.  
  1992.       FOR<¿¼∩ π»αáó½∩εΘÑ⌐ »ÑαѼѡ¡«⌐>=<¡áτ. º¡áτÑ¡¿Ñ>TO<¬«¡. º¡áτÑ¡¿Ñ>
  1993.           .
  1994.           .
  1995.           .
  1996.         »«ß½Ññ«óáΓѽ∞¡«ßΓ∞ «»ÑαáΓ«α«ó
  1997.           .
  1998.           .
  1999.           .
  2000.        NEXT
  2001.  
  2002.           éÑαß¿∩ «»ÑαáΓ«αá  FOR,  »«ññÑনóáѼá∩ ¿¡ΓÑα»αÑΓáΓ«α«¼ SMALL
  2003.      BASIC,  αÑ὿ºπÑΓ µ¿¬½ ß »«½«ª¿Γѽ∞¡δ¼ »α«αáΘÑ¡¿Ñ¼  αáó¡δ¼  1  ¡á
  2004.      ¬áªñπε ¿ΓÑαáµ¿ε µ¿¬½á. Åáαá¼ÑΓα STEP ¡Ñ »«ññÑনóáÑΓß∩.
  2005.  
  2006.           é ∩ºδ¬Ñ   BASIC,   Γ«τ¡«  ΓᬪѠ ¬á¬  ¿  ó  C¿,  ñ«»π߬áÑΓß∩
  2007.      ó½«ªÑ¡¡«ßΓ∞ µ¿¬½á FOR.  Äß¡«ó¡«⌐ ¿ºε¼¿¡¬«⌐,  »α¿ αÑ὿ºáµ¿¿ φΓ«ú«
  2008.      «»ÑαáΓ«αá,  ß  Γ«τ¬¿ ºαÑ¡¿∩ »α«úαá¼¼¿ßΓá-»α«ΣÑßß¿«¡á½á,  ∩ó½∩ÑΓß∩
  2009.      ß«σαá¡Ñ¡¿Ñ ¿¡Σ«α¼áµ¿¿ « ¬áªñ«¼  ó½«ªÑ¡¡«¼  µ¿¬½Ñ  ß«  ßß佬«⌐  ¡á
  2010.      ó¡ÑΦ¡¿⌐   µ¿¬½.   ä½∩  αÑ὿ºáµ¿¿  φΓ«⌐  ¼á½Ñ¡∞¬«⌐,  ¡«  óßÑ-Γᬿ
  2011.      ºá¬«óδન      (Γαπñ¡«ßΓ¿      óßÑúñá      αáñπεΓ       ¡áßΓ«∩Θ¿σ
  2012.      »α«úαá¼¼¿ßΓ«ó-¼πªτ¿¡),  ¿ß»«½∞ºπÑΓß∩ ßΓѬ«óá∩ ßΓαπ¬Γπαá,  ¬«Γ«αá∩
  2013.      αáí«ΓáÑΓ ß½ÑñπεΘ¿¼ «íαẫ¼:  ìáτὫ µ¿¬½á,  ¿¡Σ«α¼áµ¿∩ « º¡áτÑ¡¿¿
  2014.      π»αáó½∩εΘÑ⌐  »ÑαѼѡ¡«⌐  µ¿¬½á  ¿  ÑÑ ¬«¡Ñτ¡«¼ º¡áτÑ¡¿¿,  á ΓᬪÑ
  2015.      ¼ÑßΓ« αáß»«½«ªÑ¡¿∩ µ¿¬½á  ó  ΓѽѠ »α«úαá¼¼δ  ºá¡«ß∩Γß∩  ó  ßΓѬ.
  2016.      èáªñδ⌐ αáº,  »α¿ ñ«ßΓ¿ªÑ¡¿¿ «»ÑαáΓ«αá NEXT,  ¿º ßΓѬᠿºó½Ñ¬áÑΓß∩
  2017.      ¿¡Σ«α¼áµ¿∩ « º¡áτÑ¡¿¿ π»αáó½∩εΘÑ⌐ »ÑαѼѡ¡«⌐,  ºáΓѼ ÑÑ  º¡áτÑ¡¿Ñ
  2018.      »ÑαÑßτ¿ΓδóáÑΓß∩  ¿ ßαáó¡¿óáÑΓß∩ ß ¬«¡Ñτ¡δ¼ º¡áτÑ¡¿Ñ¼ µ¿¬½á.  àß½¿
  2019.      º¡áτÑ¡¿Ñ π»αáó½∩εΘÑ⌐ »ÑαѼѡ¡«⌐ µ¿¬½á ñ«ßΓ¿ú½«  ßó«Ñú«  ¬«¡Ñτ¡«ú«
  2020.      º¡áτÑ¡¿∩,  óδ»«½¡Ñ¡¿Ñ  µ¿¬½á  »αѬαáΘáÑΓß∩ ¿ óδ»«½¡∩ÑΓß∩ «»ÑαáΓ«α
  2021.      »α«úαá¼¼δ ß½ÑñπεΘ¿⌐ ºá «»ÑαáΓ«α«¼ NEXT.  é  »α«Γ¿ó¡«¼  ß½πτáÑ,  ó
  2022.      ßΓѬ  ºá¡«ß¿Γß∩  ¡«óá∩ ¿¡Σ«α¼áµ¿∩ ¿ óδ»«½¡Ñ¡¿Ñ µ¿¬½á ¡áτ¿¡áÑΓß∩ ß
  2023.      Ñú« ¡áτá½á.  Æá¬¿¼  ªÑ  «íαẫ¼  «íÑß»Ñτ¿óáÑΓß∩  ¿¡ΓÑα»αÑΓᵿ∩  ¿
  2024.      óδ»«½¡Ñ¡¿Ñ ó½«ªÑ¡¡δσ µ¿¬½«ó.  é ßΓѬ«»«ñ«í¡«⌐ ßΓαπ¬ΓπαѠ󽫪ѡ¡δσ
  2025.      µ¿¬½«ó ¬áªñδ⌐ FOR ñ«½ªÑ¡ íδΓ∞ ºá¬αδΓ  ß««ΓóÑΓßΓóπεΘ¿¼  «»ÑαáΓ«α«¼
  2026.      NEXT.
  2027.  
  2028.           ä½∩  αÑ὿ºáµ¿¿  «»ÑαáΓ«αá  µ¿¬½á  FOR   ßΓѬ  ñ«½ªÑ¡  ¿¼ÑΓ∞
  2029.      ß½ÑñπεΘπε ßΓαπ¬Γπαπ:
  2030.  
  2031.           struct for_stack {
  2032.                int var; /* ßτÑΓτ¿¬ µ¿¬½á */
  2033.                int target; /* ¬«¡Ñτ¡«Ñ º¡áτÑ¡¿Ñ */
  2034.                char *loc;
  2035.           } fstack[FOR_NEST]; /* ßΓѬ ñ½∩ µ¿¬½á FOR/NEXT */
  2036.           int ftos; /* ¿¡ñѬߠ¡áτá½á ßΓѬá FOR */
  2037.  
  2038.  
  2039.  
  2040.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2041. â½áóá VII                                                    -- 35 --
  2042.  
  2043.  
  2044.           ç¡áτÑ¡¿Ñ ¼á¬α«ßá  FOR_NEST  «úαá¡¿τ¿óáÑΓ πα«óÑ¡∞ ó½«ªÑ¡¡«ßΓ¿
  2045.      µ¿¬½á.  (Å«  π¼«½τá¡¿ε  ñ«»π߬áÑΓß∩  25   πα«ó¡Ñ⌐   ó½«ªÑ¡¡«ßΓ¿).
  2046.      ÅÑαѼѡ¡á∩ ftos óßÑúñá ¿¼ÑÑΓ º¡áτÑ¡¿Ñ ¿¡ñѬßá ¡áτá½á ßΓѬá.
  2047.  
  2048.           ä½∩ «íαáí«Γ¬¿  ßΓѬᠠóá¼  »«¡áñ«í∩Γß∩ ñóÑ Σπ¡¬µ¿¿ fpush() ¿
  2049.      fpop(), ¬«Γ«αδÑ »α¿óÑñÑ¡δ ¡¿ªÑ.
  2050.  
  2051.                 /* Å«¼ÑßΓ¿Γ∞ φ½Ñ¼Ñ¡Γ ó ßΓѬ */
  2052.           void fpush(i)
  2053.           struct for_stack i;
  2054.           {
  2055.                if (ftos > FOR_NEST)
  2056.                     serror(10);
  2057.  
  2058.                fstack[ftos]=i;
  2059.                ftos++;
  2060.           }
  2061.  
  2062.           struct for_stack fpop()
  2063.           {
  2064.                ftos--;
  2065.                if (ftos < 0) serror(11);
  2066.                return(fstack[ftos]);
  2067.           }
  2068.  
  2069.  
  2070.           êΓá¬, »«ß½Ñ  Γ«ú«,  ¬á¬ óδ »«½πτ¿½¿ ó«º¼«ª¡«ßΓ∞ «º¡á¬«¼¿Γ∞ß∩
  2071.      ß« óßѼ¿ ¡Ñ«íσ«ñ¿¼δ¼¿ óß»«¼«úáΓѽ∞¡δ¼¿ Σπ¡¬µ¼∩¼¿, »α¿óÑñѼ »«½¡δ⌐
  2072.      ΓѬßΓ Σπ¡¬µ¿¿, αÑ὿ºπεΘÑ⌐ «»ÑαáΓαδ FOR ¿ NEXT.
  2073.  
  2074.  
  2075.           /* Åα«ßΓÑ⌐Φá∩ αÑ὿ºáµ¿∩ «»ÑαáΓ«αá µ¿¬½á FOR */
  2076.           void exec_for()
  2077.           {
  2078.                struct for_stack i;
  2079.                int value;
  2080.  
  2081.                get_token(); /* τΓÑ¡¿Ñ π»αáó½∩εΘÑ⌐ »ÑαѼѡ¡«⌐ */
  2082.                if (!isalfa(*token)) {
  2083.                     serror(4);
  2084.                     return;
  2085.                }
  2086.  
  2087.                i.var=toupper(token) - 'A'; /* ß«σαá¡¿¼ ¿¡ñѬߠ*/
  2088.  
  2089.                get_token(); /* τΓÑ¡¿Ñ ß¿¼ó«½á αáóÑ¡ßΓóá */
  2090.                if (*token != '=') {
  2091.                serror(3);
  2092.                return;
  2093.                }
  2094.  
  2095.                get_exp(&value); /* »«½πτ¿Γ∞ ¡áτá½∞¡«Ñ º¡áτÑ¡¿Ñ */
  2096.  
  2097.                variables[i.var] = value;
  2098.  
  2099.  
  2100.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2101. â½áóá VII                                                    -- 36 --
  2102.  
  2103.  
  2104.  
  2105.                get_token();
  2106.                if (tok != TO) serror(9); /* τΓÑ¡¿Ñ ¿ á¡á½¿º TO */
  2107.  
  2108.                get_exp(&i.target); /* »«½πτ¿Γ∞ ¬«¡Ñτ¡«Ñ º¡áτÑ¡¿Ñ */
  2109.  
  2110.      /* àß½¿ µ¿¬½ óδ»«½¡∩ÑΓß∩ »«ß½Ññ¡¿⌐ αáº, »«¼ÑßΓ¿Γ∞ ¿¡Σ«α¼áµ¿ε
  2111.         ó ßΓѬ*/
  2112.                if (value >= variables[i.var]) {
  2113.                     i.loc = prog;
  2114.                     fpush(i);
  2115.                }
  2116.                else { /* »α«»πßΓ¿Γ∞ óÑß∞ µ¿¬½ µÑ½¿¬«¼ */
  2117.                     while(tok != NEXT) get_token();
  2118.                }
  2119.              }
  2120.  
  2121.       /* éδ»«½¡Ñ¡¿Ñ «»ÑαáΓ«αá NEXT */
  2122.           void next()
  2123.           {
  2124.               struct for_stack i;
  2125.  
  2126.               i = fpop(); /* τΓÑ¡¿Ñ ¿¡Σ«α¼áµ¿¿ « µ¿¬½Ñ */
  2127.  
  2128.               variables[i.var]++; /* πóѽ¿τÑ¡¿Ñ »ÑαѼѡ¡«⌐ µ¿¬½á */
  2129.               if (variables[i.var] > i.target) return; /* ¬«¡Ñµ */
  2130.               fpush(i); /* ó »α«Γ¿ó¡«¼ ß½πτáÑ ºá»«¼¡¿Γ∞ ¿¡Σ«α¼áµ¿ε */
  2131.               prog = i.loc; /* µ¿¬½ */
  2132.           }
  2133.  
  2134.  
  2135.           èᬠ¿¼Ñ¡¡«  αáí«ΓáÑΓ  φΓá  »«ñ»α«úαá¼¼á,  ó»«½¡Ñ   ∩ß¡«   ¿º
  2136.      ¬«¼¼Ñ¡Γáα¿Ñó ¬ ¡Ñ⌐.  æ½ÑñπÑΓ ºá¼ÑΓ¿Γ∞,  τΓ« á¡á½¿º ¡á ó«º¼«ª¡«ßΓ∞
  2137.      óδσ«ñá  ¿º  µ¿¬½á  »«  «»ÑαáΓ«απ  GOTO   ó   ñá¡¡«¼   ß½πτáÑ   ¡Ñ
  2138.      óδ»«½¡∩ÑΓß∩. Å«φΓ«¼π   ¿ß»«½∞º«óá¡¿Ñ  GOTO  ó  ΓѽѠ µ¿¬½á  ¼«ªÑΓ
  2139.      »α¿óÑßΓ¿  ¬  ¿ß¬áªÑ¡¿ε  ß«ñÑন¼«ú«  ßΓѬá,  τΓ«   ó«íΘѼ-Γ«   ¡Ñ
  2140.      ªÑ½áΓѽ∞¡«.
  2141.  
  2142.           ÉÑΦÑ¡¿Ñ »α«í½Ñ¼δ  αÑ὿ºáµ¿¿  µ¿¬½á FOR ß »«¼«Θ∞ε »α¿¼Ñ¡Ñ¡¿∩
  2143.      ßΓѬ«óδσ  ßΓαπ¬Γπα  ∩ó½∩ÑΓß∩,  ó  «íΘѼ  ß½πτáÑ,   Γ¿»¿τ¡δ¼   ñ½∩
  2144.      αÑ὿ºáµ¿¿  µ¿¬½¿τÑ߬¿σ ¬«¡ßΓαπ¬µ¿⌐.  Æá¬ ¬á¬ ¿¡ΓÑα»αÑΓáΓ«α SMALL
  2145.      BASIC ¡Ñ »«ññÑনóáÑΓ ñαπú¿Ñ Γ¿»δ µ¿¬½¿τÑ߬¿σ ¬«¡ßΓαπ¬µ¿⌐,  Γ« óδ
  2146.      ¼«ªÑΓÑ  ßἫßΓ«∩Γѽ∞¡« αáºαáí«ΓáΓ∞ »«ñ»α«úαá¼¼δ αÑ὿ºáµ¿¿ µ¿¬½«ó
  2147.      WHILE ¿ DO-WHILE.  èᬠóδ ß¼«ªÑΓÑ πó¿ñÑΓ∞ ó ß½ÑñπεΘѼ  »áαáúαáΣÑ,
  2148.      ßΓѬ«óδÑ   ßΓαπ¬Γπαδ   ¿»«½∞ºπεΓß∩   »α¿   αÑ὿ºáµ¿¿   ¿  ñαπú¿σ
  2149.      ¬«¡ßΓαπ¬µ¿⌐ »α«úαá¼¼¿α«óá¡¿∩, ñ«»π߬áεΘ¿σ ó½«ªÑ¡¡«ßΓ∞.
  2150.  
  2151.  
  2152.  
  2153.  
  2154.  
  2155.  
  2156.  
  2157.  
  2158.  
  2159.  
  2160.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2161. â½áóá VII                                                    -- 37 --
  2162.  
  2163.  
  2164.                ÄÅàÉÇÆÄÉ GOSUB.
  2165.      -----------------------------------------------------------------
  2166.  
  2167.           ò«Γ∩ BASIC   ¡Ñ   »«ññÑনóáÑΓ  «Γñѽ∞¡δÑ  »«ñ»α«úαá¼¼δ,  ¡«
  2168.      ¿¼ÑÑΓß∩ ó«º¼«ª¡«ßΓ∞ óδºóáΓ∞ «Γñѽ∞¡δÑ τáßΓ¿ »α«úαá¼¼δ  ß  »«¼«Θ∞ε
  2169.      «»ÑαáΓ«αá  GOSUB  ¿  óÑα¡πΓß∩  ¿º ¡ÑÑ ß »«¼«Θ∞ε «»ÑαáΓ«αá RETURN.
  2170.      Äß¡«ó¡«⌐ Σ«α¼«⌐ GOSUB-RETURN ∩ó½∩ÑΓß∩ ß½ÑñπεΘá∩:
  2171.  
  2172.      GOSUB <¡«¼Ñα ßΓ᫬¿>
  2173.              .
  2174.              .
  2175.              .
  2176.              <¡«¼Ñα ßΓ᫬¿>
  2177.              .
  2178.              Γѽ« »«ñ»α«úαá¼¼δ
  2179.              .
  2180.              .
  2181.      RETURN
  2182.  
  2183.           éδº«ó »«ñ»α«úαá¼¼δ  ΓαÑíπÑΓ  ¿ß»«½∞º«óá¡¿∩ ßΓѬá.  ÄτÑó¿ñ¡«,
  2184.      τΓ« φΓ« αÑ὿º«óáΓ∞ ó ñá¡¡«¼ ß½πτáÑ »α«ΘÑ,  τѼ ñ½∩ «»ÑαáΓ«αá FOR
  2185.      »«Γ«¼π,  τΓ«  ¬áªñ«¼π  «»ÑαáΓ«απ RETURN ß««ΓóÑΓßΓóπÑΓ ßó«⌐ GOSUB.
  2186.      Ä»¿ßá¡¿Ñ ßΓѬá GOSUB »«¬áºá¡« ¡¿ªÑ.
  2187.  
  2188.          char *gstack[SUB_NEST]; /* ßΓѬ »«ñ»α«úαá¼¼ */
  2189.          int gtos; /* ¿¡ñѬߠóÑασ¡Ñ⌐ τáßΓ¿ ßΓѬᠠ*/
  2190.  
  2191.           öπ¡¬µ¿∩ gosub() ¿ óß»«¼«úáΓѽ∞¡δÑ »α«úαá¼¼δ »α¿óÑñÑ¡δ ¡¿ªÑ.
  2192.  
  2193.          /* Åα«ßΓÑ⌐Φá∩ αÑ὿ºáµ¿∩ «»ÑαáΓ«αá GOSUB  */
  2194.          void gosub()
  2195.          {
  2196.            char *loc;
  2197.  
  2198.            get_token();
  2199.            /* »«¿ß¬ ¼ÑΓ¬¿ «íαáΘÑ¡¿∩ */
  2200.            loc = find_label(token);
  2201.            if(loc=='\0')
  2202.              serror(7); /* ¼ÑΓ¬á ¡Ñ ¡á⌐ñÑ¡á */
  2203.            else {
  2204.              gpush(prog); /* ºá»«¼¡¿¼ ¼ÑßΓ«, ¬πñá ¡áñ« óÑα¡πΓ∞ß∩ */
  2205.              prog = loc; /* ßΓáαΓ »α«úαá¼¼δ ß Γ«τ¬¿ loc */
  2206.            }
  2207.          }
  2208.  
  2209.          /*  é«ºóαáΓ ¿º »«ñ»α«úαá¼¼δ */
  2210.          void greturn()
  2211.          {
  2212.            prog = gpop();
  2213.          }
  2214.  
  2215.          /* Å«¼ÑßΓ¿Γ∞ φ½Ñ¼Ñ¡Γ ó ßΓѬ «»ÑαáΓ«α«ó GOSUB (»«ñ»α«úαá¼¼) */
  2216.          void gpush(s)
  2217.          char *s;
  2218.  
  2219.  
  2220.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2221. â½áóá VII                                                    -- 38 --
  2222.  
  2223.  
  2224.          {
  2225.            gtos++;
  2226.            if(gtos == SUB_NEST) {
  2227.              serror(12);
  2228.              return;
  2229.            }
  2230.            gstack[gtos]=s;
  2231.          }
  2232.  
  2233.       /* éδΓ«½¬¡πΓ∞ φ½Ñ¼Ñ¡Γ ¿º ßΓѬᠫ»ÑαáΓ«α«ó GOSUB (»«ñ»α«úαá¼¼) */
  2234.          char *gpop()
  2235.          {
  2236.            if(gtos==0) {
  2237.              serror(13);
  2238.              return;
  2239.            }
  2240.            return(gstack[gtos--]);
  2241.          }
  2242.  
  2243.           è«¼á¡ñá GOSUB  αáí«ΓáÑΓ ß½ÑñπεΘ¿¼ «íαẫ¼.  ÆÑ¬πΘÑÑ º¡áτÑ¡¿Ñ
  2244.      prog »«¼ÑΘáÑΓß∩ ó ßΓѬ  GOSUB.  çáΓѼ  prog  »α¿ßóá¿óáÑΓß∩  áñαÑß
  2245.      ßΓ᫬¿,   ß   ¬«Γ«α«⌐   ¡áτ¿¡áÑΓß∩   »«ñ»α«úαá¼¼á,  ¿  ¡áτ¿¡áÑΓß∩
  2246.      óδ»«½¡Ñ¡¿Ñ »«ñ»α«úαá¼¼δ. è«úñá óßΓαÑτáÑΓß∩ RETURN, ¿º ßΓѬá GOSUB
  2247.      óδΓὬ¿óáÑΓß∩  «τÑαÑñ¡«Ñ  º¡áτÑ¡¿Ñ  ¿  »α¿ßóá¿óáÑΓß∩ prog.  äá½ÑÑ
  2248.      óδ»«½¡Ñ¡¿Ñ  »α«ñ«½ªáÑΓß∩  ß«  ß½ÑñπεΘÑ⌐  ßΓ᫬¿  »«ß½Ñ  «»ÑαáΓ«αá
  2249.      GOSUB. Ä»ÑαáΓ«α GOSUB ñ«»π߬áÑΓ ó½«ªÑ¡¡«ßΓ∞.
  2250.  
  2251.  
  2252.  
  2253.  
  2254.  
  2255.  
  2256.  
  2257.  
  2258.  
  2259.  
  2260.  
  2261.  
  2262.  
  2263.  
  2264.  
  2265.  
  2266.  
  2267.  
  2268.  
  2269.  
  2270.  
  2271.  
  2272.  
  2273.  
  2274.  
  2275.  
  2276.  
  2277.  
  2278.  
  2279.  
  2280.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2281. â½áóá VII                                                    -- 39 --
  2282.  
  2283.  
  2284.                         ÅÄïì¢ë öÇëï êìÆàÉÅÉàÆÇÆÄÉÇ.
  2285.      -----------------------------------------------------------------
  2286.  
  2287.            éßÑ ΓѬßΓδ SMALL  BASIC,  ¿ß¬½ετá∩  ΓѬßΓδ  ß¿¡Γá¬ß¿τÑ߬«ú«
  2288.      á¡á½¿ºáΓ«αá    óδαáªÑ¡¿⌐,    »α¿óÑñÑ¡δ   ¡¿ªÑ.   éá¼   ¡Ñ«íσ«ñ¿¼«
  2289.      «Γ¬«¼»¿½¿α«óáΓ∞  Σá⌐½δ  ¿¡ΓÑα»αÑΓáΓ«αá  ¿  á¡á½¿ºáΓ«αá,  á  ºáΓѼ
  2290.      «ΓαÑñá¬Γ¿α«óáΓ∞ ¿σ.
  2291.  
  2292.         /* î¿¡¿¼á½∞¡δ⌐ BASIC-¿¡ΓÑ»αÑΓáΓ«α */
  2293.         #include "stdio.h"
  2294.         #include "setjmp.h"
  2295.         #include "math.h"
  2296.         #include "ctype.h"
  2297.         #include "stdlib.h"
  2298.  
  2299.         #define NUM_LAB 100
  2300.         #define LAB_LEN 10
  2301.         #define FOR_NEST 25
  2302.         #define SUB_NEST 25
  2303.         #define PROG_SIZE 10000
  2304.  
  2305.         #define DELIMITER 1
  2306.         #define VARIABLE  2
  2307.         #define NUMBER    3
  2308.         #define COMMAND   4
  2309.         #define STRING    5
  2310.         #define QUOTE     6
  2311.  
  2312.         #define PRINT 1
  2313.         #define INPUT 2
  2314.         #define IF    3
  2315.         #define THEN  4
  2316.         #define FOR   5
  2317.         #define NEXT  6
  2318.         #define TO    7
  2319.         #define GOTO  8
  2320.         #define EOL   9
  2321.         #define FINISHED 10
  2322.         #define GOSUB 11
  2323.         #define RETURN 12
  2324.         #define END   13
  2325.  
  2326.         char *prog; /* ß«ñÑαª¿Γ óδαáªÑ¡¿Ñ ñ½∩ á¡á½¿ºá */
  2327.         jmp_buf e_buf; /* ß«ñÑαª¿Γ ßαΓÑñπ ñ½∩ longjmp() */
  2328.  
  2329.         int variables[26]= {   /* 26 »ÑαѼѡ¡δσ »«½∞º«óáΓѽ∩ A - Z */
  2330.           0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  2331.           0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  2332.           0, 0, 0, 0, 0, 0
  2333.         };
  2334.  
  2335.           struct commands { /* Åα«ß¼«Γα Γáí½¿µδ ¬½ετÑóδσ ß½«ó */
  2336.             char command[20];
  2337.             char tok;
  2338.  
  2339.  
  2340.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2341. â½áóá VII                                                    -- 40 --
  2342.  
  2343.  
  2344.           } table[] = { /* è«¼á¡ñá ñ«½ª¡á óó«ñ¿Γß∩ »α«»¿ß¡δ¼¿ */
  2345.             "print",PRINT, /* íπ¬óἿ ó φΓπ Γáí½¿µπ */
  2346.             "input",INPUT,
  2347.             "if",IF,
  2348.             "then",THEN,
  2349.             "goto",GOTO,
  2350.             "for",FOR,
  2351.             "next",NEXT,
  2352.             "to",TO,
  2353.             "gosub",GOSUB,
  2354.             "return",RETURN,
  2355.             "end",END,
  2356.             "",END  /* îáα¬Ñα ¬«¡µá Γáí½¿µδ */
  2357.           };
  2358.  
  2359.           char token[80];
  2360.           char token_type, tok;
  2361.  
  2362.           struct label {
  2363.             char name[LAB_LEN];
  2364.             char *p; /*      */
  2365.           };
  2366.           struct label label_table[NUM_LAB];
  2367.  
  2368.           char *find_label(), *gpop();
  2369.  
  2370.           struct for_stack {
  2371.             int var; /* »ÑαѼѡ¡á∩ ßτÑΓτ¿¬á */
  2372.             int target; /* ¬«¡Ñτ¡«Ñ º¡áτÑ¡¿Ñ */
  2373.             char *loc;
  2374.           } fstack[FOR_NEST]; /* ßΓѬ µ¿¬½á FOR/NEXT */
  2375.           struct for_stack fpop();
  2376.  
  2377.           char *gstack[SUB_NEST]; /* ßΓѬ «»ÑαáΓ«αá GOSUB */
  2378.           int ftos; /* ¿¡ñѬߠ¡áτá½á ßΓѬá FOR */
  2379.           int gtos; /* ¿¡ñѬߠ¡áτá½á ßΓѬá GOSUB */
  2380.  
  2381.           void print(), scan_labels(), find_eol(),exec_goto();
  2382.           void exec_if(), exec_for(), next(), fpush(), input();
  2383.           void gosub(), greturn(), gpush(), label_init();
  2384.  
  2385.           main(argc, argv)
  2386.           int argc;
  2387.           char *argv[];
  2388.           {
  2389.             char in[80];
  2390.             int answer;
  2391.             char *p_buf;
  2392.             char *t;
  2393.  
  2394.             if(argc!=2) {
  2395.               printf("êß»«½∞ºπ⌐ΓÑ Σ«α¼áΓ: run <filename>\n");
  2396.               exit(1);
  2397.             }
  2398.  
  2399.  
  2400.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2401. â½áóá VII                                                    -- 41 --
  2402.  
  2403.  
  2404.  
  2405.             /* éδñѽѡ¿Ñ »á¼∩Γ¿ ñ½∩ »α«úαá¼¼δ */
  2406.             if (!(p_buf=(char *) malloc(PROG_SIZE))) {
  2407.               printf("ÄΦ¿í¬á »α¿ óδñѽѡ¿¿ »á¼∩Γ¿ ");
  2408.               exit(1);
  2409.             }
  2410.  
  2411.             /* çáúαπº¬á »α«úαá¼¼δ ñ½∩ óδ»«½¡Ñ¡¿∩ */
  2412.             if(!load_program(p_buf,argv[1])) exit(1);
  2413.             if(setjmp(e_buf)) exit(1); /* ¿¡¿µ¿á½¿ºáµ¿∩ íπΣÑαá
  2414.                                           ¡Ñ½«¬á½∞¡δσ »ÑαÑσ«ñ«ó */
  2415.             prog = p_buf;
  2416.             scan_labels(); /* »«¿ß¬ ¼ÑΓ¬¿ ó »α«úαἼѠ*/
  2417.             ftos = 0; /* ¿¡¿µ¿á½¿ºáµ¿∩ ¿¡ñÑßá ßΓѬá FOR */
  2418.             gtos = 0; /* ¿¡¿µ¿á½¿ºáµ¿∩ ¿¡ñÑßá ßΓѬá GOSUB */
  2419.            do {
  2420.              token_type = get_token();
  2421.              /* »α«óÑα¬á ¡á «»ÑαáΓ«α »α¿ßóá¿óá¡¿∩ */
  2422.              if(token_type==VARIABLE) {
  2423.                putback(); /* ó«ºóαáΓ »Ñα. «íαáΓ¡« ó« óσ«ñ¡«⌐ »«Γ«¬ */
  2424.                assignment(); /* ñ«½ªÑ¡ íδΓ∞ «»ÑαáΓ«α »α¿ßóá¿óá¡¿∩ */
  2425.              }
  2426.              else /* φΓ« ¬«¼á¡ñá */
  2427.                switch(tok) {
  2428.                  case PRINT:
  2429.                    print();
  2430.                    break;
  2431.                  case GOTO:
  2432.                    exec_if();
  2433.                    break;
  2434.                  case FOR:
  2435.                    exec_for();
  2436.                    break;
  2437.                  case NEXT:
  2438.                    next();
  2439.                    break;
  2440.                  case INPUT:
  2441.                    input();
  2442.                    break;
  2443.                  case GOSUB:
  2444.                    gosub();
  2445.                    break;
  2446.                  case RETURN:
  2447.                    greturn();
  2448.                    break;
  2449.                  case END:
  2450.                    exit(0);
  2451.                }
  2452.            } while (tok != FINISHED);
  2453.          }
  2454.  
  2455.          /* çáúαπº¬á »α«úαá¼¼δ. */
  2456.          load_program(p, fname)
  2457.          char *p;
  2458.  
  2459.  
  2460.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2461. â½áóá VII                                                    -- 42 --
  2462.  
  2463.  
  2464.          char *fname;
  2465.          {
  2466.            FILE *fp;
  2467.            int i=0;
  2468.            if(!(fp=fopen(fname, "rb"))) return 0;
  2469.  
  2470.            i = 0;
  2471.              do {
  2472.                 *p = getc(fp);
  2473.                 p++; i++;
  2474.              } while(!feof(fp) && i<PROG_SIZE);
  2475.              *(p-2) = '\0'; /* ß¿¼ó«½ ¬«¡µá »α«úαá¼¼δ */
  2476.              fclose(fp);
  2477.              return 1;
  2478.            }
  2479.  
  2480.            /* Åα¿ßóá¿óá¡¿Ñ »ÑαѼѡ¡«⌐ º¡áτÑ¡¿∩ */
  2481.            assigment()
  2482.            {
  2483.              int var, value;
  2484.              /* Å«½πτ¿Γ∞ ¿¼∩ »ÑαѼѡ¡«⌐ */
  2485.              get_token();
  2486.                if(!isalpha(*token)) {
  2487.                  serror(4); /* φΓ« ¡Ñ »ÑαѼѡ¡á∩ */
  2488.                  return;
  2489.                }
  2490.  
  2491.                /* óδτ¿ß½Ñ¡¿Ñ ¿¡ñѬßá »ÑαѼѡ¡«⌐ */
  2492.                var = toupper(*token)-'A';
  2493.  
  2494.                /* »«½πτ¿Γ∞ º¡á¬ αáóÑ¡ßΓóá */
  2495.                get_token();
  2496.                if(*token!='=') {
  2497.                  serror(3);
  2498.                  return;
  2499.                }
  2500.  
  2501.                /* »«½πτ¿Γ∞ º¡áτÑ¡¿Ñ, »α¿ßóáѼ«Ñ »ÑαѼѡ¡«⌐ */
  2502.                get_exp(&value);
  2503.  
  2504.                /* »α¿ßó«¿Γ∞ φΓ« º¡áτÑ¡¿Ñ */
  2505.                variables[var] = value;
  2506.              }
  2507.  
  2508.              /* Åα«ßΓÑ⌐Φá∩ αÑ὿ºáµ¿∩ «»ÑαáΓ«αá PRINT */
  2509.              void print()
  2510.              {
  2511.                int answer;
  2512.                int len=0, spaces;
  2513.                char last_delim;
  2514.  
  2515.                do {
  2516.                  get_token(); /* »«½πτ¿Γ∞ ß½ÑñπεΘ¿⌐ φ½Ñ¼Ñ¡Γ ß»¿ß¬á  */
  2517.                  if(tok==EOL || tok==FINISHED) break;
  2518.  
  2519.  
  2520.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2521. â½áóá VII                                                    -- 43 --
  2522.  
  2523.  
  2524.                  if(token_type==QUOTE) { /* φΓ« ßΓ᫬á */
  2525.                    print(token);
  2526.                    len += strlen(token);
  2527.                    get_token();
  2528.                  }
  2529.                  else { /* φΓ« óδαáªÑ¡¿Ñ */
  2530.                    putback();
  2531.                    get_exp(&answer);
  2532.                    get_token();
  2533.                    len +=printf("%d", answer);
  2534.                  }
  2535.                  last_delim = *token;
  2536.  
  2537.                  if(*token==';') {
  2538.      /* óδτ¿ß½Ñ¡¿Ñ τ¿ß½á »α«íѽ«ó »α¿ »ÑαÑσ«ñÑ ¬ ß½ÑñπεΘÑ⌐ Γáíπ½∩µ¿¿*/
  2539.                    spaces= 8- (len % 8);
  2540.                    len += spaces; /* ó¬½ετá∩ »«º¿µ¿ε Γáíπ½∩µ¿¿  */
  2541.                    while(spaces) {
  2542.                      print(" ");
  2543.                      spaces--;
  2544.                    }
  2545.                  }
  2546.                  else if(*token==','); /* ¡¿τÑú« ¡Ñ ñѽáΓ∞ */
  2547.                  else if(tok!=EOL && tok!=FINISHED)  serror(0);
  2548.                } while (*token == ';' || *token == ',');
  2549.  
  2550.               if(tok==EOL || tok==FINISHED) {
  2551.               if(last_delim != ';' && last_delim != ',') printf("\n");
  2552.               }
  2553.                else serror(0); /* «ΓßπΓßΓóπÑΓ ',' ¿½¿ ';'  */
  2554.              }
  2555.              /* Å«¿ß¬ óßÑσ ¼ÑΓ«¬ */
  2556.              void scan_labels()
  2557.              {
  2558.                int addr;
  2559.                char *temp;
  2560.  
  2561.              label_init();  /* «í¡π½Ñ¡¿Ñ óßÑσ ¼ÑΓ«¬ */
  2562.              temp = prog; /* ß«σαá¡¿¼ π¬áºáΓѽ∞ ¡á ¡áτὫ »α«úαá¼¼δ*/
  2563.                /* àß½¿ »Ñαóá∩ ½Ñ¬ßѼá Σá⌐½á ÑßΓ∞ ¼ÑΓ¬á  */
  2564.                get_token();
  2565.                if(token_type==NUMBER) {
  2566.                  strcpy(label_table[0].name,token);
  2567.                  label_table[0].p=prog;
  2568.                }
  2569.  
  2570.                find_eol();
  2571.                do {
  2572.                  get_token();
  2573.                  if(token_type==NUMBER) {
  2574.                    addr =get_next_label(token);
  2575.                    if(addr==-1 || addr==-2) {
  2576.                        (addr==-1) ?serror(5):serror(6);
  2577.                    }
  2578.  
  2579.  
  2580.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2581. â½áóá VII                                                    -- 44 --
  2582.  
  2583.  
  2584.                    strcpy(label_table[addr].name, token);
  2585.          label_table[addr].p = prog; /* ΓѬπΘ¿⌐ π¬áºáΓѽ∞ »α«úαá¼¼δ */
  2586.                  }
  2587.                  /* Ñß½¿ ßΓα«¬á ¡Ñ »«¼ÑτÑ¡á, Γ« »«¿ß¬ ß½ÑñπεΘÑ⌐ */
  2588.                  if(tok!=EOL) find_eol();
  2589.                } while(tok!=FINISHED);
  2590.                prog = temp; /* ß«σαá¡¿¼ «α¿ú¿¡á½ */
  2591.              }
  2592.  
  2593.              /* Å«¿ß¬ ¡áτá½á ß½ÑñπεΘÑ⌐ ßΓ᫬¿ */
  2594.              void find_eol()
  2595.              {
  2596.                while(*prog!='\n'  && *prog!='\0') ++prog;
  2597.                if(*prog) prog++;
  2598.              }
  2599.  
  2600.              /* é«ºóαáΘáÑΓ ¿¡ñѬߠѡá ß½ÑñπεΘπε ßó«í«ñ¡πε »«º¿µ¿ε
  2601.                 ¼áßß¿óá ¼ÑΓ«¬. -1, Ñß½¿ ¼áßß¿ó »ÑαÑ»«½¡Ñ¡.
  2602.                                -2, Ñß½¿ ñπí½¿α«óá¡¿Ñ ¼ÑΓ«¬. */
  2603.  
  2604.              get_next_label(s)
  2605.              char *s;
  2606.              {
  2607.                register int t;
  2608.  
  2609.                for(t=0;t<NUM_LAB;++t) {
  2610.                  if(label_table[t].name[0]==0) return t;
  2611.               if(!strcmp(label_table[t].name,s)) return -2; /*ñπí½∞*/
  2612.                }
  2613.  
  2614.                return -1;
  2615.              }
  2616.  
  2617.          /* Å«¿ß¬ ßΓ᫬¿ »« ¿ºóÑßΓ¡«⌐ ¼ÑΓ¬Ñ. ç¡áτÑ¡¿Ñ 0 ó«ºóαáΘáÑΓß∩,
  2618.             Ñß½¿ ¼ÑΓ¬á ¡Ñ ¡á⌐ñÑ¡á; ó »α«Γ¿ó¡«¼ ß½πτáÑ ó«ºóαáΘáÑΓß∩
  2619.             π¬áºáΓѽ∞ ¡á »«¼ÑτÑ¡¡πε ßΓ᫬π »α«úαá¼¼δ        */
  2620.  
  2621.              char *find_label(s)
  2622.  
  2623.              char *s;
  2624.              {
  2625.                register int t;
  2626.  
  2627.                for(t=0; t<NUM_LAB; ++t)
  2628.            if(!strcmp(label_table[t].name,s)) return label_table[t].p;
  2629.                return '\0'; /* ß«ßΓ«∩¡¿Ñ «Φ¿í¬¿ */
  2630.              }
  2631.  
  2632.              /* ÉÑ὿ºáµ¿∩ «»ÑαáΓ«αá GOTO */
  2633.              void exec_goto()
  2634.              {
  2635.                char *loc;
  2636.  
  2637.                get_token(); /* »«½πτ¿Γ∞ ¼ÑΓ¬π »ÑαÑσ«ñá */
  2638.  
  2639.  
  2640.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2641. â½áóá VII                                                    -- 45 --
  2642.  
  2643.  
  2644.                /* Å«¿ß¬ ¼ÑßΓ«»«½«ªÑ¡¿∩ ¼ÑΓ¬¿ */
  2645.                loc = find_label(token);
  2646.                if(loc=='\0')
  2647.                  serror(7);   /* ¼ÑΓ¬á ¡Ñ «í¡áαπªÑ¡á  */
  2648.                else prog=loc; /* ßΓáαΓ »α«úαá¼¼δ ß π¬áºá¡¡«⌐ Γ«τ¬¿  */
  2649.              }
  2650.  
  2651.           /* ê¡¿µ¿á½¿ºáµ¿∩ ¼áßß¿óá σαá¡Ñ¡¿∩ ¼ÑΓ«¬. Å« ñ«ú«ó«αÑ¡¡«ßΓ¿
  2652.           ¡π½Ñó«Ñ º¡áτÑ¡¿Ñ ¼ÑΓ¬¿ ß¿¼ó«½¿º¿απÑΓ »πßΓπε ∩τÑ⌐¬π ¼áßß¿óá *
  2653.              void label_init()
  2654.              {
  2655.              register int t;
  2656.  
  2657.              for(t=0; t<NUM_LAB; ++t) label_table[t].name[0]='\0';
  2658.            }
  2659.  
  2660.              /* ÉÑ὿ºáµ¿∩ «»ÑαáΓ«αá IF  */
  2661.              void exec_if()
  2662.              {
  2663.                int x , y, cond;
  2664.                char op;
  2665.                get_exp(&x); /* »«½πτ¿Γ∞ ½Ñó«Ñ óδαáªÑ¡¿Ñ */
  2666.                get_token(); /* »«½πτ¿Γ∞ «»ÑαáΓ«α */
  2667.                if(!strchr("=<>", *token)) {
  2668.                serror(0);      /* ¡Ññ«»πßΓ¿¼δ⌐ «»ÑαáΓ«α */
  2669.                return;
  2670.              }
  2671.              op=*token;
  2672.              get_exp(&y);  /* »«½πτ¿Γ∞ »αáó«Ñ óδαáªÑ¡¿Ñ */
  2673.              /* Ä»αÑñѽѡ¿Ñ αѺπ½∞ΓáΓá */
  2674.              cond=0;
  2675.              switch(op) {
  2676.                  case '=':
  2677.                if(x==y) cond=1;
  2678.                break;
  2679.                  case '<':
  2680.                if(x<y) cond=1;
  2681.                break;
  2682.                  case '>':
  2683.                if(x>y) cond=1;
  2684.                break;
  2685.              }
  2686.              if(cond) {  /* Ñß½¿ º¡áτÑ¡¿Ñ IF "¿ßΓ¿¡á"  */
  2687.                get_token();
  2688.                if(tok!=THEN) {
  2689.                   serror(8);
  2690.                   return;
  2691.               } /* ¿¡áτÑ, »α«úαá¼¼á óδ»«½¡∩ÑΓß∩ ß« ß½ÑñπεΘÑ⌐ ßΓ᫬¿ */
  2692.              }
  2693.              else find_eol(); /* »«¿ß¬ Γ«τ¬¿ ßΓáαΓá »α«úαá¼¼δ */
  2694.            }
  2695.  
  2696.            /* ÉÑ὿ºáµ¿∩ µ¿¬½á FOR */
  2697.            void exec_for()
  2698.  
  2699.  
  2700.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2701. â½áóá VII                                                    -- 46 --
  2702.  
  2703.  
  2704.            {
  2705.              struct for_stack i;
  2706.              int value;
  2707.  
  2708.              get_token(); /* »«½πτ¿Γ∞ π»αáó½∩εΘπε »ÑαѼѡ¡πε */
  2709.              if(!isalpha(*token)); {
  2710.                serror(4);
  2711.                return;
  2712.              }
  2713.              i.var=toupper(*token)-'A'; /* ß«σαá¡¿Γ∞ ÑÑ ¿¡ñѬߠ*/
  2714.              get_token(); /* »«½πτ¿Γ∞ º¡á¬ αáóÑ¡ßΓóá */
  2715.              if(*token!='=') {
  2716.                serror(3);
  2717.                return;
  2718.              }
  2719.              get_exp(&value); /* »«½πτ¿Γ∞ ¡áτá½∞¡«Ñ º¡áτÑ¡¿Ñ  */
  2720.              variables[i.var]=value;
  2721.  
  2722.              get_token();
  2723.              if(tok!=TO) serror(9); /* Ñß½¿ ¡ÑÑ ¡áΦ½¿ TO */
  2724.              get_exp(&i.target); /* »«½πτ¿Γ∞ ¬«¡Ñτ¡«Ñ º¡áτÑ¡¿Ñ */
  2725.  
  2726.              /* àß½¿ µ¿¬½ óδ»«½¡∩ÑΓß∩ »«ß½Ññ¡¿⌐ αáº, »«¼ÑßΓ¿Γ∞
  2727.                 ¿¡Σ«α¼áµ¿ε ó ßΓѬ  */
  2728.              if(value>=variables[i.var]) {
  2729.                i.loc = prog;
  2730.                fpush(i);
  2731.              }
  2732.              else /* »α«»πßΓ¿Γ∞ óÑß∞ µ¿¬½ */
  2733.                while(tok!=NEXT) get_token();
  2734.            }
  2735.  
  2736.            /* ÉÑ὿ºáµ¿∩ «»ÑαáΓ«αá NEXT */
  2737.            void next()
  2738.            {
  2739.              struct for_stack i;
  2740.              i = fpop(); /* τΓÑ¡¿Ñ ¿¡Σ«α¼áµ¿¿ « µ¿¬½Ñ */
  2741.  
  2742.             variables[i.var]++; /* πóѽ¿τÑ¡¿Ñ π»αáó½∩εΘÑ⌐ »ÑαѼѡ¡«⌐*/
  2743.              if(variables[i.var]>i.target) return; /* ¬«¡Ñµ µ¿¬½á */
  2744.              fpush(i); /* ¿¡áτÑ, ß«σαá¡¿Γ∞ ¿¡Σ«α¼áµ¿ε ó ßΓѬѠ*/
  2745.              prog = i.loc; /* µ¿¬½ */
  2746.            }
  2747.  
  2748.            /* Å«¼ÑßΓ¿Γ∞ ¿¡Σ«α¼áµ¿ε ó ßΓѬ FOR */
  2749.            void fpush(i)
  2750.            struct for_stack i;
  2751.            {
  2752.              if(ftos>FOR_NEST)
  2753.              serror(10);
  2754.            fstack[ftos]=i;
  2755.            ftos++;
  2756.          }
  2757.  
  2758.  
  2759.  
  2760.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2761. â½áóá VII                                                    -- 47 --
  2762.  
  2763.  
  2764.          struct for_stack fpop()
  2765.          {
  2766.            ftos--;
  2767.            if(ftos<0) serror(11);
  2768.            return(fstack[ftos]);
  2769.          }
  2770.  
  2771.          /* ÉÑ὿ºáµ¿∩ «»ÑαáΓ«αá INPUT */
  2772.          void input()
  2773.          {
  2774.            char str[80], var;
  2775.            int i;
  2776.  
  2777.       get_token(); /*»α«ß¼áΓα¿óáÑΓß∩ Ñß½¿ ßπΘÑßΓóπÑΓ ßΓ᫬á ß¿¼ó«½«ó*/
  2778.            if(token_type==QUOTE) {
  2779.           printf(token); /* Ñß½¿ ñá, Γ« ÑÑ »ÑτáΓ∞ ¿ ¬«¡Γα«½∞ ',' */
  2780.              get_token();
  2781.              if(*token!=',') serror(1);
  2782.              get_token();
  2783.            }
  2784.            else printf("? "); /* óδñáτá ßΓ᫬¿ »« π¼«½τá¡¿ε */
  2785.        var = toupper(*token)-'A'; /* »«½πτ¿Γ∞ ¿¡ñѬߠ¿¼Ñ¡¿ »ÑαѼѡ¡«⌐*
  2786.            scanf("%d",&i);   /* τΓÑ¡¿Ñ óó«ñá ñá¡¡δσ */
  2787.            variables[var] = i;  /* ß«σαá¡Ñ¡¿Ñ ñá¡¡δσ */
  2788.          }
  2789.  
  2790.          /* ÉÑ὿ºáµ¿∩ «»ÑαáΓ«αá GOSUB */
  2791.          void gosub()
  2792.          {
  2793.            char *loc;
  2794.  
  2795.            get_token();
  2796.            /* »«¿ß¬ ¼ÑΓ¬¿ ó맮óá */
  2797.            loc = find_label(token);
  2798.            if(loc=='\0')
  2799.              serror(7); /* ¼ÑΓ¬á ¡Ñ «»αÑñѽѡá */
  2800.            else {
  2801.              gpush(prog); /* ºá»«¼¡¿¼ ¼ÑßΓ«, ¬πñá óÑα¡Ñ¼ß∩ */
  2802.              prog = loc; /* ßΓáαΓ »α«úαá¼¼δ ß π¬áºá¡¡«⌐ Γ«τ¬¿ */
  2803.            }
  2804.          }
  2805.  
  2806.          /* é«ºóαáΓ ¿º »«ñ»α«úαá¼¼δ, óδºóδ¡¡«⌐ »« GOSUB */
  2807.          void greturn()
  2808.          {
  2809.            prog = gpop();
  2810.          }
  2811.  
  2812.          /* Å«¼ÑΘáÑΓ ñá¡¡δÑ ó ßΓѬ GOSUB */
  2813.          void gpush(s)
  2814.          char *s;
  2815.          {
  2816.            gtos++;
  2817.            if(gtos==SUB_NEST) {
  2818.  
  2819.  
  2820.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2821. â½áóá VII                                                    -- 48 --
  2822.  
  2823.  
  2824.              serror(12);
  2825.              return;
  2826.            }
  2827.            gstack[gtos]=s;
  2828.          }
  2829.  
  2830.          /*   */
  2831.          char *gpop()
  2832.          {
  2833.            if(gtos==0) {
  2834.              serror(13);
  2835.              return;
  2836.            }
  2837.            return(gstack[gtos--]);
  2838.          }
  2839.  
  2840.  
  2841.  
  2842.  
  2843.  
  2844.  
  2845.  
  2846.  
  2847.  
  2848.  
  2849.  
  2850.  
  2851.  
  2852.  
  2853.  
  2854.  
  2855.  
  2856.  
  2857.  
  2858.  
  2859.  
  2860.  
  2861.  
  2862.  
  2863.  
  2864.  
  2865.  
  2866.  
  2867.  
  2868.  
  2869.  
  2870.  
  2871.  
  2872.  
  2873.  
  2874.  
  2875.  
  2876.  
  2877.  
  2878.  
  2879.  
  2880.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2881. â½áóá VII                                                    -- 49 --
  2882.  
  2883.  
  2884.               ÅÉêîàÉ êæÅÄï£çÄéÇìꃠêìÆàÉÅÉàÆÇÆÄÉÇ  SMALL BASIC
  2885.      -----------------------------------------------------------------
  2886.  
  2887.           ÆÑ»Ñα∞ óδ  ¼«ªÑΓÑ  ºá»π߬áΓ∞   »α«ßΓÑ⌐Φ¿Ñ   BASIC-»α«úαá¼¼δ.
  2888.  
  2889.  
  2890.          PRINT "¥Γá »α«úαá¼¼á ñѼ«¡ßΓα¿απÑΓ óßÑ ¬«¼á¡ñδ."
  2891.          FOR X = 1 TO 100
  2892.          PRINT X, X/2; X, X*X
  2893.          NEXT
  2894.          GOSUB 300
  2895.          PRINT "Åα¿óÑΓ"
  2896.          INPUT H
  2897.          IF H<11 THEN GOTO 200
  2898.          PRINT 12-4/2
  2899.          PRINT 100
  2900.          200 A = 100/2
  2901.          IF A>10 THEN PRINT "éßÑ ¡«α¼á½∞¡«"
  2902.          PRINT A
  2903.          PRINT A+34
  2904.          INPUT H
  2905.          PRINT H
  2906.          INPUT "¥Γ« ΓÑßΓ",y
  2907.          PRINT H+Y
  2908.          END
  2909.          300 PRINT "¥Γ« »«ñ»α«úαá¼¼á"
  2910.              RETURN
  2911.  
  2912.  
  2913.  
  2914.          PRINT "¥Γá »«ñ»α«úαá¼¼á ñѼ«¡ßΓα¿απÑΓ ó½«ªÑ¡¡δ⌐ GOSUB"
  2915.          INPUT "éóÑñ¿ΓÑ τ¿ß½«: ", i
  2916.          GOSUB 100
  2917.  
  2918.          END
  2919.  
  2920.          100 FOR T = 1 TO I
  2921.            X = X+I
  2922.            GOSUB 150
  2923.          NEXT
  2924.          RETURN
  2925.  
  2926.          150 PRINT X;
  2927.              RETURN
  2928.  
  2929.  
  2930.          print "¥Γá »«ñ»α«úαá¼¼á óδτ¿ß½∩ÑΓ «íΩѼ ¬πíá "
  2931.          input "éóÑñ¿ΓÑ ñ½¿¡π »áαó«⌐ ßΓ«α«¡δ: ", l
  2932.          input "éóÑñ¿ΓÑ ñ½¿¡π óΓ«α«⌐ ßΓ«α«¡δ: ", w
  2933.          input "éóÑñ¿ΓÑ ñ½¿¡π ΓαÑΓÑ⌐ ßΓ«α«¡δ: ", d
  2934.          t = l * w * d
  2935.          print "Äí∞Ѽ αáóÑ¡: ", t
  2936.  
  2937.  
  2938.  
  2939.  
  2940.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  2941. â½áóá VII                                                    -- 50 --
  2942.  
  2943.  
  2944.          PRINT "¥Γá »α«úαá¼¼á ñѼ«¡ßΓα¿απÑΓ ó½«ªÑ¡¡δÑ µ¿¬½δ"
  2945.          FOR X = 1 TO 100
  2946.           FOR Y = 1 TO 10
  2947.             PRINT X; Y; X*Y
  2948.           NEXT
  2949.          NEXT
  2950.  
  2951.  
  2952.  
  2953.  
  2954.  
  2955.  
  2956.  
  2957.  
  2958.  
  2959.  
  2960.  
  2961.  
  2962.  
  2963.  
  2964.  
  2965.  
  2966.  
  2967.  
  2968.  
  2969.  
  2970.  
  2971.  
  2972.  
  2973.  
  2974.  
  2975.  
  2976.  
  2977.  
  2978.  
  2979.  
  2980.  
  2981.  
  2982.  
  2983.  
  2984.  
  2985.  
  2986.  
  2987.  
  2988.  
  2989.  
  2990.  
  2991.  
  2992.  
  2993.  
  2994.  
  2995.  
  2996.  
  2997.  
  2998.  
  2999.  
  3000.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  3001. â½áóá VII                                                    -- 51 --
  3002.  
  3003.  
  3004.                   ÉÇæÿêÉàìàêà éÄçîÄåìÄæÆàë êìÆàÉÅÉàÆÇÆÄÉÇ
  3005.      -----------------------------------------------------------------
  3006.  
  3007.           Äß¡«ó¡δ¼ »π¡¬Γ«¼  αáßΦ¿αÑ¡¿∩  Σπ¡¬µ¿⌐  ¿¡ΓÑα»αÑΓáΓ«αá  ¿  ¿σ
  3008.      ¼«ñ¿Σ¿¬áµ¿¿  ∩ó½∩ÑΓß∩  «úαá¡¿τÑ¡¡«ßΓ∞   Ñú«   ½¿Φ∞   ó«º¼«ª¡«ßΓ∞ε
  3009.      ¿¡ΓÑα»αÑΓ¿α«óáΓ∞ ∩ºδ¬ BASIC.  Äß¡«ó¡á∩ ¼áßßá ΓÑσ¡¿τÑ߬¿σ »α¿Ñ¼«ó,
  3010.      «»¿ßá¡¡δσ  ó  φΓ«⌐  ú½áóÑ,  ¼«ªÑΓ  ¿ß»«½∞º«óáΓß∩   »α¿   ß«ºñá¡¿¿
  3011.      ¿¡ΓÑα»αÑΓáΓ«α«ó      ñ½∩     αẽ¿τ¡δσ     »α«µÑñπα¡δσ     ∩ºδ¬«ó
  3012.      »α«úαá¼¼¿α«óá¡¿∩.  Å«Γ«¼π óδ, ó »α¿¡µ¿»Ñ, ¼«ªÑΓÑ αáºαáí«ΓáΓ∞ ßó«⌐
  3013.      ∩ºδ¬,  πτ¿ΓδóáεΘ¿⌐  óáΦ  óºú½∩ñ  ¡á  »α«úαá¼¼¿α«óá¡¿Ñ ¿ óáΦ ßΓ¿½∞
  3014.      »α«úαá¼¼¿α«óá¡¿∩.
  3015.  
  3016.           ä«»«½¡¿Γѽ∞¡δÑ ¬«¼á¡ñδ ¿ ß««ΓóÑΓßΓóπεΦ¿Ñ ¿¼ «ß¡«ó¡δÑ Σ«α¼áΓδ
  3017.      ½Ñ¬ßѼ   «»¿ßá¡δ   ó  φΓ«⌐  ú½áóÑ.  ä½∩  ¿ß»«½∞º«óá¡¿∩  αẽ¿τ¡δσ
  3018.  
  3019.      ñ«»«½¡¿Γѽ∞¡δσ Γ¿»«ó »ÑαѼѡ¡δσ óδ  ñ«½ª¡δ  ¿ß»«½∞º«óáΓ∞  ¼áßß¿óδ
  3020.      ßΓαπ¬Γπα  ñ½∩  σαá¡Ñ¡¿∩  Γá¬¿σ  »ÑαѼѡ¡δσ;  «ñ¡«  ¿º  »«½Ñ⌐ φΓ«⌐
  3021.      ßΓαπ¬Γπαδ ñ«½ª¡« ¿¡ñ¿µ¿α«óáΓ∞ Γ¿» »ÑαѼѡ¡«⌐,  á  «ßΓá½∞¡δÑ  »«½∩
  3022.      »αÑñ¡áº¡áτÑ¡δ   ñ½∩   σαá¡Ñ¡¿∩   º¡áτÑ¡¿⌐  φΓ¿σ  »ÑαѼѡ¡δσ.  ä½∩
  3023.      ¿ß»«½∞º«óá¡¿∩  ßΓα«τ¡δσ  »ÑαѼѡ¡δσ  óá¼  ¡Ñ«íσ«ñ¿¼«   πßΓá¡«ó¿Γ∞
  3024.      Γáí½¿µπ  ßΓ᫬.  Åα«ßΓÑ⌐Φ¿¼  »πΓѼ αÑ὿ºáµ¿¿ ßΓ᫬ Σ¿¬ß¿α«óá¡¡«⌐
  3025.      ñ½¿¡δ ∩ó½∩ÑΓß∩ ¿ß»«½∞º«óá¡¿Ñ Σ¿¬ß¿α«óá¡¡δσ πτáßΓ¬«ó »á¼∩Γ¿  ó 255
  3026.      íá⌐Γ ñ½∩ αẼÑΦÑ¡¿∩ ßΓ᫬.
  3027.  
  3028.           ê »«ß½Ññ¡∩∩   ¼δß½∞:  Γ¿»δ  «»ÑαáΓ«α«ó,  ¬«Γ«αδÑ  óδ  ¼«ªÑΓÑ
  3029.      ¿¡ΓÑα»αÑΓ¿α«óáΓ∞, «úαá¡¿τÑ¡δ ½¿Φ∞ óáΦÑ⌐ Σá¡ΓếÑ⌐.
  3030.  
  3031.  
  3032.  
  3033.  
  3034.  
  3035.  
  3036.  
  3037.  
  3038.  
  3039.  
  3040.  
  3041.  
  3042.  
  3043.  
  3044.  
  3045.  
  3046.  
  3047.  
  3048.  
  3049.  
  3050.  
  3051.  
  3052.  
  3053.  
  3054.  
  3055.  
  3056.  
  3057.  
  3058.  
  3059.  
  3060.                                 "C" ñ½∩ »α«ΣÑßß¿«¡á½∞¡δσ »α«úαá¼¼¿ßΓ«ó
  3061.