2009-12-04 7 views
3

프롤로그에 렉서와 파서를 작성했습니다. 문자열을 AST와 통합합니다. 이것은 내가 작업중인 컴파일러/인터프리터 프로젝트의 일부입니다. 필자는 당연히 파일에서 문자열을 읽어서 구문 분석하려고합니다. 이 을 읽고, 그리고 그것은 단지 내가 double_quotes와 설정을 만지작 된프롤로그에서 문자열 읽기 (파일에서)

hello. 

을 가진 파일과 같은 프롤로그 원자와 술어를 읽고,하지만 성공에 대한 그러나, 술어 나는 발견했다.

나는이

let id = \x.x in id (S (S Z)) 

같은 것을 가진 파일을 읽은 다음 구문 분석 술어에이 문자열을 보낼 수 있어야합니다.

답변

8

read_line_to_codes/2 또는 read_line_to_codes/3을 사용할 수 있습니다. 라인과 관련되지 않은

read_lines([H|T]) :- 
    read_line_to_codes(user_input, H), H \= end_of_file, read_lines(T). 
read_lines([]). 

write_lines([]). 
write_lines([H|T]) :- 
    writef("%s\n", [H]), write_lines(T). 

main :- 
    read_lines(X), write_lines(X). 

(이 인쇄 writef/2를 사용합니다.) 또한 read_stream_to_codes/2read_stream_to_codes/3 있습니다 : stdoutstdin에서 개별 라인을 읽고 인쇄 예제 프로그램은 다음과 같다. 다음 코드를 인쇄 한 번에 표준 출력 표준 입력에서 모든 입력 :이 파일 대신에 표준 입력에서 읽을 수도 있습니다

main :- 
    read_stream_to_codes(user_input, X), writef("%s", [X]). 

물론. 자세한 내용은 readutil 라이브러리를 참조하십시오.

+0

감사합니다. 이것은 정확하게 내가 찾고 있었던 것입니다! – danr