내가 람다 미적분 파서를 작성하는 것을 시도하고있다, 나는 정의 된 문법 LLR에없는 것 같다 람다 계산법 문법은 LLR
E ::= x | \x.E | EE | (E)
내가 왼쪽 재귀 감소 :
E ::= xE' | \x.EE' | (E)E'
E'::= EE' | <empty>
를 잘 작성하지 것을, 아무도 도와 드릴 수 있습니까?
내가 람다 미적분 파서를 작성하는 것을 시도하고있다, 나는 정의 된 문법 LLR에없는 것 같다 람다 계산법 문법은 LLR
E ::= x | \x.E | EE | (E)
내가 왼쪽 재귀 감소 :
E ::= xE' | \x.EE' | (E)E'
E'::= EE' | <empty>
를 잘 작성하지 것을, 아무도 도와 드릴 수 있습니까?
"LLR"이란 무엇입니까? "LL", "LR", "LALR"을 의미합니까?
언어가 모호하기 때문에 언어에 포함되지 않습니다. 람다 미적분학에서이 모호성은 일반적으로 람다 식 \x.E
이 가능한 한 많이 오른쪽으로 확장된다고 가정하여 해결됩니다. 예를 들어 \x.xx
은 \x.(xx)
으로, (\x.x)x
으로는 해석하지 않습니다.
왼쪽 재귀를 제거하면 LL 문법을 찾는 것처럼 보입니다. 그러나, 귀하의 문법은 여전히 애매합니다 (원래의 문법은 위 참조). 이 문제를 먼저 해결해야합니다. 더 이상 힌트 없습니다 ...
파섹에서 람다 식 파서의 구현 : 왼쪽 재귀가 또한 여기
을 제거 파서의보다 간결 실용적 버전입니다 방법
주의 사항 : ** lambdaExprParser : **'추상화 <$> (문자 '\\'*> 편지 <* 문자 '.') <*> lambdaExprParser <|> foldl1 응용 프로그램 <$> many1의 term' ** 용어 : **'변수 <$> 문자 <|> char '('* 'lambdaExprParser <* char') '' –