左再帰がなく、右の優先順位を示す文法を書き直すための正式なアルゴリズムまたは手順はありますか。ウィキペディアで説明されている左再帰を排除するための単純なアルゴリズムなど
たとえば、次のアルゴリズムがあるとします。
1 <goal> ::= <expr>$
2 <expr> ::= <expr><op><expr>
3 | num
4 | id
5 <op> ::= +
6 |-
7 |*
8 |/
望ましい出力は次のようになります。
1. <expr> ::= <term><expr'>
2. <expr'> ::= +<term><expr'>
3. | epsilon
4. | -<term><expr'>
5. <term> ::= <factor><term'>
6. <term'> ::= *<factor><term'>
7. | epsilon
8. | /<factor><term'>