2011-11-08 3 views
0

저는 프로그래밍 언어 변환기를 만들고 있습니다. 가져 오기 및 포함이 있습니다. 예를 들어flex/bison에서 가져 오기를 포함시키는 방법

:

import com.nanana.MyClassFile 
include "myfile.any" 

나는 내가 내가 그것을 만들 수있는 방법에 잃었어요 의미 초보자입니다. 내가 파싱하는 동안 다른 파일을 구문 분석 할 수 있는지 궁금합니다.

어떻게하면됩니까?

편집 :

내가 주요 기능의 파일을 구문 분석하는 데 사용하고 코드는 다음과 같습니다

yyin = fopen(argv[1], "r"); 
return yyparse(); 

내가이 동일한 코드를 사용하거나 다른이 수 있습니까?

답변

1

렉서는 YY_INPUT 매크로를 사용하여 데이터를 가져옵니다. 파서 내에서 "myfile.any"명령이 구문 분석되면 파서는 새 파일을 열고 원본 파일 대신 데이터가 YY_INPUT에서 반환되도록 정렬해야합니다. EOF에 도달하면 YY_INPUT은 원본 파일에서 계속 읽어야합니다. 포함 된 파일이 다른 파일을 포함 할 수 있도록 스택에 열린 파일을 저장하려고하지만 무한 루프를주의해야합니다.

+0

내가 말했듯이, 나는 초보자 다. 나는 조금 더 깊고 모범이되는 대답을 희망한다. 부디. 고마워. –

+0

정확한 해결책은 특정 파서/렉서에 크게 의존하게 될 것입니다. 이런 종류의 세부 사항을 파악하는 데는 적절한 포럼이 아닙니다. YY_INPUT을 사용하여 한 번에 한 문자 씩 데이터를 렉서에 제공합니다. 파서는 해당 문자가 나오는 파일을 제어합니다. 생성 된 코드를 살펴보고이 모든 관계가 어떻게 결합되어 있는지 확인하십시오. 이 주제의 주변을 터치하는 flex FAQ에는 몇 가지 항목이 있습니다 (예 : 여러 입력 소스를 동시에 같은 스캐너에 공급할 수 있습니까?) – Dan

관련 문제