$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>;
= ;
}
*