컴파일러 생성에서 할당을 수행하고 왼쪽 재귀에 문제가 있습니다. JavaCC는 아래에 나와있는 expression()과 condition()에 대해 "Left recursion detected"오류를 표시합니다. 두 번째 줄은 모두 동일하므로 문제가 있다고 가정합니다.이 왼쪽 재귀를 제거하는 방법
→ Aα | β
→ βA '
A'→ ε | αA '
이 왼쪽 재귀를 제거하는 방법을 보여주기 위해 사용되는 식이었다. 나는 강의와 온라인 비디오 및 설명에서이 개념을 이해해 왔지만 여기에 적용하는 방법을 알아낼 수는 없습니다. 누군가가 왼쪽 재귀를 제거하는 방법을 보여줄 수 있습니까?
void expression() :
{ }
{
fragment() binary_arith_op() fragment()
| <OPAREN> expression() <CPAREN>
| <ID> <OPAREN> arg_list() <CPAREN>
| fragment()
}
void fragment() :
{ }
{ (<MINUS_SIGN>)? <ID> | <NUM> | <TRUE> | <FALSE> | expression() }
void condition() :
{ }
{ <TILDE> condition()
| <OPAREN> condition() <CPAREN>
| expression() comp_op() expression()
| condition() (<OR> | <AND>) condition()
}