Lua1.1 입력 준비

2961 단어 luaLua1.1
다음main 호출을 보고 라이브러리가 열리면lua 호출합니다dostring 또는 luadofile.lua_dostring은 표준 입력에서 루아 코드를 읽는 것입니다.lua_dofile는 파일에서 루아 코드를 읽는 것입니다. 이 두 가지가 어떤 차이가 있는지 살펴보겠습니다.lua_dostring 호출 luaopenstring,opcode.c:
/*
** Generate opcode stored on string and execute global statement. Return 0 on
** success or 1 on error.
*/
int lua_dostring (char *string)
{
 if (lua_openstring (string)) return 1;
 if (lua_parse ()) return 1;
 lua_closestring();
 return 0;
}

입력 문자열, 문법 분석을 열고 입력을 닫습니다.우리 루아오픈string은 무슨 inout을 했어요?c 파일
/*
** Function to open a string to be input unit
*/
int lua_openstring (char *s)
{
 lua_linenumber = 1;
 lua_setinput (stringinput);
 st = s;
 {
  char sn[64];
  sprintf (sn, "String: %10.10s...", s);
  if (lua_addfile (sn)) return 1;
 }
 return 0;
}

시작 줄 번호 1로 설정하기 문법 분석기 설정 입력 luasetinput (lex.c 중).입력한 문자열 주소를 st에 저장하고 파일 이름을 파일 이름 그룹에 저장합니다.luaaddfile(table.c)
void lua_setinput (Input fn)
{
  current = ' ';
  input = fn;
}

현재 문자와 input 리셋을 설정합니다.여기는stringinputinout입니다.c 파일:
/*
** Function to get the next character from the input string
*/
static int stringinput (void)
{
 st++;
 return (*(st-1));
}

주석에서 입력한 문자열에서 문자를 얻을 수 있도록 분명히 말했다.lua_addfile은 파일을 파일 그룹에 추가합니다.table.c 파일
/*
** Add a file name at file table, checking overflow. This function also set
** the external variable "lua_filename" with the function filename set.
** Return 0 on success or 1 on error.
*/
int lua_addfile (char *fn)
{
 if (lua_nfile >= MAXFILE-1)
 {
  lua_error ("too many files");
  return 1;
 }
 if ((lua_file[lua_nfile++] = strdup (fn)) == NULL)
 {
  lua_error ("not enough memory");
  return 1;
 }
 return 0;
}

또 봐봐 루아dofile는 뭐하는 거야?opcode.c 파일:
/*
** Open file, generate opcode and execute global statement. Return 0 on
** success or 1 on error.
*/
int lua_dofile (char *filename)
{
 if (lua_openfile (filename)) return 1;
 if (lua_parse ()) { lua_closefile (); return 1; }
 lua_closefile ();
 return 0;
}

파일을 열고, 문법 분석을 하고, 파일을 닫습니다.inout.c 파일
/*
** Function to open a file to be input unit. 
** Return 0 on success or 1 on error.
*/
int lua_openfile (char *fn)
{
 lua_linenumber = 1;
 lua_setinput (fileinput);
 fp = fopen (fn, "r");
 if (fp == NULL) return 1;
 if (lua_addfile (fn)) return 1;
 return 0;
}

줄 번호를 설정하고, 문법 분석의 입력을 설정합니다. 여기서 호출하는 것은lex입니다.c의 luasetinput.이러한 처리를 통해 문법 분석을 할 때 표준 입력이나 파일 입력의 개념이 없어졌고 문법 분석은 필요할 때 함수 입력 지침에서 문자를 얻기만 하면 서로 다른 입력은 이곳에서 투명해졌다.파일을 연 후 luaaddfile, 파일 이름을 파일 이름 그룹에 저장합니다.inout.c
/*
** Function to get the next character from the input file
*/
static int fileinput (void)
{
 int c = fgetc (fp);
 return (c == EOF ? 0 : c);
}

파일에서 문자를 읽습니다.파일이 끝났으면 0으로 돌아갑니다.여기까지, 어법 분석의 입력은 이미 준비가 되었다.코드를 분석해 보면 루아든Dostring 또는 Luadofile, 모두 lua 호출됨parse.

좋은 웹페이지 즐겨찾기