

                        3

                   


                     "  㣮 ஭  ᫥
                          뢠  䥪⨢"

                                            ( ⫨)


  ++  ࠢ⥫쭮 让  ஢,  
  ᮧ   ࠢ,    権 
  ࠡ  묨. ᭮     ⮩   
  襭 ਬ. ⥬ ਢ ᢮ ࠦ,  ஡
  㦤 樨 ८ࠧ ⨯  ࠧ饭  ᢮ .
    ᢮ ஢,     㦤 뤥
  ⥪ ஡  ᯮ짮 ਥ.

  3.1  

     ࠦﬨ  ࠬ  ਬ ணࠬ
  .  ॠ  ᭮ 䬥᪨
  ⢨   䨪 権  ᫠  饩 窮.
   ⢥ ࠦ ।   
  ६. ⨬, 室 ⮪  :

             r=2.5
             area=pi*r*r

  ( pi  ।। 祭).  ணࠬ 
  뤠:

             2.5
             19.635

    ᫥  ࢮ 室 ப ࠢ 2.5,  १
    ன ப -  19.635.
      ணࠬ  ⮨   ᭮ ⥩:
  , 㭪樨 , ⠡   ࠩ.   - 
  ࠭  ,  ஬  ஢ ᨭ⠪᪨
  , 㭪  ࠡ뢠 室   ஢
  ᪨ , ⠡  ࠭ ﭭ ଠ, 㦭
   ࠡ,  ࠩ 믮 樠,
  뢮 १⮢  ࠡ 訡.  ⠪  
    㣨  ⥩,  ணࠬ   ⠪
  筮  (200 ப),    ⥩
  ⮫쪮 㢥  ꥬ,   ⥫쭮
  ଠ樨  祭 ++.

  3.1.1 

  ࠬ⨪ 몠  । ᫥騬 ࠢ:

       ணࠬ:
           END                    // END -   
           ᯨ᮪-ࠦ END

       ᯨ᮪-ࠦ:
           ࠦ PRINT      // PRINT -  '\n'  ';'
           ࠦ PRINT ᯨ᮪-ࠦ

       ࠦ:
           ࠦ + 
           ࠦ - 
           

       :
            / ࢨ筮
            * ࢨ筮
           ࢨ筮

       ࢨ筮:
           NUMBER      // ᫮  饩 ⮩  ++
           NAME        //   몥 ++  ᪫祭 '_'
           NAME = ࠦ
           - ࢨ筮
           ( ࠦ )

   묨 ᫮, ணࠬ  ᫥⥫쭮 ப,  
   ப ᮤন   ᪮쪮 ࠦ, ࠧ 窮
    ⮩. ᭮  ࠦ -  ᫠,  
   樨  *,  /,  +, - (㭠   )  =. 
   易⥫쭮 뢠  ᯮ짮.
       ᨭ⠪᪮  ᯮ ⮤, 筮 뢠
  ४ᨢ ᪮.  ࠭  筮 祢
  ⮤.  ⠪ 몠  ++,      맮
   ᮯ殮  訬 묨 室,  ⮤ 䥪⨢.
    ࠢ ࠬ⨪  ᢮ 㭪,  뢠
  㣨 㭪樨.  ନ ᨬ (ਬ, END, NUMBER, +  -)
  ᯮ ᪨ ஬ get_token(). ନ
  ᨬ ᯮ 㭪ﬨ ᨭ⠪᪮  expr(),
  term()  prim().  ⮫쪮  ࠭ ࠦ  ࠦ
  ⠫ ,  .  饬 ࠭   
   ᮧ , 騥 ࠦ.
     ᯮ   㭪 get_token().
  祭 ᫥ 맮 get_token() ࠭  쭮 ६
  curr_tok. ६  curr_tok ਭ 祭 ⮢ ᫥
  token_value:

           enum token_value {
                NAME,      NUMBER,     END,
                PLUS='+',  MINUS='-',  MUL='*',    DIV='/',
                PRINT=';', ASSIGN='=', LP='(',     RP=')'
           };
           token_value curr_tok;

     㭪権  ।,  get_token() 㦥
   뫠 맢,  ⮬  curr_tok ࠭ ᫥ ᥬ,
    .    뢠  
   ᥬ ।.  㭪  ᥣ ⠥
     ᥬ , 祬 㦭  ᯮ ⮣ ࠢ,
    ண  뢠.  㭪  
   "᢮" ࠦ  頥  १. 㭪 expr() ࠡ뢠
   ᫮  ⠭.  ⮨   横,  ஬
   ᯮ  ᪫뢠  :

          double expr()                   // ᪫뢠   ⠥
          {
            double left = term();

            for(;;)                     // ``筮''
               switch(curr_tok) {
               case PLUS:
                    get_token();        // 砩 '+'
                    left += term();
                    break;
               case MINUS:
                    get_token();        // 砩 '-'
                    left -= term();
                    break;
              default:
                    return left;
              }
           }

    ᥡ  㭪  .  ਭ 
  ᮪஢ 㭪  ணࠬ,  믮 ,
  뢠 㣨 㭪樨. ⬥⨬,  ࠦ  2-3+4
    (2-3)+4,  ।। ࠢ ࠬ⨪.
  ਢ筠  for(;;) -  ⠭ ᯮᮡ  ᪮筮
  横,     ᫮ "筮".  ஦ ଠ
   for,  ୠ⨢   㦨  while(1).
   switch 믮 ୮   ,  
  ⠭  樨 +  - ,  ⮣  㬮砭 믮
   return (default).
     樨 +=  -= ᯮ  믮 権 ᫮ 
  ⠭.    ᢠ: left=left+term() 
  left=left-term().  ਠ left+=term()  left-=term() 
  ⮫쪮 ,    ⪮ । ॡ㥬 ⢨.  ୮
  樨 @ ࠦ x@=y 砥 x=x@y,  ᪫祭 ⮣,  x
   ⮫쪮  ࠧ.  ਬ   :

        +     -     *     /     %     &     |     ^     <<     >>

  ⮬  ᫥騥 樨 ᢠ:

       +=     -=    *=    /=    %=    &=    |=    ^=    <<=    >>=

     ⤥쭮 ᥬ, ⮬ a + =1
  ᮤন ᨭ⠪ 訡 (- ஡  +  =). ஢
  権 ᫥: % - ⨥ ⪠, &, |   ^ - ࠧ來 ᪨
  樨 ,   ᪫饥 ;  <<  >> ᤢ   ᤢ ࠢ.
  㭪樨 term()  get_token()   ᠭ  । expr().
    4 ᬠਢ ஥ ணࠬ   ᮢ㯭
  䠩.   ᪫祭,  ணࠬ   ⠢
  ⠪, ⮡    ꥪ 뢠 ⮫쪮  ࠧ   
  ᯮ짮. ᪫祭  㭪 expr(),  뢠
  㭪 term(),  ,  ᢮ ।, 뢠 prim(),  㦥 , ,
  뢠 expr().  横 室 - ࠧࢠ,  祣 
  室   । prim() ᠭ:

        double expr();    //  ᠭ 室

     㭪 term() ࠢ  㬭   筮
  ⮬,  㭪 expr()  ᫮  ⠭:

       double term()                    // 㬭  ᪫뢠
       {
         double left = prim();

         for(;;)
            switch(curr_tok)    {
            case MUL:
                get_token();         // 砩 '*'
                left *= prim();
                break;
            case DIV:
                get_token();         // 砩 '/'
                double d = prim();
                if (d == 0) return error("  0");
                left /= d;
                break;
            default:
                return left;
            }
        }

  ஢ઠ ⢨    室, ᪮
  १    । ,  ࠢ, ਢ 
  .
  㭪 error() 㤥 ᬮ७ . ६ d  
  ணࠬ ⠬,   ⢨⥫쭮 㦭,  ࠧ  樠.
    몠 ᠭ  室 ⮫쪮  砫 .
   ⠪ ࠭祭  ᪠ ⢥  ணࠬ 
  ᯮᮡ⢮  訡.
   ᥣ  樠஢  ६
  ᢨ⥫  宬 ⨫ ணࠬ஢. ᪫祭 ⠢
   ६,  樠 ࠬ ,  ६
  ⨯ ᨢ  ,    ࠤ樮
  樠樨    ᢠ.  ,  =
   樥 ᢠ,  ⮣  ==   ࠢ.
      㭪 prim, ࠡ뢠 ࢨ筮,   宦 
  㭪樨 expr  term().  ࠧ  諨    娨 맮,
     - ਤ ᤥ.     㦥:

          double number_value;
          char name_string[256];

          double prim()               // ࠡ뢠 ࢨ筮
          {
            switch (curr_tok) {
            case NUMBER:          // ⠭  饩 窮
              get_token();
              return number_value;
            case NAME:
              if (get_token() == ASSIGN) {
                 name* n = insert(name_string);
                 get_token();
                 n->value = expr();
                 return n->value;
              }
              return look(name_string)->value;
           case MINUS:               // 㭠 
              get_token();
              return -prim();
           case LP:
              get_token();
              double e = expr();
              if (curr_tok != RP) return error("ॡ )");
              get_token();
              return e;
          case END:
              return 1;
         default:
              return error("ॡ ࢨ筮");
         }
      }

    NUMBER (  ⠭  饩 窮),
  頥  祭. 㭪  get_token() 頥 祭
  ⠭   ६ number_value. ᫨  ணࠬ
  ᯮ  ६,    㪠뢠  , 
      ࠡ⠭,  ⮬ ॡ 
  ⨬.  ⠪ ⮨    砥.   ᥬ
      ⥩: 祭, ।饣  ᥬ
  (  ணࠬ  token_value),  (᫨ 室) ᮡ⢥
  祭 ᥬ.    ⮫쪮   ६
  curr_tok, ⮬  ࠭ ᫥ ⠭ 祭 NUMBER
  ॡ 쭠 ६ number_value.  襭 室
  ⮬,     ᫥ 砫 롨ࠥ  ᫮,
   ⥬ 뢠 㣮  室 ⮪.  ⢥ ࠦ
  ।   ⮩ 譥 쭮 ६
  ($$3.5 [15]).
      ᫨ ᫥ 祭 NUMBER  ࠭  쭮 ६
  number_value,  ப ।⠢ ᫥ 祭 NAME
  ࠭  name_string. । ⥬,  -   ,
     ।, ⮡ ᭨, 㤥  
  ᢠ 祭,   㤥 ⮫쪮 ᯮ짮 饥
   祭.       ⠡ .  ⠡
  ᬠਢ   $$3.1.3;   筮 ⮫쪮 ,  
  ⮨  ᥩ,  :

       struct name {
          char* string;
          name* next;
          double value;
       };

   next ᯮ  ⮫쪮 㦥묨 㭪ﬨ, ࠡ騬
   ⠡楩:

      name* look(const char*);
      name* insert(const char*);

   㭪樨  㪠⥫    name,  ᮮ⢥
   ࠬ-ப. 㭪 look() "㣠", ᫨   뫮
  ᥭ  ⠡.  砥,     ᯮ짮
    ।⥫쭮 ᠭ,    ࠧ  
   ⮫쪮    ᢠ.

  3.1.2  㭪 

  祭 室  -  ᠬ ⠭  ணࠬ.
  稭 ஥  ⮬,  ணࠬ  ⢮
   짮⥫,   ""   ﬨ, 뢠 ਭ
  ᮣ襭  ।ᬠਢ 騥 । 訡.
  ⪨ ⠢ 祫  ᥡ  㤮  設 ࠧ,
   ࠢ, ᬠਢ  ਥ,  ࠢ.
     㭪樨  ஢ ⮨  ᫥⥫쭮
  뢠 ᨬ  ⠢   ᥬ,  ன ࠡ
  㦥 㭪樨  ᮪ ஢.  ⮬ ਬ ஢ 
   㭪 get_token().  , ᠭ ஢
  㭪樨  筮 । .   ⥬ 
  ⠭ 㭪樨  ⠪ 権.
      ࠢ     뫨 ᯥ樠쭮 ࠭ ᪮쪮
  ஬  ⮪ 㭪権 . ⥫ 
   । ᥬ ॢ⨫  get_token()  稢 
  㭪.
      ࢠ ᫮ ⮨  ⮬,  ᨬ  ப '\n'
    ,  ⮪ 㭪樨  ਭ 
   ᨬ 饭 ஡.  ,   㭪権 '\n'
   祭 ⮫쪮  ᨬ, 騩 ᥬ.
  ⮬ 室 ஢  饭 ஡ (஡,
  ⠡  ..).     do,  ⥭
   while,  ᪫祭 ⮣,  ⥫  do
  ᥣ 믮    ࠧ:

      char ch;

      do {    // ய᪠ ஡  ᪫祭 '\n'
          if(!cin.get(ch)) return curr_tok = END;
      } while (ch!='\n' && isspace(ch));


  㭪 cin.get(ch) ⠥  ᨬ  ⠭⭮ 室 ⮪
   ch. 祭 ᫮ if(!cin.get(ch)) - ,  ᫨  ⮪ cin
      ᨬ.   頥 ᥬ END, ⮡
   ࠡ .   ! (NOT) 㦭 ⮬, 
   砥 ᯥ譮 뢠 get() 頥 㫥 祭.
       㭪-⠭ isspace()  <ctype.h> ஢,  
    ࠬ 饭 ஡ ($$10.3.1).  頥 㫥
  祭, ᫨ ,    ⨢ 砥. ஢ઠ ॠ
   饭  ⠡, ⮬  ᪮  뢠 isspace(),
  祬 ஢ ᠬ.    ᪠  㭪 isalpha(), isdigit()
   isalnum(),  ᯮ  get_token().
       ᫥ ய᪠ 饭 ஡ ᫥騩 ⠭ ᨬ
  ।,  㤥 稭   ᥬ. ०, 祬
  ਢ  㭪, ᬮਬ  砨 ⤥쭮. ᥬ
  '\n'  ';', 騥 ࠦ, ࠡ뢠 ᫥騬 ࠧ:

           switch (ch) {
           case ';':
           case '\n':
                cin >> ws;    // ய 饭 ஡
                return curr_tok=PRINT;

  易⥫쭮 ᭮ ய᪠ ஡, , ᤥ , 
    맮 㭪樨 get_token(). ६ ws, ᠭ
   䠩 <stream.h>, ᯮ ⮫쪮  ਥ 㦭 ஡.
  訡  室 ,  ⠪     㦥 
  ᫥饣 맮 㭪樨 get_token().  ,  ᪮쪮
  ⮪ 롮   ᫥⥫쭮 ஢, 
    ਠ⮢.   ᨬ ('\n'  ';') 頥 ᥬ
  PRINT,    頥  curr_tok.
      ᫠ ࠡ뢠 ᫥騬 ࠧ:

         case '0': case '1': case '2': case '3': case '4':
         case '5': case '6': case '7': case '8': case '9':
         case '.':
              cin.putback(ch);
              cin >> number_value;
              return curr_tok=NUMBER;

   ⪨ ਠ⮢ ਧ⠫쭮,   ⨪쭮,-  ᠬ
  訩 ᯮᮡ, ᪮ ⠪ ⥪ 㤭 ;   ப
     ⮬⥫쭮. ᪮  >>  
  ⠭  饩 窮 ⨯ double, ணࠬ ਢ쭠:
  ० ᥣ 砫 ᨬ (  窠) 頥 
   cin,  ⥬ ⠭    number_value.
  , .. ᥬ NAME, ।  㪢,  ன 
   ᪮쪮 㪢  :

           if (isalpha(ch)) {
              char* p = name_string;
              *p++ = ch;
              while (cin.get(ch) && isalnum(ch)) *p++ = ch;
              cin.putback(ch);
              *p = 0;
              return curr_tok=NAME;
           }

    ࠣ ணࠬ   name_string ப, 稢
   㫥 ᨬ. 㭪樨 isalpha()  isalnum() ।  <ctype.h>.
    isalnum(c) 㫥, ᫨ c - 㪢  ,  㫥
    ⨢ 砥.
   ਢ, , 㭪  :

           token_value get_token()
           {
             char ch;

             do {    // ய᪠ 饭 ஡  ᪫祭 '\n'
                 if(!cin.get(ch)) return curr_tok = END;
             } while (ch!='\n' && isspace(ch));

             switch (ch) {
             case ';':
             case '\n':
                  cin >> ws;    // ய 饭 ஡
                  return curr_tok=PRINT;
             case '*':
             case '/':
             case '+':
             case '-':
             case '(':
             case ')':
             case '=':
                  return curr_tok=token_value(ch);
             case '0': case '1': case '2': case '3': case '4':
             case '5': case '6': case '7': case '8': case '9':
             case '.':
                  cin.putback(ch);
                  cin >> number_value;
                  return curr_tok=NUMBER;
            default:            // NAME, NAME=  訡
                  if (isalpha(ch)) {
                     char* p = name_string;
                     *p++ = ch;
                     while (cin.get(ch) && isalnum(ch)) *p++ = ch;
                     cin.putback(ch);
                     *p = 0;
                     return curr_tok=NAME;
                  }
                  error("⨬ ᥬ");
                  return curr_tok=PRINT;
             }
          }

      ८ࠧ 樨  祭 ᥬ   ਢ쭮,
   ᪮  ᫥ token_value ᥬ 樨 뫠 ।
    楫 ( ᨬ 樨).

  3.1.3   

    㭪 ᪠  ⠡ :

         name* look(char* p, int ins =0);

  ன  ࠬ 뢠, 뫠  ᨬ쭠 ப, 
  , ࠭ ᥭ  ⠡. 樠 =0  ⠭⭮
  祭 ࠬ, ஥ ᯮ, ᫨ 㭪 look()
  뢠 ⮫쪮   ࠬ஬.  㤮, ⠪ 
    look("sqrt2"),  砥 look("sqrt2",0),
  .. ,   ᥭ  ⠡. ⮡ 뫮 ⠪  㤮 
   ᥭ  ⠡, ।  㭪:

        inline name* insert(const char* s) { return look(s,1); }

   ࠭ 㯮,   ⮩ ⠡  ⠪ ⨯:

        struct name {
             char* string;
             name* next;
             double value;
        };

   next ᯮ  裡 ᥩ  ⠡.
  ⢥ ⠡  -   ᨢ 㪠⥫  ꥪ ⨯ name:

        const TBLSZ = 23;
        name* table[TBLSZ];

   ᪮  㬮砭  ᪨ ꥪ 樠 㫥,
   ⠪ ਢ쭮 ᠭ ⠡ table ᯥ稢 ⠪  㦭
   樠.
         ᪠   ⠡ 㭪 look() ᯮ ⮩
   - (,      -,
   뢠):
   ):


             int ii = 0;        // -
             const char* pp = p;
             while (*pp) ii = ii<<1 ^ *pp++;
             if (ii < 0) ii = -ii;
             ii %= TBLSZ;

  묨 ᫮,   樨 ^ ("᪫饥 ")  ᨬ
  室 ப p ।   ii.   १ x^y
  ࠢ 1 ⮣  ⮫쪮 ⮣,   ࠧ  ࠭ x  y ࠧ.
   믮 樨 ^ 祭 ii ᤢ   ࠧ ,
  ⮡ ᯮ짮  ⮫쪮   ii.  ⢨ 
   ⠪ ࠧ:

             ii <<= 1;
             ii ^= *pp++;

   襣 -  ᯮ짮  ^, 祬 +. 
  ᤢ   祭 ਥ -   .
  

             if (ii < 0) ii = -ii;
             ii %= TBLSZ;

  ࠭,  祭 ii 㤥   0...TBLSZ-1. ,
   % -    ⪠.   ਢ
  㭪 look:

            #include <string.h>

            name* look(const char* p, int ins =0)
            {
              int ii = 0;        // -
              const char* pp = p;
              while (*pp) ii = ii<<1 ^ *pp++;
              if (ii < 0) ii = -ii;
              ii %= TBLSZ;

              for (name* n=table[ii]; n; n=n->next)    // 
                  if (strcmp(p,n->string) == 0) return n;

              if (ins == 0) error("  ");

              name* nn = new name;                     // ᥭ
              nn->string = new char[strlen(p)+1];
              strcpy(nn->string,p);
              nn->value = 1;
              nn->next = table[ii];
              table[ii] = nn;
              return nn;
            }

   ᫥ ᫥ - ii  ⮩    童
   next.  ࠢ   ⠭⭮ 㭪樨
   ࠢ ப strcmp(). ᫨  ,  頥 㪠⥫
    ᮤঠ  ,   ⨢ 砥   
    ⨬ .
          砥 ᮧ  ꥪ name
    ᢮    樨 new (. $$3.2.6), 
   樠  祭  ᯨ᮪ . ᫥ 믮 
   ᥭ    砫 ᯨ᪠, ᪮   ᤥ 
    ஢ન ⮣,   ᯨ᮪ . 쭠 ப 
   ⠪ ࠧ頥  ᢮ . 㭪 strlen() 㪠뢠,
   ᪮쪮  㦭  ப,  new ⢮ 㦭 ,
    㭪 strcpy()    ப.  ப 㭪樨
   ᠭ  <string.h>:

           extern int strlen(const char*);
           extern int strcmp(const char*, const char*);
           extern char* strcpy(char*, const char*);

  3.1.4  ࠡ⪠ 訡

  ᪮ ணࠬ 筮 ,   ᮡ ᯮ
   ࠡ⪥ 訡. 㭪 error  뢠 ᫮ 訡,
  뤠 ᮮ饭    頥 ࠢ ⭮:

            int no_of_errors;

            double error(const char* s)
            {
              cerr << "error: " << s << "\n";
              no_of_errors++;
              return 1;
            }

  ਧ 室 ⮪ cerr 筮 ᯮ  
  뤠 ᮮ饭  訡.
  ࠢ 頥  error() ⮬,  訡,  ࠢ,
   । ᫥ ࠦ.    
  ४ ᫥,   祭, ஥  
  맢 ᫥ 訡.  ⮣   室
  ᫥. ᫨  㭪 get_token() ᫥  ப, 
  㭪 error()   㪠뢠 짮⥫ ਡ⥫쭮 
  訡.  뫮    ࠪ⨢ ࠡ  ஬.
   ᫥  訡 ணࠬ  , ᪮
   㤠 । ࠧ㬭 ਠ  쭥襣 믮.
       맮 㭪樨 exit(),  稢
  ࠡ  室묨 ⮪ ($$10.5.1)  蠥 ணࠬ,
   ᢮ ࠬ  ⢥  १.
   ࠤ ᯮᮡ 襭 ணࠬ -  맮 㭪樨 abort(),
   뢠 믮 ணࠬ   ࠧ  ᫥
  ࠭ ଠ樨  ⫠稪 ( ⨢ ).
  ஡     ᢮ ࠢ筮 㪮⢥.
      ⮭ ਥ ࠡ⪨ 訡  ।, ᫨
  ਥ஢  ᮡ 樨 (.$$9),  । 襭
   ਥ  筮   200 ப.

  3.1.5  ࠩ

     ணࠬ ।, 㦥 ⮫쪮 ࠩ, ⮡
  樠஢   .  襬 ਬ  ⨬
  ࠢ 㭪 main():

         int main()
         {
           // ⠢ ।। :
           insert("pi")->value = 3.1415926535897932385;
           insert("e")->value = 2.7182818284590452354;

           while (cin) {
               get_token();
               if (curr_tok == END) break;
               if (curr_tok == PRINT) continue;
               cout << expr() << '\n';
           }
           return no_of_errors;
         }

   ਭ,  㭪 main() 頥 , ᫨ ணࠬ 蠥
   ଠ쭮,   㫥  祭,  ᫨ ந室 .  㫥
   祭 頥  ᫮ 訡. 뢠,  樠
   ᢮  ᥭ ।।   ⠡.
       横 main  ࠦ  뤠 १.  
    ப:

          cout << expr() << '\n';

  ஢ઠ cin   室 横 ࠭ 襭 ணࠬ,
   ᫨ -   室 ⮪,  ஢ઠ  ᥬ
  END 㦭  ଠ쭮 襭 横,  㭪 get_token()
  㦨  䠩.  break 㦨  室 
  襣 ꥬ饣  switch  横 (..  for,
  while  do). ஢ઠ  ᥬ PRINT (..  '\n'  ';') ᭨
   㭪樨 expr() 易 ࠡ뢠  ࠦ. 
  continue ⥭ 室   横, ⮬  襬
  砥 ࠣ:

           while (cin) {
           // ...
           if (curr_tok == PRINT) continue;
           cout << expr() << "\n";
         }

   ⥭ ࠣ:

          while (cin) {
          // ...
          if (curr_tok == PRINT) goto end_of_loop;
          cout << expr() << "\n";
          end_of_loop: ;
        }

   ஡ 横 뢠  $$R.6

  3.1.6  ࠬ  ப

   ணࠬ  㦥 뫠 ᠭ  ⫠, ᭨,
   㤮 砫 ᪠ ,  ࠦ,  ⥬ 室
   .  ,  筮 㦭  ᫨ 
  ࠦ. ᫨  ࠦ   ࠬ  ப
  ᪠ ,    ᪮쪮 ⨩ .
       㦥 뫮 ᪠, 믮 ணࠬ 稭 맮 main().
   ⮬ 맮 main() 砥  ࠬ: ᫮ ࠬ஢ (筮
  뢠 argc)  ᨢ ப ࠬ஢ (筮 뢠 argv).
  ࠬ -  ᨬ ப, ⮬ argv  ⨯ char*[argc+1].
   ணࠬ ( ⮬ ,   뫮    ப)
  ।  argv[0], ⮬ argc ᥣ   . ਬ,
    ப

            dc 150/1.1934

  ࠬ  祭:

            argc        2
            argv[0]     "dc"
            argv[1]     "150/1.1934"
            argv[2]     0

       ࠬ஢  ப ; ஡  ⮬, 
  ᯮ짮  ⠪, ⮡   ᠬ ணࠬ.   砥 
  뢠 ᮢᥬ , ᪮ 室 ⮪   ஥
   ᨬ ப  䠩 ($$10.5.2).  ਬ,  ।
  cin ⠪, ⮡ ᨬ ⠫  ப,    ⠭⭮
  室 ⮪:

           int main(int argc, char* argv[])
           {
             switch(argc) {
               case 1:    // 뢠  ⠭⭮ 室 ⮪
                  break;
               case 2:    // 뢠  ப ࠬ஢
                 cin = *new istream(argv[1],strlen(argv[1]));
                 break;
               default:
                 error("᫨誮  ࠬ஢");
                 return 1;
            }

             //  ० ਠ main
         }

   ⮬ istrstream -  㭪 istream,  뢠
  ᨬ  ப, 饩   ࠬ஬. ⮡ ᯮ짮
  istrstream 㦭   ணࠬ 䠩 <strstream.h>,  
   <iostream.h>.  ⠫쭮  ணࠬ ⠫  ,
  ஬  ࠬ஢  㭪 main()  ᯮ짮 
    switch.    㭪 main() ⠪, ⮡ 
   ਭ ᪮쪮 ࠬ஢   ப. 
    ᫨誮 㦭, ⥬ ,   ᪮쪨 ࠦ
  ।   ࠬ:

           dc "rate=1.1934;150/rate;19.75/rate;217/rate"

  窨 室 ⮬,  ᨬ ';' 㦨  ⥬ UNIX
  ࠧ⥫ .  㣨 ⥬   ᢮ ᮣ襭 
  ࠬ  ப.

3.2   権

    ஡ ᠭ 権 몠 ++   $$R.7. 㥬
    ࠧ.   ਢ ⪠ ᢮ 権 
  ᪮쪮 ਬ஢.   ᮯ஢  
  ᪮쪨 ࠪ묨     ਬ஬  ᯮ짮.
    ਬ class_name 砥  , member -  童,
  object - ࠦ, 饥 ꥪ , pointer - ࠦ, 饥
  㪠⥫, expr -  ࠦ,  lvalue () - ࠦ,
  饥  騩 ⠭⮩ ꥪ. 祭 (type) 
   ⨯  饬  (   *, ()  ..).
  ᫨  㪠  ᪮,  ࠭祭.
      冷 ਬ 㭠 権  権 ᢠ
  "ࠢ ",   ⠫ 権 - "᫥ ࠢ".
   , a=b=c 砥 a=(b=c), a+b+c 砥 (a+b)+c,  *p++ 砥
  *(p++),   (*p)++.

____________________________________________________________
                樨 ++
============================================================
::    襭     class_name :: member
::    쭮                     :: name
____________________________________________________________
.        롮 童                    object . member
->       롮 童                 pointer -> member
[]       ஢                 pointer [ expr ]
()       맮 㭪樨                  expr ( expr_list )
()       ୮ 祭           type ( expr_list )
sizeof    ꥪ                 sizeof expr
sizeof    ⨯                    sizeof ( type )
____________________________________________________________
++       䨪 ६          lvalue ++
++       䨪 ६           ++ lvalue
--       䨪 ६          lvalue --
--       䨪 ६           -- lvalue
~                             ~ expr
!        ᪮                   ! expr
-                           - expr
+                            + expr
&        ⨥                   & lvalue
*        ᢥ                    * expr
new       (ࠧ饭)          new type
delete   ⮦ (᢮)     delete pointer
delete[] ⮦ ᨢ            delete[] pointer
()       ਢ(८ࠧ)⨯ ( type ) expr
____________________________________________________________
. *      롮 童 ᢥ          object . pointer-to-member
->*      롮 童 ᢥ          pointer -> pointer-to-member
____________________________________________________________
*                              expr * expr
/                                expr / expr
%        ⮪               expr % expr
____________________________________________________________
+         ()                expr + expr
-        ⠭ ()              expr - expr
____________________________________________________________

       樨 ⠡, 室騥   訬 
    ਧ⠫묨 ⠬,
    ਮ. ਮ 権 㬥蠥 
   "ᢥ ". ਬ, a+b*c 砥 a+(b*c), ⠪  *
   ਮ , 祬 +;  ࠦ a+b-c 砥 (a+b)-c,
  ᪮ +  -   ਮ,  樨 +  -
  ਬ "᫥ ࠢ".


____________________________________________________________
              樨  ++ (த)
============================================================
<<                             expr << expr
>>        ࠢ                    expr >> expr
____________________________________________________________
<                                  expr < expr
<=         ࠢ                expr <= expr
>                                  expr > expr
>=         ࠢ                expr >= expr
____________________________________________________________
==                                  expr == expr
!=        ࠢ                        expr != expr
____________________________________________________________
&        ࠧ來                    expr & expr
____________________________________________________________
^        ࠧ來 ᪫饥      expr ^ expr
____________________________________________________________
|        ࠧ來 饥       expr | expr
____________________________________________________________
&&       ᪮                     expr && expr
____________________________________________________________
||       ᪮                   expr || expr
____________________________________________________________
? :       ᫮                expr? expr : expr
____________________________________________________________
=        ⮥ ᢠ            lvalue = expr
*=       ᢠ  㬭       lvalue *= expr
/=       ᢠ           lvalue /= expr
%=       ᢠ  ⨥          lvalue %= expr
         ⪠  
+=       ᢠ  ᫮       lvalue += expr
-=       ᢠ  ⠭       lvalue -= expr
<<=      ᢠ  ᤢ    lvalue <<= expr
>>=      ᢠ  ᤢ ࠢ  lvalue >>= expr
&=       ᢠ  ࠧ來     lvalue &= expr
|=       ᢠ  ࠧ來      lvalue |= expr
         騬 
^=       ᢠ  ࠧ來      lvalue ^= expr
         ᪫騬 
____________________________________________________________
          (᫥⥫쭮)     expr , expr
____________________________________________________________

  3.2.1  

  ⠪ 몠 ++ ॣ㦥 ᪮,  ࠧࠧ  ਬ
  ᯮᮡ ᡨ  ⮫.  뤥 䠪᪨ ࠬ 
  맮 㭪権,  ⨯,  㭪樨,  ⠪ 㦠 
  ࠧ襭 䫨⮢  ﬨ   ਮ⮬.
   , ᫥ 砥  ᫨誮 , ᪮ ਮ
   冷 ਬ 権 । ⠪, ⮡ ࠦ 﫨
  "⢥ ࠧ" (..  ࠭ ࠧ).
  ਬ, ࠦ

              if (i<=0 || max<i)   // ...

  砥 ᫥饥: "᫨ i   ࠢ ,  ᫨ max  i".
   ,  ⭮

              if ( (i<=0) || (max<i) )    // ...

    ⭮ ⨬,   ᫥ ࠦ

              if (i <= (0||max) < i)    // ...

    , ᫨ ணࠬ  㢥७  㪠 ࠢ,
  ᫥ ᯮ짮 ᪮, 祬  । 
         ࠦ, :

             if ( (i<=0) || (max<i) )   // ...

   ᫮ ࠦ ᪮ ᯮ .   , ,
  뢠,  ᫮ ࠦ  筨 訡. ⮬,
  ᫨    饭,   ⮬ ࠦ 㦭 ᪮,
   ࠧ      ⥫ ६.
  뢠 砨,  ਮ 権  ਢ  "⢥"
  浪 ᫥. ਬ,  ࠦ

             if (i&mask == 0)    // 誠! & ਬ ᫥ ==

    ந室 ᪨஢ i (i&mask),  ⥬ ஢ઠ १
    0. ᪮  == ਮ , 祬  &,  ࠦ ⭮
   i&(mask==0).  ⮬ 砥 ᪮   ஫:

             if ((i&mask) == 0) // ...

    ਢ   ࠦ, ஥ 
   ᮢᥬ  ⠪,     襭 짮⥫:

             if (0 <= a <= 99) // ...

   ⨬,     (0<=a)<=99,  १ ࢮ
  ࠢ ࠢ  0,  1,   祭 a (᫨, 筮,
  a   1). ஢,   a   0...99,  ⠪:

             if (0<=a && a<=99) // ...

  । 窮 ࠭ 訡,   ᫮  ==
  (ࠢ) ᯮ = (᢮):

             if (a = 7)   // 訡: ᢠ ⠭  ᫮
                    // ...

    ᭨, ᪮  設⢥ 몮 "=" 砥 "ࠢ".
   ࠭  ⠢ 㤠 ᮮ  訡  த.

  3.2.2  冷 ᫥

  冷 ᫥ ࠦ, 室  ࠦ,  ᥣ
  ।. ਬ:

             int i = 1;
             v[i] = i++;

   ࠦ     v[1]=1,   v[2]=1.
  ᫨  ࠭祭  冷 ᫥ ࠦ,  ࠭
  砥  ᮧ  ⨬ . ࠭
  ᫥  ।०  ᫥ ࠦ,   ᮦ
  設⢮     ⮣.
        権

               &&    ||   ,

  ࠭,    ࠭  ࠭ ࠢ ࠭.
  ਬ,  ࠦ b=(a=2,a+1) b ᢮ 祭 3. ਬ
  樨 ||    $$3.2.1,  ਬ 樨 &&   $$3.3.1.
  ⬥⨬,    ⫨砥    ⮩ ⮩, 
  ᯮ  ࠧ ࠬ஢  맮 㭪権.  
  ࠦ:

              f1(v[i],i++);       //  ࠬ
              f2( (v[i],i++) )    //  ࠬ

  맮 㭪樨 f1 ந室   ࠬࠬ: v[i]  i++, 
  冷 ᫥ ࠦ ࠬ஢ ।. ᨬ
  ᫥ 祭 䠪᪨ ࠬ஢  浪 ᫥
  -   訩 ⨫ ணࠬ஢.  ⮬  ணࠬ
  ⠭ ७ᨬ.
  맮 f2 ந室   ࠬ஬, 騬 ࠦ,
  ᮤঠ騬  :  (v[i], i++).  ⭮ i++.
         ਭ㤨⥫쭮  冷 ᫥. ਬ,
  a*(b/c)    (a*b)/c (᫨ ⮫쪮 짮⥫
    ⮬ - ࠧ稥). ⨬,   祭  饩
  窮 १ ᫥ ࠦ a*(b/c)  (a*b)/ 
  ࠧ 쬠 ⥫쭮.

  3.2.3  ६  ६

   ++   ६  ⫨稥    
    ᫮  ᢠ.  । ++lvalue 砥
  lvalue+=1, ,  ᢮ ।  砥 lvalue=lvalue+1  ᫮,
   ᮤন lvalue  뢠  䥪⮢. ࠦ,
  饥 ࠭ ६,  ⮫쪮  ࠧ. 筮
  砥  ६ (--). 樨 ++  -- 
  ᯮ짮  䨪  䨪 樨.  祭 ++x
    (. . 㢥祭  1) 祭 x. ਬ, y=++x
  ⭮ y=(x+=1). ⨢, 祭 x++ ࠢ ० 祭 x.
  ਬ, y=x++ ⭮ y=(t=x,x+=1,t),  t - ६ ⮣
   ⨯,   x.
      ,  樨 ६  ६ 㪠⥫
   ᫮ 1  㪠⥫  ⠭ 1  㪠⥫, 祬
  ᫥ ந室   ᨢ,   ஥
  㪠⥫. , १⮬  p++ 㤥 㪠⥫  ᫥騩 .
   㪠⥫ p ⨯ T* ᫥饥 ᮮ⭮襭 ୮  ।:

            long(p+1) == long(p) + sizeof(T);

       ᥣ 樨 ६  ६ ᯮ 
   ६  横. ਬ, ஢ ப,
  稢饩 㫥 ᨬ,  ᫥騬 ࠧ:

           inline void cpy(char* p, const char* q)
           {
             while (*p++ = *q++) ;
           }

   ++ ( )   ஭, ⠪  ⨢ 
  - ⠪ ᦠ⮣, ᯮ饣 ᫮ ࠦ ⨫
  ணࠬ஢. 

           while (*p++ = *q++) ;

  ⭥ ᥣ,  ࠧ㬨⥫    .
    ⥫쭥 ᬮ  ⠪ 樨, ᪮
   C  C++    ।.
      砫 ᬮਬ  ࠤ樮 ᯮᮡ ஢ ᨢ
  ᨬ:

           int length = strlen(q)
           for (int i = 0; i<=length; i++) p[i] = q[i];

   䥪⨢ 襭: ப 稢 㫥; ⢥
  ᯮᮡ    -      㫥 ᨬ;
   १ ப ⠥   ⠭  ,  
  ஢,   . ⮬ ஡㥬 ⠪ ਠ:

           for (int i = 0; q[i] !=0 ; i++) p[i] = q[i];
           p[i] = 0;   //  㫥 ᨬ

  ᪮ p  q - 㪠⥫,    ६ i,
  ᯮ㥬  樨:

           while (*q !=0) {
                 *p = *q;
                 p++;      // 㪠⥫  ᫥騩 ᨬ
                 q++;      // 㪠⥫  ᫥騩 ᨬ
           }
           *p = 0;         //  㫥 ᨬ

  ᪮  䨪᭮ ६  ᭠砫 ᯮ짮
  祭,  ⥬ 㦥 㢥 ,  ९ 横 ⠪:

            while (*q != 0) {
                  *p++ = *q++;
             }
             *p = 0;   //  㫥 ᨬ

  ⬥⨬,  १ ࠦ  *p++ = *q++ ࠢ *q. ⥫쭮,
   ९  ਬ  ⠪:

             while ((*p++ = *q++) != 0)  { }

   ⮬ ਠ 뢠,  *q ࠢ  ⮫쪮 ⮣, 
  *q  㦥 ᪮஢  *p, ⮬  ᪫ 饥
  ᢠ 㫥 ᨬ. ,    ᮪
   ⮣ ਬ, ᫨ ,  ⮩   㦥, 
   "!= 0" 筠, .. १ ᫮ ࠦ  ⠪
  ᥣ ࠢ  㫥.   १  室 
  ࢮ砫쭮 ਠ,  뢠 㬥:

             while (*p++ = *q++) ;

  㦥  ਠ 㤭 , 祬 ਢ ? 쪮
   ணࠬ⠬  ++  ! 㤥  ᫥ ਠ
   䥪⨢  ⠬ ६   ?  ᫨    
  ࢮ ਠ  㭪樥 strlen(),   祢.  
  ਠ⮢  䥪⨢, ।  ᯥ䨪 ⥬
  , ⠪  ﬨ ࠭.  䥪⨢ 
  ஢  襩 設    ⠭⭮ 㭪樨 ஢
  ப  䠩 <string.h>:

          int strcpy(char*, const char*);

  3.2.4  ࠧ來 ᪨ 樨

  ࠧ來 ᪨ 樨

        &    |    ^    ~    >>    <<

  ਬ  楫,    ꥪ⠬ ⨯ char, short, int, long 
     .  樨 ⠪ 㤥 楫.
       ᥣ ࠧ來 ᪨ 樨 ᯮ 
  ࠡ  訬  稭 ⢮  (ᨢ ࠧ冷).
   ⮬ 砥  ࠧ  楫 ।⠢ 
   ⢠,  ᫮ ⮢ । ⢮ ࠧ冷.
  ୠ  &   祭 ,
   |  ꥤ,   ^  ࠧ .
    ᫥    ⠬ ⢠.
   ਢ ਬ, ⢮  <iostream.h>:

           class ios {
           public:
              enum io_state {
                   goodbit=0, eofbit=1, failbit=2, badbit=4
              };
              // ...
           };

  ﭨ ⮪  ⠭ ᫥騬 ᢠ:

           cout.state = ios::goodbit;

  筥  ios 室, ⮬  । io_state 室
    ios,  ⠪ ⮡   , ᫨ 짮⥫  ᢮
    goodbit.
    ஢  ४⭮ ⮪  ᯥ譮 砭 樨 
   ⠪:

          if (cout.state&(ios::badbit|ios::failbit))  // 訡  ⮪

    ᪮ 室 ⮬,   &   ᮪
  ਮ, 祬  "|".
    㭪, 㦨  室 ⮪,  ᮮ  ⮬ ⠪:

          cin.state |= ios::eofbit;

   |= ᯮ ⮬,   ⮪ 㦥   訡
  (.. state==ios::badbit),  ᢠ

          cin.state =ios::eofbit;

      ਧ. ⠭ ⫨  ﭨ 
  ⮪  ᫥騬 ᯮᮡ:

         ios::io_state diff = cin.state^cout.state;

   ⠪ ⨯,  io_state, 宦 ࠧ稩  ᫨誮 
  ,   㣨 室 ⨯    쬠
  . ਬ,  ࠢ   ࠧ來 ᨢ,  
   ।⠢    ࠡ뢠 뢠,
   㣮 -  뢠,  ࠡ⪨.
     ⬥⨬,  ᯮ짮  ($$R.9.6)  㦨 㤮
     ᯮᮡ ࠡ  ﬨ ᫮, 祬 ᤢ 
  ᪨஢.  ﬨ ᫮  ࠡ    ࠧ來
  ᪨  権. ਬ,  뤥 । 16 ࠧ冷
   । 32-ࠧ來 楫:

        unsigned short middle(int a) { return (a>>8)&0xffff; }

      쪮  ⠩ ࠧ來 ᪨ 樨   ᪨
  ﬨ:

                &&    ||    !

  ⮬ ᫥   0  1,    ᭮
  ᯮ  ᫮ ࠦ ஢ if, while  for
  ($$3.3.1).  ਬ,  !0 ( )  祭 1, ⮣  ~0
  ( ) ।⠢ ᮡ  ࠧ冷 " ",
   筮  祭 -1  ⥫쭮 .

  3.2.5  ८ࠧ ⨯

   뢠 室  ८ࠧ 祭  ⨯ 
  祭 㣮. ⮬  ८ࠧ 㤥
  祭 㪠 ⨯, 祭  祭 㣮 ⨯.
  ਬ:

          float r = float(1);

   । ᢠ 楫 祭 1 ८ࠧ  祭
   饩 窮 1.0f.  ८ࠧ ⨯  
  ᮬ, ⮬  ᢠ  (᫨ ⮫쪮 ⨯  
  뫪).
          ८ࠧ ⨯:
  ࠤ樮 ,   ਢ  , ਬ, (double)a
   㭪樮쭠 , ਬ, double(a). 㭪樮 
   ᯮ짮  ⨯,    ⮣ .
  ਬ, ⮡ ८ࠧ 祭  ⨯ 㪠⥫,  
  ᯮ짮 ਢ

         char* p = (char*)0777;

   ।   ⨯:

        typedef char* Pchar;
        char* p = Pchar(0777);

    , 㭪樮쭠   ਢ 
  ।⥫쭥. ᬮਬ   ਬ:

         Pname n2 = Pbase(n1->tp)->b_name; // 㭪樮쭠 
         Pname n3 = ((Pbase)n2->tp)->b_name;   //   ਢ

  ᪮  ->  訩 ਮ, 祬  ਢ,
  ᫥ ࠦ 믮 ⠪:

        ((Pbase)(n2->tp))->b_name

  ᯮ  ८ࠧ  ⨯ 㪠⥫  뤠  ꥪ
   ꥪ ந쭮 ⨯. ਬ, ᢠ

        any_type* p = (any_type*)&some_object;

     ஬ ꥪ (some_object) १ 㪠⥫
  p   ꥪ ந쭮 ⨯ (any_type).   , ᫨
  some_object  ⢨⥫쭮  ⨯  any_type,  
  ࠭  ⥫ १.
     ᫨ ८ࠧ ⨯   室,   ᫥
  . ணࠬ,    ⠪ ८ࠧ, 筮
  㤭 , 祬 ணࠬ,   騥.    ६
  ணࠬ   묨 ८ࠧﬨ ⨯ ⭥,
  祬 ணࠬ,  室  ⠪ ८ࠧ, ⮬ 
    ⨯  ।⠢ ⨩  ᮪ ஢.
  , ਬ, 㯠 ணࠬ, ࠢ騥 ॣ஬ ன⢠ 
   ᤢ  ᪨஢ 楫,  ⮣, ⮡ ।
  室  (struct)  ࠡ ।⢥  
  (. $$2.6.1). ४⭮  ८ࠧ ⨯ 
  ⢥   ⮣, ᪮쪮 ணࠬ ,  
  ࠡ⠥  ꥪ⠬ ࠧ ⨯,   ᯥ䨪  ॠ樨
  몠. ਢ ਬ:

            int i = 1;
            char* pc = "asdf";
            int* pi = &i;
            i = (int)pc;
            pc = (char*)i; // ஦: 祭 pc  .
                           //   設 sizeof(int)
                           // , 祬 sizeof(char*)
           pi = (int*)pc;
           pc = (char*)pi; // ஦: pc  
                           //   設 char*   ⠪
                           // ।⠢,  int*

    設  ᢠ 祬  ஧,   
  १   祢.  襬 砥  ணࠬ
  㤥 ७ᨬ. 筮  ᮡ ᪠  ।,
   㪠⥫  ࠧ    ।⠢.
  , ந 㪠⥫  ᢮ (  ८ࠧ
  ⨯) 㪠⥫ ⨯ void*,  void*    ८ࠧ
  ⭮  㪠⥫ ந쭮 ⨯.
      몥 ++  ८ࠧ ⨯ 뢠 譨  
  ,    ( 㣨 몠)  ॡ.  
  ணࠬ      ८ࠧ ⨯,  
   㣨      ᪮쪨 ணࠬ.

  3.2.6   

   ꥪ   ᪨,  ⮬᪨
  (.$$2.1.3). ᪨ ꥪ ࠧ頥     ᪠
  ணࠬ   ⠬   襭. ⮬᪨ ꥪ
  ࠧ頥   直 ࠧ,  ࠢ   ,
  ᮤঠ騩 । ꥪ,   ⮫쪮   , 
  ࠢ ⠥  ⮬ .   ,  뢠 㤮
  ᮧ  ꥪ,     ,  
   ⠭ 㦭.  ⭮, 뢠 㤮 ᮧ ꥪ, 
   ᯮ짮 ᫥   㭪樨,    ᮧ.
   ꥪ ᮧ  new,   delete ᯮ
    㭨⮦  쭥襬.  ꥪ, ᮧ 樥 new,
  ,   ࠧ  ᢮ . ਬࠬ ⠪
  ꥪ⮢  㧫 ॢ쥢   ᯨ᪠,  室
    , ࠧ   ⠯ ࠭樨 ⥭.
   ᬮਬ  ⢥ ਬ ᮪ ࠭, 
  ந 筮 ணࠬ . 㭪樨 ᨭ⠪᪮
   ᮧ  ।⠢ ࠦ ॢ, ஥ 㤥
   쭥襬 ᯮ짮  樨 . ਬ:

         struct enode {
            token_value oper;
            enode* left;
            enode* right;
         };

        enode* expr()
        {
          enode* left = term();

          for(;;)
             switch(curr_tok) {
               case PLUS:
               case MINUS:
                    get_token();
                    enode* n = new enode;
                    n->oper = curr_tok;
                    n->left = left;
                    n->right = term();
                    left = n;
                    break;
              default:
                   return left;
             }
          }

      ᯮ짮 ॢ ࠦ, ਬ ⠪:

         void generate(enode* n)
         {
           switch (n->oper) {
           case PLUS:
                // ᮮ⢥ 
                delete n;
           }
         }

     ꥪ, ᮧ   樨 new, ,   ,
     㤥  㭨⮦ 樥 delete. ᫥ ⮣
  ,   ,   ᯮ짮 new. 筮 
   "ᡮ騪 ", 饣 ꥪ,   
   뫠,  ।⠢饣    樨 new 
  ୮ ᯮ짮. ࠭  delete  
  ⮫쪮 㪠⥫,  頥  new,  .
  ਬ delete    ਢ    ⢨.
      new  ⠪ ᮧ ᨢ ꥪ⮢, ਬ:

          char* save_string(const char* p)
          {
            char* s = new char[strlen(p)+1];
            strcpy(s,p);
            return s;
          }

  ⬥⨬,   । , ⢥ 樥 new,
   delete  㬥 । ࠧ ࠧ饭 ꥪ.
  ਬ:

          int main(int argc, char* argv[])
          {
            if (argc < 2) exit(1);
            char* p = save_string(arg[1]);
            delete[] p;
          }

  ⮡  ⮣, 室  ꥪ, ࠧ頥 ⠭⭮
  樥 new, ⢮   , 祬  ᪨
  (筮,    ᫮). ⮩  delete 㭨⮦
  ⤥ ꥪ,   delete[] ᯮ  㭨⮦
  ᨢ.
     樨  ᢮  ॠ 㭪ﬨ ($$R.5.3.3-4):

          void* operator new(size_t);
          void operator delete(void*);

   size_t -  楫᫥ ⨯, ।  <stddef.h>.
      ⠭⭠ ॠ 㭪樨 operator new()  樠
  ।⠢塞 .
      ,   new  ᬮ   ᢮
    ࠧ饭? ᪮  㠫쭠  ᪮筠,
  ⠪ ६  ६ ந室. ,  :

         char* p = new char [100000000];

  筮  室 ଠ쭮.   new   믮
  ,  뢠 㭪,  뫠   ࠬ
   饭  㭪樨 set_new_handler()  <new.h>. ਬ,
   ᫥饩 ணࠬ:

        #include <iostream.h>
        #include <new.h>
        #include <stdlib.h>

        void out_of_store()
        {
           cerr << "operator new failed: out of store\n";
           exit(1);
        }

        int main()
        {
          set_new_handler(&out_of_store);
          char* p = new char[100000000];
          cout << "done, p = " << long(p) << '\n';
        }

  ᪮॥ ᥣ, 㤥 ⠭  "done",   ᮮ饭:

        operator new failed: out of store
        //  new  諠:  

      㭪樨 new_handler  ᤥ   ᫮,
  祬   ணࠬ. ᫨ ⥭  権 new 
  delete (ਬ, ⮬,  짮⥫ । ᢮ 㭪樨
  operator new  operator delete),  ࠡ稪 new_handler 
    ᢮   new. 㣨 ᫮,
  짮⥫   ᢮ "ᡮ騪 ", ⥬ ᠬ ᤥ
  맮 樨 delete 易⥫.  ⠪ ,
  ᫮,   ᨫ .
      ࠤ樨  new  頥 㪠⥫ 0, ᫨ 
  㤠  筮 ᢮ .    
  new_handler  뫠 ⠭. ਬ, ᫥ ணࠬ:

       #include <stream.h>

       main()
       {
         char* p = new char[100000000];
         cout << "done, p = " << long(p) << '\n';
       }

   뤠

       done, p = 0

     뤥,   ᤥ ।०! ⬥⨬, , 
   ॠ  ⠪   㭪樨 new_handler, 짮⥫ 
    ᥡ ஢: ௠  ᢮ .   믮
     饭  ணࠬ  new (᫨ ⮫쪮 짮⥫
    । ᮡ⢥ 㭪樨  ࠧ饭 ꥪ⮢
   짮⥫᪨ ⨯; .$$R.5.5.6).

   3.3  ஢

     ᫥⥫쭮 ᠭ ஢ ++ ᮤন 
   $$R.6. 㥬   ⨬ ࠧ.   
   ᢮ ஢  ᪮쪮 ਬ஢.

  ------------------------------------------------------------------
                     ⠪ ஢
  ------------------------------------------------------------------

    :
        ᠭ
        { ᯨ᮪-஢ opt }
        ࠦ opt ;

        if ( ࠦ )  
        if ( ࠦ )   else 
        switch ( ࠦ ) 

        while ( ࠦ ) 
        do    while ( ࠦ )
        for (砫--for ࠦ opt; ࠦ opt) 

        case  ࠦ-⠭ : 
        default : 
        break ;
        continue ;

        return  ࠦ opt ;

        goto  䨪 ;
        䨪 : 

        ᯨ᮪-஢:
           
           ᯨ᮪-஢  

        砫--for:
           ᠭ
           ࠦ opt ;
  ----------------------------------------------------------------------

   ,  ᠭ  ஬,   ஢
  ᢠ  맮 㭪樨 ( ⭮  ࠦ).

   3.3.1  롨騥 

   祭  ஢   ஢ if  switch:

            if ( ࠦ )  

            if ( ࠦ )    else  

            switch  ( ࠦ )  

    몥 ++ । ᭮ ⨯  ⤥쭮 㫥᪮ (⨯
    祭ﬨ ⨭, ).  樨 ⭮襭:

            ==   !=   <   >   <=   >=

     १ 楫 1, ᫨ ⭮襭 믮,  0  ⨢
   砥. 筮 । ⠭ TRUE  1  FALSE  0.
          if, ᫨ ࠦ  㫥 祭,
   믮  ,   믮 ன (᫨
    㪠).  ࠧ,  ⢥ ᫮ ᪠  ࠦ
   ⨯ 楫  㪠⥫.  a 楫, ⮣

             if (a)  // ...

   ⭮

             if (a != 0) ...

        ᪨ 樨

             &&    ||   !

   筮 ᯮ  ᫮.   &&  || ன ࠭
    , ᫨ १ । 祭 ࢮ
   ࠭. ਬ,  ࠦ

             if (p && l<p->count)  // ...

   ᭠砫 ஢ 祭 p,  ⮫쪮 ᫨   ࠢ , 
   ஢ ⭮襭 l<p->count.
           if 㤮  ࠦﬨ
   ᫮. ਬ,  

             if (a <= b)
                max = b;
             else
                max = a;

    ᯮ짮 ࠦ

             max = (a<=b) ? b : a;

   ᫮  ࠦ ᫮  易⥫쭮 㦠 ᪮, 
   ᫨  ᯮ짮,  ࠦ ⠭ ⭥.
        ⮩ ४⥫ (switch)    
   ਨ ஢ if. ਬ,

              switch (val) {
              case 1:
                  f();
                  break;
              case 2:
                  g();
                  break;
              default:
                  h();
                  break;
              }

    ⭮  ⠪:

              if (val == 1)
                 f();
              else if (val == 2)
                 g();
              else
                 h();

    権 ᮢ,    ࢠ ।⥫쭥,
  ᪮   來   樨: ஢ઠ 
  ᮢ 祭 val  祭  ⢠ ⠭. ⮬ 
  ਢ  , ᯮ ४⥫, ⭥.
       㦭   - 襭 , 㪠
   ਠ ४⥫, ᫨ ⮫쪮   , ⮡ ⠫
  믮   ᫥饣 ਠ. ਬ,
  ४⥫

             switch (val) {       //  訡
             case 1:
                 cout << "case 1\n";
             case 2:
                 cout << "case 2\n";
             default:
                 cout << "default: case not found\n";
             }

   val==1 ⠥  讬 㤨 饭:

             case 1
             case 2
             default: case not found

     ⬥    । 砨,  ⠭
   室  ᫥騩 ਠ ⠢ ७.   室
     ⠫   ᬥ  訡. 
   襭   ਠ  ᥣ ᯮ break, 
    ᯮ return   goto. ਢ ਬ:

             switch (val)  {       //  訡
             case 0:
                 cout << "case 0\n";
             case1:
             case 1:
                 cout << "case 1\n";
                 return;
             case 2:
                 cout << "case 2\n";
                 goto case1;
             default:
                 cout << "default: case not found\n";
                 return;
             }

    祭 val ࠢ 2  稬:

             case 2
             case 1

  ⬥⨬,   ਠ  ᯮ짮   goto:

             goto case 2;  // ᨭ⠪᪠ 訡

   3.3.2   goto

        १ࠥ  goto -⠪   ++:

             goto 䨪;

             䨪: 

    ,   ᯮ  몠 ᮪ ஢, 
     祭 , ᫨ ⥪  ++ ᮧ  祫,
    ⮬᪨, ..   ணࠬ. ਬ,
    goto ᯮ  ᮧ   
   ࠬ⨪ 몠   ணࠬ ।.
   ஬ ⮣,  goto  ਣ   ,
       室 ᪮ ࠡ ணࠬ.  
    -   ॠ쭮 ६ ந室 - ᫥ 
   ७ 横 ணࠬ.
          樨    ணࠬ,  ਬ
   goto ࠢ.    - 室   横 
   ४⥫.   ⮬,   break   横
    ४⥫  ३ ⮫쪮   ஢ .
   ਢ ਬ:

             void f()
             {
               int i;
               int j;

               for ( i = 0; i < n; i++)
                   for (j = 0; j<m; j++)
                       if (nm[i][j] == a) goto found;
                   //  a  
                   // ...
               found:
                   //  nm[i][j] == a
             }

        continue,   ३  
   横.   , ᭥  $$3.1.5.

   3.4 ਨ  ᯮ ⥪

   ணࠬ ࠧ  ,   ⠭  ⭥, ᫨
   ࠧ㬭 ᯮ짮 ਨ  ⥬᪨ 뤥 ⥪
   ணࠬ ஡.  ᪮쪮 ᯮᮡ ᯮ ⥪
   ணࠬ,   稭 ,     - 訩. 
     ᢮ .    ᪠   .
           ணࠬ ⠪ ﬨ,  
      㤥 ⮫쪮 㤭. ࠭   ᨫ 
   ਩, ⮬    㡥  ⮬,  ਩:
     [1] ᫥,
     [2] ⢨⥫쭮 뢠 ணࠬ,
     [3]  ५.
     ணࠬ  ⨦, ᫥  
    ਨ.   室  , 祬 
   ⠪ ਨ.
      ᫨  䠪  אַ ࠧ  몥,  ⠪  ᫥
   ,    ,  筮 㯮   ਨ.
   ᫥ 砭 ⭮  ,  ਢ
   :

           // ६ "v" 室 樠஢.

           // ६ "v"  ᯮ짮 ⮫쪮  㭪樨 "f()".

           //  맮  㭪樨  ⮣ 䠩
           // 室 맢 㭪 "init()".

           //   ᢮ ணࠬ 맮 㭪 "cleanup()".

           //  ᯮ 㭪 "weird()".

           // 㭪 "f()"   ࠬ.

    ࠢ쭮 ணࠬ஢  ++ ⠪ ਨ 筮
   뢠 譨. ⮡   ਨ ⠫ 㦭묨,
    ᯮ짮 ࠢ 뢠 ($$4.2)  ⥩
   ,  ⠪ ࠢ 樠樨  㭨⮦ ꥪ⮢
    ($$5.5).
       ᫨ ஥ ⢥ত ࠦ ᠬ ணࠬ,  㦭
      ਨ. ਬ:

           a = b + c;      // a  ਭ 祭 b+c
           count++;        // 㢥稬 稪 count

    ਨ 㦥, 祬 .  ࠧ㢠 ꥬ ⥪,
   㬠 ணࠬ     묨.    ६
   ਨ  ⠪ த ᯮ  ਬ஢  祡
    몠 ணࠬ஢,  ⮩ .   
    稭,  ன 祡 ணࠬ ⫨砥  饩.
        ४ ⠪ ⨫  ਥ 
   ணࠬ:

       [1] 稭    䠩 ணࠬ: 㪠 
            ,    ।,  뫪 
           ࠢ 㪮⢠, 騥   ᮯ஢
           ணࠬ  ..;
       [2] ᭠ ਥ  ।   蠡
           ⨯;
       [3] ஢  ਢ 㭪, 㪠: 
           祭, ᯮ㥬  (᫨ ⮫쪮  祢)
           , , ।  㦥,  ஬ ࠡ⠥
           㭪;
       [4] ஢ ।  쭮 ६;
       [5]  ஥ ᫮ ਥ   , 
            祢  ७ᨬ;
       [6]  ࠪ᪨ 祣.

   ਢ ਬ:

         //  tbl.c:  ⠡ .

         /*
                 ᯮ짮 ⮤ 
             . ⮭ "砫   ..." . 411.
         */

          //  swap() ।,  ⥪ AT&T 稭  3B20.

          /************************************

             ᪨ ࠢ (c) 1991 AT&T, Inc
              ࠢ ࠭

          **************************************/

   ࠢ쭮 ࠭   ⠢ ਨ  
   ணࠬ  ஫.  訥 ਨ  
   㤭, 祬 ᠬ ணࠬ,   - ⢮,  ஬ ⮨
   ᮢ襭⢮.
        ⨬,  ᫨  㭪樨 ᯮ ⮫쪮 ਨ
    //,      ᤥ ਥ  
   /* */,  .

   3.5 ࠦ

   1. (*1) 騩 横 for ९    while:

             for (i=0; i<max_length; i++)
                 if (input_line[i] == '?') quest_count++;

       横, ᯮ  ⢥  ࠢ饩 ६
   㪠⥫ ⠪, ⮡ ᫮   *p=='?'.
   2. (*1)  冷 ᫥ ᫥ ࠦ,  
      ᪮ :

              a = b + c * d << 2 & 8
              a & 077 != 3
              a == b || a == c && c < 5
              c = x != 0
              0 <= i < 7
              f(1,2) + 3
              a = - 1 + + b -- - 5
              a = b == c ++
              a = b = c = 0
              a[4][2] *= * b ? c : * d * 2
              a-b, c=d

   3. (*2)  5 ࠧ 権  ++, 祭 
      ।.
   4. (*2) ਢ 10 ࠧ ਬ஢ ७ᨬ 権
       ++.
   5. (*1)  ந      襩 ணࠬ  ++?
       㤥  砥 ९   稬?
   6. (*1)  冷 ᫥ ᫥ ࠦ,  
       ᪮ :

              *p++
              *--p
              ++a--
              (int*)p->m
              *p.m
              *a[i]

   7. (*2)  ⠪ 㭪樨: strlen() -   ப,
      strcpy() - ஢ ப  strcmp() - ࠢ ப. 
        ⨯ ࠬ஢  १⮢ 㭪権? ࠢ 
       ⠭묨 ﬨ, 騬  <string.h>   襬
      㪮⢥.
   8. (*1) ᭨,   ࠭ ॠ  ⠪ 訡:

              void f(int a, int b)
              {
                if (a = 3)  // ...
                if (a&077 == 0)  // ...
                a := b+1;
              }

       ᬮ,  㤥 ॠ    訡.
   9. (*2)  㭪 cat(),  砥  ࠬ-ப
       頥 ப,   ⥭樥. 
      १饩 ப ᯮ , ⢥  
      new.  㭪 rev()  ॢ뢠 ப, ।
        ⢥ ࠬ.  砥,  ᫥ 맮 rev(p)
      ᫥ ᨬ p ⠭   ..
  10. (*2)   ᫥ 㭪?

            void send(register* to, register* from, register count)
            // ᥢன⢮.  ਨ ᮧ⥫쭮 㤠
            {
               register n=(count+7)/8;
               switch (count%8) {
                  case 0:  do {  *to++ = *from++;
                  case 7:        *to++ = *from++;
                  case 6:        *to++ = *from++;
                  case 5:        *to++ = *from++;
                  case 4:        *to++ = *from++;
                  case 3:        *to++ = *from++;
                  case 2:        *to++ = *from++;
                  case 1:        *to++ = *from++;
                               } while (--n>0);
              }
            }

           ⮩ 㭪樨?
   11. (*2)  㭪 atoi(),   ࠬ - ப 
        頥 ᮮ⢥饥  楫. ਬ, atoi("123")
       ࠢ 123.  㭪 atoi() ⠪, ⮡  
       ॢ  ᫮ ᫥⥫쭮   ⮫쪮  筮,
          쬥筮  ⭠筮 , ਭ⮩  ++.
         ॢ ᨬ ⠭ ++. 
       㭪 itoa()  ॢ 楫 祭  ப
       ।⠢.
   12. (*2) ९ 㭪 get_token() ($$3.12) ⠪, ⮡  ⠫
       楫 ப  ,  ⥬ 뤠 ᥬ,  
       ᨬ  .
   13. (*2)   ணࠬ   $$3.1 ⠪ 㭪樨, 
       sqrt(), log()  sin(). ᪠:  ।।
         뢠 㭪樨   ᨢ 㪠⥫  .
        뢠 ஢ ࠬ, । ⨬
       㭪.
   14. (*3)     । 짮⥫᪨
       㭪樨. ᪠: । 㭪  ᫥⥫쭮
       ஢,    ᠬ 짮⥫. 
       ᫥⥫쭮  ࠭   ப ᨬ, 
        ᯨ᮪ ᥬ.  뢠 㭪,  롨 
       믮 樨. ᫨ 짮⥫᪨ 㭪樨 
        ࠬ,  ਤ ਤ㬠     .
   15. (*1.5) । ணࠬ , ᯮ 
       symbol  ᪨ ६ name_string  number_value:

              struct symbol {
                  token_value tok;
                  union {
                    double number_value;
                    char*  name_string;
                  };
              };

   16.(*2.5)  ணࠬ,  㤠  ਨ 
      ணࠬ  ++.  ,   ᨬ  cin 
      㤠 ਨ  : //  /* */. 稢訩 ⥪
        cout.    ᨢ  稢襣
      ⥪ ( 㦥 㣠,  ᫮ ). ४⭮
      ணࠬ . 㦭 뢠   ᨬ
      //, /*  */   , ப  ᨬ ⠭.
   17. (*2) ᫥ ࠧ ணࠬ  ᭨,  ᯮᮡ
      뤥 ⥪ ஡   ਨ ᯮ.

