| 
|   | 
       PN Operator |       | Operation |  |  
|   | 
       Cpq |       | Conditional |  |  
|   | 
       Np |       | NOT |  |  
|   | 
       Kpq |       | AND |  |  
|   | 
       Apq |       | (Inclusive) OR |  |  
|   | 
       Dpq |       | NAND |  |  
|   | 
       Epq |       | Equivalence |  |  
|   | 
       Jpq |       | Exclusive OR |  |  
 
        | 
|   |   Truth Tables |  |  
|   | 
       p |       | q |  | Cpq |  | Dpq |  | Epq |  |  
|   | 
       F |       | F |  | T |  | T |  | T |  |  
|   | 
       F |       | T |  | T |  | T |  | F |  |  
|   | 
       T |       | F |  | F |  | T |  | F |  |  
|   | 
       T |       | T |  | T |  | F |  | T |  |  
 
 
 |   
 |   
For every combination of PN operators and variables, an expression is
a "well-formed formula" (WFF) if and only if it is a
variable or it is a PN operator followed by the requisite number of
operands. A combination of symbols will fail to be
a "well-formed formula" if it is composed of a WFF
followed by extraneous text, it uses an unrecognized character
[upper-case character not in the above table or a non-alphabetic
character], or it has insufficient operands for its operators.  
Every WFF can be categorized as a tautology (true for
all possible variable values), a contradiction (false for all
possible variable values), or a contingent expression (true for some
variable values, false for other variable values).
The simplest contingent expression is simply "p",
true when p is true, false when p is false. One very simple
contradiction is "KpNp", p and not-p cannot both be true.
Similarly, one very simple tautology is "ApNp",
either p is true or not-p is true. For a more complex 
tautology, one expression of De Morgan's Law is "EDpqANpNq".
Your program is to read character strings and
determine if each string is a WFF.  If the string is a WFF, categorize it;
if not, describe the error.
Each input line will begin in the first column and contain a single
character string to be evaluated.  The character string will contain
only alphanumeric characters (no blanks or punctuation) that is to be
evaluated as a potential WFF.  Each character string will contain
between 1 and 255 characters and will use at most ten variables.
For each character string, print a line containing the string starting
in the first column, followed by a single space, the text "is valid:"
or "is invalid:" depending on its status as a WFF, another single 
space, and a status message describing the string.  
If the string is 
a valid WFF, print the expression category in lower case ("tautology", 
"contradiction", or "contingent").   For
invalid strings, report the first error discovered in a
left-to-right scan of the string.  Immediately
report an error on an invalid character as "invalid character".  
If a valid WFF is followed
by extraneous text, report "extraneous text" as the error, 
even if the extraneous text has an invalid character.  If a string
is missing an operand, report "insufficient operands" as 
the error.  
No trailing whitespace is to appear on an output line.
 
  
 
 q  
 Cp  
 Cpq  
 A01  
 Cpqr  
 KNpp  
 CKNppq  
 CDpwANpNq  
  
| 
Output for the Sample Input |   
 
 q is valid: contingent  
 Cp is invalid: insufficient operands  
 Cpq is valid: contingent  
 A01 is invalid: invalid character  
 Cpqr is invalid: extraneous text  
 KNpp is valid: contradiction  
 CKNppq is valid: tautology  
 CDpwANpNq is valid: contingent  
 
 Footnotes:
1Hence postfix expressions are referred
to as being in Reverse Polish Notation-RPN.
 
  File translated from
TEX
by 
TTH,
version 3.77. On 18 Nov 2008, 22:26.
 |