현재 Text.Parsec.Expr 모듈을 사용하여 스크립팅 언어의 하위 집합을 구문 분석합니다.파섹 오류 - try가 작동하지 않는 것 같습니다.
는 기본적으로,이 언어의 명령 두 가지 종류가 있습니다 : 양식 $var = expr
의 할당 및 형태 $var = $array[$index]
의 명령 -이 물론 다른 명령의,하지만 이건 내 문제를 설명하기 위해 충분하다.
대응 형 파서와 함께 이것을 나타 내기 위해 Command
유형을 만들었습니다. 여기서 할당에 대한 expr
은 Parsec의 buildExpressionParser
에 의해 처리됩니다.
이제 문제가 발생했습니다. 먼저 구문 분석 코드 :
main = case parse p "" "$c = $a[$b]" of
Left err -> putStrLn . show $ err
Right r -> putStrLn . show $ r
where p = (try assignment <|> command) <* eof -- (1)
전체 코드 (50 개 라인) 여기에 붙여 : Link이
문제는 (당신이 파섹 설치 한 경우 컴파일해야한다), 그 구문 분석 실패 이후 assignment
아무튼 ' 이전에 try
이 있더라도 구문 분석이 성공적으로 완료되었습니다. 구문 분석 순서 (try command <|> assignment
)를 반대로하면 문제가 해결되지만 내 경우에는 가능하지 않습니다. 물론
나는 더 문제를 찾기 위해 노력하고 내가 expr = fail ""
말을하면 해석이 완료 이후 문제가 표현 파서 (buildExpressionParser
에 의해 구축)이라고 그것은 나에게 나타납니다. 그러나 나는이 동작을 설명 할 파섹 소스에서 아무것도 찾을 수 없습니다. 사실 assigment
이가 (일반 where p = assignment
와 그것을 시도) $c = $a
을 소모 여기에 성공 않기 때문에
감사합니다, 그것 뿐이다. – bzn