In the process of writing a Turing machine simulator, I decided on a machine representation in ASCII that closely mirrors Turing's original machine tables. I am interested in the formal categorization of the grammar and the simplest type of parser required to implement it, and in a more formal description of same. The grammar is as follows:<instruction> ::= <ident> , <symbol> , <operation> , <ident> <EOL>      <ident> ::= <char>      <symbol ::= <char> | 'None'  <operation> ::= <movement> | <write> <movement>      <write> ::= 'P' <char> | 'E'    <movement ::= 'R' | 'L'An example Turing machine table written in this grammar is as follows:b, None, P0R, cc, None, R,   ee, None, P1R, ff, None, R,   bIt is clear to me that since this grammar is expressible in BNF, it must then be at most context-free, but is there a more accurate (more strict) categorization? The lack of left-recursion implies that it could be parsed with a recursive descent parser, but is there a simpler parser that would be capable of this grammar? How would one describe this grammar and its (simplest) associated parser?
Describing a grammar and associated parser
fl.formal languages;grammars;parsing;compilers;context free languages
if you don't count rembering the symbols of previous lines it's a regular language here's the regex as I see it (<char> is translated to [a-z])[a-z]\s*,\s*([a-z]|None)\s*,\s*(R|L|P[a-z](R|L))\s*,\s*[a-z]\nuse capturing groups as necessary ;)