I have created a BNF for a certain language and want to check if a certain input is valid for that BNF. For instance, if I have a BNF like
  <palindrome> ::= a <palindrome> a | b <palindrome> b |
               c <palindrome> c | d <palindrome> d | 
               e <palindrome> e | ...
                                | z <palindrome> z
  <palindrome> ::= <letter>
  <letter>     ::= a | b | c | ... | y | z
the string 'bcdcb' and 'hannah' will return true. the string 'joe' will return false.
Can someone describe an algorithm that can do this.
 
    