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, c
c, None, R, e
e, None, P1R, f
f, None, R, b
It 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?