$ENTRY Go { = <LOGIC > ; }
$EXTRN  RP,CP;
$EXTRN  CARD,PROUT,PRINT;
* -----------------------------------------------
*    Программа интерпретирующая формулы
*    логики высказываний
*    "1" - истина, "0" - ложь
* -----------------------------------------------
$ENTRY   LOGIC {  = <Begin  <Wwod >>; }

Wwod  { = <Spar <Zam  <CARD >>>;  }

Begin  {  'END' = ;
           e.1  = <Rab e.1> <LOGIC>;  }

Rab  {
          e.1 '=' e.2 = <RP  e.1 '=' e.2>;
          e.1         = <PROUT  ' =  ' <Wich e.1>>;
     }
Wich  {
         e.1  Imp  e.2 = <Imp <Wich e.1> <Wich e.2>>;
         e.1  Or   e.2 = <Or  <Wich e.1> <Wich e.2>>;
         e.1  And  e.2 = <And <Wich e.1> <Wich e.2>>;
         Not e.1       = <Not <Wich e.1>>;
         (e.1)         = <Wich e.1>;
                 '1' = '1';
                 '0' = '0';
                     = '1';
                 e.1 = <Wich <CP e.1>>;
     }

Imp  { '10' = '0';
        e.1 = '1';  }

Or  {  '00' = '0';
        e.1 = '1';  }

And  { '11' = '1';
        e.1 = '0';  }

Not  {  '0' = '1';
        '1' = '0';  }


Spar  {  e.1 = <Spar1 ('*') e.1>; }

Spar1  {
        (e.1)      '('  e.3 = <Spar1 ( (e.1) )   e.3>;
        ((e.1) e.2) ')' e.3 = <Spar1 (e.1 (e.2)) e.3>;
        ('*'   e.1) ')' e.3 = 'error'  e.1 ')' e.3 ;
        (e.1)       s.A e.3 = <Spar1 (e.1 s.A)   e.3>;
        ( '*' e.1 )         = e.1;
        ( (e.1) e.2 )       = 'error' e.1  '(' e.2 ;
       }

Zam   {  ' '     e.1 =     <Zam e.1>;
         '.And.' e.1 = And <Zam e.1>;
         '.Or.'  e.1 = Or  <Zam e.1>;
         '.Imp.' e.1 = Imp <Zam e.1>;
         '.Not.' e.1 = Not <Zam e.1>;
         s.a     e.1 = s.a <Zam e.1>;
                     = ;
       }
*