Lua2.4 파일 inout을 엽니다.c

2732 단어 luaLua2.4
여기는 루스에 따라.c의 함수 호출 순서는 관련 코드를 순서대로 전개한다.일단은 루아openfile, 이 함수는inout에 정의됩니다.c:
/*
** Function to open a file to be input unit.
** Return the file.
*/
FILE *lua_openfile (char *fn)
{
 lua_setinput (fileinput);
 if (fn == NULL)
 {
   fp = stdin;
   fn = "(stdin)";
 }
 else
   fp = fopen (fn, "r");
 if (fp == NULL)
   return NULL;
 lua_linenumber = 1;
 lua_parsedfile = luaI_createfixedstring(fn)->str;
 return fp;
}

함수 호출 시작 luasetinput, 함수 바늘을 전달합니다.lua_setinput은lex에 정의됩니다.c에서 어법 분석기에 함수 바늘을 주고 나중에 어법 분석 프로그램은 이 함수 바늘에서 하나의 입력 문자를 얻어야 한다.여기 루아setinput의 실제 입력 매개 변수는 fileinput이고 fileinput은 다음과 같이 정의됩니다.
/*
** Function to get the next character from the input file
*/
static int fileinput (void)
{
 return fgetc (fp);
}

이 함수의 작용은 호출할 때마다 파일에서 문자를 얻는 것을 알 수 있다.루아로 돌아가기openfile, 전송된 파일 이름이 비어 있으면 표준 입력에서 내용을 읽을 수 있습니다.파일 설명자를 표준 입력 stdin으로 설정하고 파일 이름을 '(stdin)' 으로 설정합니다.정상적인 파일 이름을 가져오면 열 수 있습니다.열지 못하면 NULL로 돌아갑니다.현재 줄 번호를 1로 설정합니다.현재 분석할 파일을 현재 열려 있는 파일로 설정합니다.luaI_createfixedstring 함수는 Lua의 문자열 저장 공간에서 회수할 수 없는 문자열을 생성합니다. 이 방법은 나중에 언급될 것입니다.마지막으로 함수는 파일 설명자 fp를 되돌려줍니다.lua_오픈 파일 분석이 끝났습니다.그에 상응하는 루아closefile
/*
** Function to close an opened file
*/
void lua_closefile (void)
{
 if (fp != NULL && fp != stdin)
 {
  fclose (fp);
  fp = NULL;
 }
}

이 함수는 루아openfile에서 열린 파일입니다.lua_openstring, lua_closestring은 위에서 파일을 열고 닫는 동작과 유사해서 중복되지 않습니다.주의,luaopenstring 시 설정된 파일 이름은 '(string)' 입니다. 이 형식은 위에서 표준 입력으로 입력한 파일 이름과 같습니다.이렇게 하는 것은 프로그램의 통일을 위해서이다. 즉, 파일이 하나의 괄호 안에 문자열이 있는 것을 보면 파일이 진정한 파일이 아니라 프로그램을 쓸 때의 개념적 통일을 유지하기 위해서라는 것을 알 수 있다.이것도 쓰기 프로그램에서 비교적 자주 사용하는 기교인데, 바로 특례를 특정한 특수한 일반적인 상황으로 바꾸는 것이다.컴파일러와 관련된 inout입니다.c의 내용은 이미 끝났다.컴파일러에서 제출한compile에서 파일을 열고 닫는 것에 대한 질문에 대답할 수 있습니다.거기서 제시한 루아를 왜 불러야 하는지openfile와 같은 문제는 여기에 해답을 드리겠습니다. 입력과 출력을 함께 넣는 것은 디자인에 대한 고려에서 비롯된 것이고 프로그램 구조가 명확합니다.한 마디만 더 하자면 루아의 디자인은 매우 잘 만들어졌고 모듈화는 매우 아름답게 만들어졌으며 코드의 질도 매우 높다.luac.c에서 언급한 파일 닫기와 관련된 문제는 이미 풀었다.그러나 위에서 코드를 보는 과정에서 새로운 문제가 발견되었다. 아래에 열거되어 있다:>luasetinput이 문법 분석에서의 작용은?관련 어법 분석 내용은 또 무엇입니까?>luaI_createfixedstring은 무엇입니까?그 TaggedString은 어떤 데이터 구조입니까?주제 밖의 말을 좀 외워도 사실 주제에서 너무 멀리 떨어진 편은 아니다.현재 계획하고 있는 것은 Lua2입니다.4 컴파일러와 이 선을 따라 이 선이 끝나고 해석기의 선을 보자.코드만 보고 코드와 관련된 것만 쓰고 원리적인 것은 해석에 영향을 주지 않는 한 되도록 적게 쓴다.원리적인 것들로 인해 인터넷에는 여전히 많은 책들이 있고 관련 서적도 많다.여기서 말하는 원리적인 것은 주로 컴파일 원리와 관련된 것을 가리킨다. --------------------------------------------지금까지의 문제를 기억해 두세요:inout.c> lua_setinput이 문법 분석에서의 작용은?관련 어법 분석 내용은 또 무엇입니까?>luaI_createfixedstring은 무엇입니까?그 TaggedString은 어떤 데이터 구조입니까?luac.c> do_compile에 있는 TFunc은 무엇입니까?그 초기화 루아IinitTFunc란? >lua_파서가 뭐예요?do_dump 방법에서 조정한 그 몇 가지 방법은 또 각각 무엇을 하는 것입니까?

좋은 웹페이지 즐겨찾기