관리 메뉴

Value Creator의 IT(프로그래밍 / 전자제품)

#6 [lua 1.1] 개요 - Lua 내부 코드 읽어보기 본문

1. 프로그래밍/2) LUA

#6 [lua 1.1] 개요 - Lua 내부 코드 읽어보기

valuecreatort 2019. 8. 21. 19:00
반응형

#루아의 렉스와 야크 코드를 정성들여 분석해놓았다.

 

어디사는 누구인지 모르겠지만 감사합니다.

 

https://navilera.github.io/categories/

 

Posts by Category

4 분 소요 Tree.h Tree.h, Tree.c 파일은 루아 2.1에서 새로 생긴 파일입니다. 루아 1.1에서 그냥 표준 라이브러리 호출로 처리했던 동적 메모리 관리를 트리로 대체한 것으로 보입니다. 검색을 빠르게 하려는 요량으로 보이는데, 코드를 읽으면서 어디에서 트리를 쓰는지도 같이 추...

navilera.github.io

 

-----------------------------------------------------------------------------------------------------------------------------------------------

1. LUA 1.1 버전을 다운 받는다.

https://www.lua.org/ftp/

 

Lua: download area

Download area This repository contains the source code and the reference manuals for all released versions of Lua. If you want to build early versions of Lua using modern compilers, get the lua-all package. If you have arrived here by accident, start here.

www.lua.org

 

2. 루아는 1.0 버전이 아니라 1.1 버전이 최초 버전이다.

루아 1.0은 정식 릴리즈가 아니라 루아 탄생 10주년 기념으로 공개한 스냅샷이라고 합니다. 그리고 소스 파일 중에 lex와 yacc 파일이 없어서 문법은 y_tab.c를 봐야 알 수 있다고 하네요. y_tab.c는 yacc가 gcc 보라고 만든 파일이지 사람이 읽으라고 만든 파일이 아니기 때문에 안보겠습니다. 물론 yyreds라는 변수에 yacc 파일에 적은 코드가 그대로 적혀 있긴 하지만 1.1과 딱히 다른점이 없으니, 그거 본다고 시작부터 진 빼기 싫거든요. 그래서 1.1부터 보기로 결정한 것입니다.

 

3. LUA 1.1 버전 폴더를 들어가보면 아래의 구조로 되어 있다. 그 중 핵심은 include 폴더와 src 폴더인 것 같다.

|-- include
|   |-- lua.h
|   |-- lualib.h
|   `-- mm.h
|-- src
|   |-- hash.c
|   |-- hash.h
|   |-- inout.c
|   |-- inout.h
|   |-- lex.c
|   |-- Makefile
|   |-- opcode.c
|   |-- opcode.h
|   |-- table.c
|   |-- table.h
|   |-- y.tab.c
|   |-- y.tab.h //yacc이 생성하는 헤더.
|   `-- yacc
|       |-- exscript
|       |-- lua.lex
|       |-- lua.stx
|       `-- Makefile

--> lex와 yacc 기반으로 되어있는 것을 확인할 수 있다. 최신버전인 루아 5.3은 lex와 yacc을 쓰지 않는다고 한다.

읽어볼 파일은 아래와 같다.

 

hash.c : 해시?

hash.h : 해시 헤더 파일

inout.c : 디버거 관련 기능을 구현한 것 같습니다. 그런데 정적 전역 변수들 선언을 보니, 아마도 함수 콜 스택 추적 정도 기능만 구현한 듯 보입니다.

inout.h : inout.c의 헤더 파일

lex.c : 토큰에 대한 정규 표현식.

opcode.c : 루아 VM(Virtual Machine)을 구현하는 핵심 부분.

opcode.h : opcode 헤더 파일

table.c : lua에서 사용하는 파일 추가, 삭제, 열기, 입출력 등을 담당?

table.h : table.c의 헤더 파일

lua.stx : 루아 언어 문법 규칙을 정의한 파일. yacc 역할 담당.

 

핵심이면서 가장 많은 부분 차지 하는 것 : lua.stx와 opcode.c

 

* 해시 : 해시 함수(hash function)는 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수이다. 해시 함수에 의해 얻어지는 값은 해시 값, 해시 코드, 해시 체크섬 또는 간단하게 해시라고 한다. 그 용도 중 하나는 해시 테이블이라는 자료구조에 사용되며, 매우 빠른 데이터 검색을 위한 컴퓨터 소프트웨어에 널리 사용된다. 

 

 

 

 

 

 

 

 

 

 

반응형
Comments