2018년 6월 5일 화요일

AI 개발 준비단계 - 스크립트언어 검토

이전(20년전)에 작성했던 컴파일러 프로그램과 실행결과 합니다.이전에 한번 전체 소스코드를  OPEN한 적이 있지만 별관심을 얻지 못했습니다.이제 지금 인공지능 대화 프로그램을 개발하면서 가장 필요한것이 자체 컴파일러 이더군요파이선과 같은 프로그램이 있어야 할것 같아서나름 전용 스크립트 컴파일러를 만들기위해 검토중입니다.20년전에 단 일주일만에 개발했던 스크립트 컴파일러 소스코드를 다시보니 느낌이 다릅니다.이 언어는 어셈블러 수준의 낮은수준의 프로그램입니다.이제 조금은 고급 근처에 같은 개발툴을 만들생각입니다.
==> 다음코드는 초-중급개발자 수준이상이면 누구나 만들수 있는 스크립트 언어 입니다.        어렵지는 않을 것입니다.
[1] [스크립트 소스코드]
LABEL  REPEAT, TOP
EXTERN PRINT_LINE
struct DREAM
I   INT
A   INT
B   INT
SUM INT
e_struct
DREAM X


VAR TOTAL, I
VAR MYS
STR NAME 20

TITLE "NEW 구구단"
TITLE "NEW 구구단"
TITLE "NEW 구구단"
TITLE "NEW 구구단"
LINESKIP

SET X~I, 0
SET X~B, 0

:TOP
SET   I, X~B
ADD   I, 1
PRINT "  ", I, " DAN TABLE   "
LINESKIP


: REPEAT
ADD X~I, 1

SET X~SUM, X~B
ADD X~SUM, 1
CALL PRINT_LINE

SET X~SUM, X~B
ADD X~SUM, 2
CALL PRINT_LINE

SET X~SUM, X~B
ADD X~SUM, 3
CALL PRINT_LINE

LINESKIP

IF X~I < 9 GOTO REPEAT
LINESKIP

SET X~I, 0
ADD X~B, 3

IF X~B < 9 GOTO TOP
SET X~I, 0
DELAY 100
IF 1 < 9 SHELL notepad.exe
SET MYS,991
CALC TOTAL=MYS+5*(10+1)  ;@--> 이부분을 추가 해보면서  변수 할당구조를 만드는데 적합하지 않다고 생각했습니다. --> 그래서 새로 만들것입니다.
PRINTLN "TOTAL = ", TOTAL
PRINTLN "MYS = ", MYS
END.

FUNCTION PRINT_LINE
SET TOTAL, X~SUM
MUL TOTAL, X~I
PRINT  "|", X~SUM:2, " * ", X~I : 2, " = ", TOTAL : 2
RETURN

TOTAL Byte 0 
[2] [실행결과 입니다.]
RUN=
BEGIN
NEW 구구단NEW 구구단NEW 구구단NEW 구구단
  1 DAN TABLE
| 1 *  1 =  1| 2 *  1 =  2| 3 *  1 =  3
| 1 *  2 =  2| 2 *  2 =  4| 3 *  2 =  6
| 1 *  3 =  3| 2 *  3 =  6| 3 *  3 =  9
| 1 *  4 =  4| 2 *  4 =  8| 3 *  4 = 12
| 1 *  5 =  5| 2 *  5 = 10| 3 *  5 = 15
| 1 *  6 =  6| 2 *  6 = 12| 3 *  6 = 18
| 1 *  7 =  7| 2 *  7 = 14| 3 *  7 = 21
| 1 *  8 =  8| 2 *  8 = 16| 3 *  8 = 24
| 1 *  9 =  9| 2 *  9 = 18| 3 *  9 = 27

  4 DAN TABLE
| 4 *  1 =  4| 5 *  1 =  5| 6 *  1 =  6
| 4 *  2 =  8| 5 *  2 = 10| 6 *  2 = 12
| 4 *  3 = 12| 5 *  3 = 15| 6 *  3 = 18
| 4 *  4 = 16| 5 *  4 = 20| 6 *  4 = 24
| 4 *  5 = 20| 5 *  5 = 25| 6 *  5 = 30
| 4 *  6 = 24| 5 *  6 = 30| 6 *  6 = 36
| 4 *  7 = 28| 5 *  7 = 35| 6 *  7 = 42
| 4 *  8 = 32| 5 *  8 = 40| 6 *  8 = 48
| 4 *  9 = 36| 5 *  9 = 45| 6 *  9 = 54

  7 DAN TABLE
| 7 *  1 =  7| 8 *  1 =  8| 9 *  1 =  9
| 7 *  2 = 14| 8 *  2 = 16| 9 *  2 = 18
| 7 *  3 = 21| 8 *  3 = 24| 9 *  3 = 27
| 7 *  4 = 28| 8 *  4 = 32| 9 *  4 = 36
| 7 *  5 = 35| 8 *  5 = 40| 9 *  5 = 45
| 7 *  6 = 42| 8 *  6 = 48| 9 *  6 = 54
| 7 *  7 = 49| 8 *  7 = 56| 9 *  7 = 63
| 7 *  8 = 56| 8 *  8 = 64| 9 *  8 = 72
| 7 *  9 = 63| 8 *  9 = 72| 9 *  9 = 81

TOTAL = 81
MYS = 991

END of YOUR PROGRAM
CREATED by XBSK(Baek Seung Ki)

END
[3] 나름 메뉴얼
    제목: 틀 언어  rt BASIC
CRtoken.cpp : implementation file
    만든이: 백승기

    아래: 사용가능한 명령을 설명한것입니다.

    코드: 하나의 명령어는 무조건 4바이트이며 모든 정수, 상수, 주소,
등도 4byte로 설정된 미래형 언어이다.  이젠 그저그렇습니다,

    변수: 4byte정수만을 사용한다.
프로그램에 선언된 곳이 자동적으로 VAR영역으로 할당한다.
    상수: 4byte정수만을 사용한다.
프로그램에 선언된 곳에 상수영역으로 설정한다.

    ;struct / e_struct 스트링 변수: 선언된 곳에 그길이만큼의 영역을 확보한다.
    스트링상수 :              위와 동일함

    LABEL: JUMP할 번지를 미리 선언한다.
LABEL A B
:A
:B

    GOTO : 선언된 곳을 JUMP한다.
:A
GOTO A

    IF  : 변수및 상수를 서로 비교해서 그결과로 다음명령을 수행한다.
가능한명령 : GOTO,
SET B=1
SET A=1
IF B=A GOTO A

    END  프로그램의 끝임을 알린다.

    ADD,SUB,MUL,DIV 연산을 수행한다.
ADD A,1
DIV A,B

    PRINT :스트링 및 수치를 출력 한다.
SET I , 0
PRINT 10
PRINT I,K:10,"test",LF <- LF는 라인 SKIP명령어 입니다.

    DO 화일 문:
DO SET I,1,1  //초기치는 1이고 증가치가 1이다.
    <statement>

WHILE I<10 // 1 에서 10까지 1씩 증가 해서 처리된다.

    struct / e_struct   : 데이터 베이스 선언문/ 종료문
    다음과 같은 데이터 베이스를 정의 할수 있다.
    struct SAMPLE
I  INT      <- 정수의 선언이다.
K  STR 20   <- 20개의 char를 갖는 문자열이다.
    e_struct        <- 선언이 끝났음을 알린다.

    SAMPLE test     <- test 라는 DB SAMPLE의 영역을 확보한다.

    SET test~I,0    <- I에 0을 할당한다.
    SET test~K,"TE" <- K에 "TE"을 할당한다.

    PRINT test~I:5,test~K:10,LF
FILE   : 읽기 전용으로 화일의 열수 있게 한다.
    FILE "sample.txt"

READ   : FILE 로 열어진 화일로 부터 줄단이로 데이터를 읽는다.
 물론 반드시 DB 로 선언되어진 데이터 변수가 있어야 한다.

SHELL "COMMAND.COM"
:목적 프로그램을 실행시킨다.
DELAY 1000  : 지정한 시간만큼 기다린다 -> <구현예정> 2018.06.01 Add

    struct XX
A INT
B INT
C STR 20
    e_struct

    XX t

    FILE "s.txt"

    READ t

    PRINT t~A,t~B,t~C,LF

    END.

FUNCTION NAMES
SET I,1
RETURN

    s.txt = 의 내용 {
10 10 "hdhd dhdh"
20 20 yryr
30 30 "ttt ttt"
    } 

댓글 없음:

댓글 쓰기