나는 대안 해피 등에 전통적인 파서 발전기 솔루션과 같은 재귀 하강 파서 자바의 하위 집합을 구문 분석 하스켈의 파섹 분석 라이브러리를 사용하여 고려했습니다. Parsec은 사용하기가 매우 쉽습니다. 구문 분석 속도는 확실히 저를위한 요소가 아닙니다. 나는 Parsec으로 "백업"을 구현하는 것이 가능한지 궁금합니다. Parsec은 각각의 제품을 차례대로 시도하여 올바른 제작을 찾는 기술입니다.Haskell의 Parsec 라이브러리를 사용하여 백업과 함께 재귀 적 파생 파서를 구현할 수 있습니까?
Literal:
IntegerLiteral
FloatingPointLiteral
은 내가 성공할 수있는 구문 분석을 얻기 위해이 두 가지 규칙을 주문하는 방법을 알아 내야 할 필요가 없게하는 방법을 싶습니다 간단한 예를 들어, JLS 자바 문법의 매우 시작을 고려한다. 약자로,이 같은 순진 구현 : "."
literal = do {
x <- try (do { v <- integer; return (IntLiteral v)}) <|>
(do { v <- float; return (FPLiteral v)});
return(Literal x)
}
가 작동하지 않습니다 ... 같은 입력 "15.2"정수 파서 먼저 성공하고 모든 일이 질식 것입니다 원인이됩니다 상징. 이 경우 두 프로덕션을 다시 정렬하여 문제를 해결할 수 있습니다. 일반적인 경우에, 이와 같은 것을 발견하는 것은 악몽이 될 것이고, 나는 몇몇 경우를 그리워 할 가능성이 매우 높습니다. 이상적으로, Parsec이 나 같은 것을 찾아 낼 수있는 방법을 원합니다. 이것이 가능한가, 아니면 도서관에서 단순히 너무 많은 것을하려고 하는가? 파섹 문서는 "무한보기 미리 문법을 상황에 맞는 구문 분석"할 수 있다고 주장, 내가 여기서 뭔가를 할 수 있어야처럼 뭔가처럼 보인다.
참고. 때로는 발견하기 힘든 몇 가지 기하 급수적 인 행동을 보이며 실패하지는 않습니다. '파섹 (Parsec) '은 더 크고 까다 롭지 만, 이제 나는 더 나은 소프트웨어를 발견했다. – luqui