나는이 간단한 파서를 명령 행에서 작성했다. [ps auxww | ./myparser]를 실행하고 ps 명령의 출력을 구문 분석하여 내가 만든 프로세스 데이터 구조에 삽입합니다. 결과 문자열의 한 줄을 파싱하는 데 성공했지만 이제는 전체 문자열을 구문 분석하고 단일 프로세스가 아닌 [프로세스]를 반환하려고했습니다. 문제는 parsePS를 구현하는 방법입니다. 모든 단일 행을 구문 분석하고 Process 목록을 반환하고이를 터미널에 인쇄하려면 myParser를 여러 번 호출해야합니다. 누군가 나를 도울 수 있습니까?하스켈 명령 시스템 파서
0
A
답변
1
나는 당신에게 무엇이 실패했는지 모르겠다. 그러나 나는 그 간격이 당신을 죽이고 있다고 생각하고있다. 그렇다면 두 가지 아이디어가 도움이 될 것입니다.
끝에 공백을 사용하려면 myParser
을 수정하고 연결자 many
을 사용해야합니다.
myParser = do
...
spaces
command <- pCommand
spaces -- CONSUME END OF LINE
return Entry{ ... }
many myParser
이 작동해야합니다.
또는 입력을 개별적으로 줄로 분리하고 각각을 개별적으로 구문 분석 할 수 있습니다. 당신은 순서대로 각 줄을 구문 분석과를 반환하는 방법을 찾고있는 것처럼
argLines <- fmap lines getContents
는
0
그것은 나에게 소리 (내가? 당신이 hGetContents
전에 getLine
를 통해 첫 선을 구울 의미를 가지고) 파싱 된 결과 목록. Prelude의 mapM 어때요?
myParser :: String -> Parser Process
이면 Parsec
의 파서 유형에 대해 일반적인 이름을 사용하여 찾고있는 것으로 보이는 mapM myParser :: [String] -> Parser [Process]
입니다. 따라서 순차적으로 구문 분석하려는 행 목록 (lns
이라고 함)이있는 경우 parse (mapM myParser) lns
을 사용하여 원하는 결과를 얻을 수 있습니다.
관련 문제
- 1. 하스켈 - 파서 연결자 키워드
- 2. 하스켈 파서 콤비
- 3. 하스켈 - 작은 파서 작성
- 4. 하스켈 파서 AST
- 5. 하스켈 식별자 용 하스켈 파서 연결자
- 6. 명령 파서/통역
- 7. 하스켈 재귀 문제, 작은 파서. 몇 가지
- 8. Antlr3 파서 경로 명령 쉘
- 9. 신청의 맥락에서 하스켈 타입 시스템 이해하기
- 10. 시스템 호출 및 명령
- 11. RTS 게임용 명령 시스템
- 12. 시스템 명령 - 반환하지 않습니다
- 13. 펄 스크립트는 시스템 명령
- 14. 시스템 명령 - 자바
- 15. C++ - 시스템 명령
- 16. C++ 시스템 명령
- 17. 시스템 내장 명령 오류
- 18. Python : 시스템 명령
- 19. 하스켈 - MonadState
- 20. 하스켈 재귀 문제, 작은 파서. 표현식의 부정 및 표현식이 가능합니다.
- 21. 하스켈 : 여러 명령 줄 인수를 읽는 중
- 22. gcc C++ 명령 줄 오류 메시지 파서
- 23. 최고의 C++ 명령 행 인수 파서
- 24. C#의 GPL 호환 명령 행 파서
- 25. 0MQ 하스켈 바인딩에서 런타임 오류 : getIntOpt : 인터럽트 (시스템 호출 중단)
- 26. python 실행 시스템 명령 (windows)
- 27. 명령 프롬프트 읽기 시스템 출력
- 28. 루비 시스템 명령 종료 코드
- 29. WaitforsingleObject가 시스템 명령 종료를 감지합니다.
- 30. Mac에서 Java로 시스템 명령 실행