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