2013-10-16 3 views
0

나는 이것이 일반적인 질문이라는 것을 알고있다.일반적으로 컴파일러에서 파일을 읽는 가장 좋은 방법은 무엇입니까?

저는 컴파일러를 프로그램 할 것입니다. 파일을 읽는 동안 언어의 토큰을 사용하는 것이 더 좋은지 궁금합니다 (예 : 파일을 열고 나서 읽는 동안 토큰을 추출한 다음 마지막으로 파일을 닫음) 또는 먼저 파일을 읽고 닫은 다음 변수의 데이터로 작업하십시오. 의 추가 비용이 아니므로

file = open(filename); 
readWhileGeneratingTokens(file); 
close(file); 

내가 첫 번째 옵션이 더 잘 보이는 것 같아요 : 첫 번째 옵션은 뭔가 같은 것

file = open(filename); 
textVariable = read(file); 
close(file); 

getTokens(textVariable); 

: 뭔가처럼 이것에 대한 의사 코드는 것 메인 메모리의 용어. 그러나 두 번째 옵션을 사용하면 몇 가지 이점이있을 수 있습니다. 파일을 여는 시간을 최소화하기 위해서입니다.

+0

'program a compiler'라고 할 때, 전체 컴파일러를 직접 작성한다는 의미입니까? 이 경우 토큰 및 후속 단계를 추출하는 데 lex 및 yacc와 같은 도구를 사용하는 것이 좋습니다. – damned

+0

예, 전체 컴파일러를 직접 작성하는 것이 좋습니다. 나는 그 도구에 대해 알고 있으며, 실제로 그것을 수행하는 최선의 방법입니다. 그러나, 이것은 학업 목적을위한 것이며 그들을 사용할 수 없습니다. – ArthurTheLearner

답변

0

하드 데이터를 제공 할 수는 없지만 일반적으로 컴파일러가 토큰 화 소스 코드를 보내는 데 걸리는 시간은 대상 코드를 최적화/생성하는 데 소요되는 시간에 비해 다소 적습니다. 이 때문에 소스 파일이 열려있는 시간을 최소화하려는 것은시기 상조입니다. 또한 토큰 화 전에 메모리로 전체 소스 파일을 읽는 것은 라인 단위로 실행 (해석 된 언어 생각하기)이나 파일 위치가 아닌 곳에서 입력 읽기 (stdin과 같은 스트림 생각)를 방지합니다. 전체 소스 파일을 메모리에 읽어들이는 오버 헤드가 컴퓨터 자원에 가치가 없으며 궁극적으로 프로젝트에 좋지 않을 것이라고 말하는 것이 안전하다고 생각합니다.

0

컴파일러는 입력에서 한 번에 한 문자 씩 진행할 수 있도록 신중하게 설계되었습니다. 그들은 처리하기 전에 전체 파일을 읽지 않으며, 그렇게 할 필요가 없습니다. 단지 무의미한 대기 시간을 추가 할뿐입니다. 그들은 처리하기 전에 전체 라인을 읽을 필요조차 없습니다.

관련 문제