with Ada_Program;
package Boolean_Expressions is

    type Operator is (And_Operator,  
                      Or_Operator,  
                      Xor_Operator,  
                      And_Then_Operator, Or_Else_Operator,  
                      Not_Operator,  
                      Equal, Not_Equal,  
                      Less_Than, Less_Than_Or_Equal,  
                      Greater_Than, Greater_Than_Or_Equal);

    function Image (O : Operator) return String;

    type Expression_Kind is (Expression, Relation, Not_Expression, Identifier,
                             Literal, Other_Atom, Not_An_Expression);

    function Kind (An_Expression : Ada_Program.Element) return Expression_Kind;


    function Expression_Operator
                (An_Expression : Ada_Program.Element) return Operator;

    function Left_Argument (An_Expression : Ada_Program.Element)
                           return Ada_Program.Element;
    function Right_Argument (An_Expression : Ada_Program.Element)
                            return Ada_Program.Element;

    function Argument (A_Not_Expression : Ada_Program.Element)
                      return Ada_Program.Element;

end Boolean_Expressions;