The syntax of first-order logic


        Sentence        -> AtomicSentence
                        | Sentence Connective Sentence
                        | Quantifier Variable,... Sentence
                        | NOT Sentence
                        | (Sentence)

        AtomicSentence  -> Predicate(Term, ...) | Term = Term

        Term            -> Constant 
                        | Variable
                        | Function(Term,...)

        Connective      -> AND | OR | => | <=>

        Quantifier      -> FORALL | EXISTS

        Constant        -> A | X_1 | John | ...

        Variable        -> a | x | s ...

        Predicate       -> Before | HasColor | Raining | ...

        Function        -> Smelly | LeftLegOf | Plus | ...