2018년 6월 25일 월요일

[한이터백승기] AI준비단계 - 컴파일 단계 준비(5)

오늘은 출력을 구현하지만notepad.exc 안에 출력하게 만들것입니다.
당장은 노트패드 지만 MSWORD 나 한글 도 가능합니다.
물론 대상 SW는 아무것도 수정하지 않습니다.
수정할수도 없습니다 만 ^^

[소스 원본]gRTN.demo(""
"struct one1 begin;"
"int A=111,B=222,C=333;"    // 정수:초기화 -> to int array
"chr D:40,E:32;" // 문자열:길이 -> to 크기를 지정함 <- 추가
"int A=111,B=222,C=333;"    // 정수:초기화 -> to int array
"str D1='abcd',E1='';"      // 문자열:길이 -> to 가변 미구현
"num F,G;" // FLOAT NUMBER  -> to double
"end;"
"program main begin;"
"one1.A = 100;"
"one1.B = 2;"
"one1.C = one1.A + one1.B;"
"exec notepad.exe;"
"putln one1.F,one1.B,one1.G;" // like prinf
"put one1.A,one1.B,one1.C;" // like prinf
//"putln ';';"
//"putln 'RESULT=[one1.A,one1.B,one1.A]';"
"end;"
);

[실행결과화면]

[실행결과]변수를 값으로 변환하기 전에 출력대상을 프로그램 상이 아닌 외부 프로그램인
[ notepad.exe ]를 이용했습니다.
--------------------------------------------
Test Command List
--------------------------------------------
. help   - (h) show this message
. run    - (r) run script
. edit   - (e) call editor
. quit   - (q) quit program!
--------------------------------------------
r
Run scriper!
[source list begin]
[0000] struct one1 begin
[0001] int A=111,B=222,C=333
[0002] chr D:40,E:32
[0003] int A=111,B=222,C=333
[0004] str D1='abcd',E1=''
[0005] num F,G
[0006] end
[0007] program main begin
[0008] one1.A = 100
[0009] one1.B = 2
[0010] one1.C = one1.A + one1.B
[0011] exec notepad.exe
[0012] putln one1.F,one1.B,one1.G
[0013] put one1.A,one1.B,one1.C
[0014] end
[source list end]


 [struct] [one1] [begin]
 [int] [A=111] [B=222] [C=333]
 [chr] [D:40] [E:32]
 [int] [A=111] [B=222] [C=333]
 [str] [D1=] [abcd] [E1=]
 [num] [F] [G]
 [end]
 [program] [main] [begin]
 [one1.A] [=] [100]
 [one1.B] [=] [2]
 [one1.C] [=] [one1.A] [+] [one1.B]
 [exec] [notepad.exe]
 [putln] [one1.F,one1.B,one1.G]
 [put] [one1.A,one1.B,one1.C]
 [end]

VAR_TY_NONE: <struct>
<BEGIN STRUCT>
 [sStructName:one1][tag:begin]
-var-: <int>[L=10,'111' ][A=111][L=10,'222' ][B=222][L=10,'333' ][C=333]
-var-: <chr>[L=40,'40' ][D:40][L=32,'32' ][E:32]
-var-: <int>[L=10,'111' ][A=111][L=10,'222' ][B=222][L=10,'333' ][C=333]
-var-: <str>[L=128][D1=][L=128][abcd][L=128][E1=]
-var-: <num>[L=20][F][L=20][G]
<END STRUCT>

memory address![end][1]
VAR_TY_NONE: <program>
<BEGIN PROGRAM>
 [sStructName:main][tag:begin]
-prg-: <one1.A>
memory address![one1.A][3]<=><100>
-prg-: <one1.B>
memory address![one1.B][3]<=><2>
-prg-: <one1.C>
memory address![one1.C][5]<=><one1.A><+><one1.B>
-prg-: <exec>
memory address![exec][2]<notepad.exe>
-prg-: <putln>
memory address![putln][2]<one1.F,one1.B,one1.G>
-prg-: <put>
memory address![put][2]<one1.A,one1.B,one1.C>
<END PROGRAM>

memory address![end][1]
[:00]  VAR:one1
program_cnt=8
[program] top address:00  name:end [sub cnt:0]
[program] top address:01  name:one1.A [sub cnt:2]
[x][y] memory address:[01][00]  name:= [type:999]
[x][y] memory address:[01][01]  name:100 [type:999]
[program] top address:02  name:one1.B [sub cnt:2]
[x][y] memory address:[02][00]  name:= [type:999]
[x][y] memory address:[02][01]  name:2 [type:999]
[program] top address:03  name:one1.C [sub cnt:4]
[x][y] memory address:[03][00]  name:= [type:999]
[x][y] memory address:[03][01]  name:one1.A [type:999]
[x][y] memory address:[03][02]  name:+ [type:999]
[x][y] memory address:[03][03]  name:one1.B [type:999]
[program] top address:04  name:exec [sub cnt:1]
[x][y] memory address:[04][00]  name:notepad.exe [type:101]
[program] top address:05  name:putln [sub cnt:1]
[x][y] memory address:[05][00]  name:one1.F,one1.B,one1.G [type:103]
[program] top address:06  name:put [sub cnt:1]
[x][y] memory address:[06][00]  name:one1.A,one1.B,one1.C [type:102]
[program] top address:07  name:end [sub cnt:0]


[RUN]program_cnt=8
Run ...TY_ETC
TY_ETC
[EQQ] SET:[01]  name:100 [type:999]
[EQQ] [RESULT] data:100
TY_ETC
[EQQ] SET:[01]  name:2 [type:999]
[EQQ] [RESULT] data:2
TY_ETC
[EQQ] SET:[01]  name:one1.A [type:999]
[EQQ] SET:[02]  name:+ [type:999]
[EQQ] SET:[03]  name:one1.B [type:999]
[EQQ] [RESULT] data:one1.A+one1.B
TY_EXE
[RUN] WORD:[00]  name:notepad.exe [type:101]
TY_PUTLN
[RUN] PUTLN:[00]  name:one1.F,one1.B,one1.G [type:103]
TY_PUT
[RUN] PUT:[00]  name:one1.A,one1.B,one1.C [type:102]
TY_ETC 

2018년 6월 20일 수요일

[한이터백승기] AI준비단계 - 컴파일 단계 준비(4)


이번에는 프로그램 을 실행시킬 겁니다.
이것은 다른방법으로도 쉬운것이고 누구나 간단히 구현하는 것이지요
물론 스크립트 소스를 만들고
실행시킬 스크립트 프로그램 원본 을 컴파일하고 이것을 실행시키는 프로그램은 전혀 다른 예기입니다.

* 보이는 소스를 실행하고 결과를 생성합니다.

1. 원본소스를 준비합니다. ( 파일 또는 다음과 같은 프로그램 내에서 사용합니다.)
2. 실행합니다. ( 모든 소스를 분해하고 확인해서 변수 와 실행부분으로 분리합니다.)
3. 결과 : 여기서는 exec notepad.exe 만 실행합니다.
옆부분의 notepad.exe가 실행되어 있고 이것이 결과 입니다.


다음에는 출력부분을 추가할 예정입니다.



2018년 6월 18일 월요일

[한이터백승기] AI준비단계 - 컴파일 단계 준비(3)

이번진행은 프로그램 코드까지 파싱하는 것 까지 진행하고 있습니다.
컴파일단계에서 남은 과제는  계산식과 커멘드가 참조하는 각변수들을프로그램 Address로 전환하는 것입니다.
프로그램을 위해 메모리에 할당한 실제 변수를 가상화 시켜서스크립트가 참조할수 있는 Address로 번역하는 것입니다.
원본소스와 프로그램 컴파일을 위한 파싱과정은 다음과 같습니다.
* 현제 이프로그램은 에러처리 및 예외 처리는 하지 않습니다.


<원본소스>gRTN.demo(""
"struct one1 begin;"
"int A,B,C;" // 정수:초기화 -> to int array
"str D,E;"   // 문자열:길이 -> to 가변 Array
"num F,G;"   // FLOAT NUMBER  -> to double
"end;"
"program main begin;"
"one1.A = 100;"
"one1.B = 2;"
"one1.C = one1.A + one1.B;"
"exec notepad.exe;"
"put '$1+$2=$3',one1.A,one1.B,one1.C;" // like prinf
"end;"
);

<처리과정>--------------------------------------------
Test Command List
--------------------------------------------
. help   - (h) show this message
. run    - (r) run script
. edit   - (e) call editor
. quit   - (q) quit program!
--------------------------------------------
r   // 메뉴의 run을 실행한다. < 지금은 컴파일 과정만 진행중입니다. >

Run scriper! 
// 소스 목록 display 입니다.
[source list begin]
[0000] struct one1 begin
[0001] int A,B,C
[0002] str D,E
[0003] num F,G
[0004] end
[0005] program main begin
[0006] one1.A = 100
[0007] one1.B = 2
[0008] one1.C = one1.A + one1.B
[0009] exec notepad.exe
[0010] put '$1+$2=$3',one1.A,one1.B,one1.C
[0011] end
[source list end]


//  1 단계 변수 및 구조체 파싱 - 현제는 구조체만 합니다.
VAR_TY_NONE: <struct>
<BEGIN STRUCT>
 [sStructName:one1][tag:begin]
-var-: <int>[A][B][C]
-var-: <str>[D][E]-var-: <num>[F][G]<END STRUCT>// 2단계 프로그램 파싱
CREATE program![end]

VAR_TY_NONE: <program>
<BEGIN PROGRAM>
 [sStructName:main][tag:begin]
-prg-: <one1.A>
CREATE program![one1.A]
[=][100]
-prg-: <one1.B>
CREATE program![one1.B]
[=][2]
-prg-: <one1.C>
CREATE program![one1.C]
[=][one1.A][+][one1.B]
-prg-: <exec>
CREATE program![exec]
[notepad.exe]
-prg-: <put>
CREATE program![put]
[$1+$2=$3][one1.A][one1.B][one1.C]
<END PROGRAM>

CREATE program![end]
// 3단계 디버깅을 위해 파싱한 구조체와 프로그램 소스 목록을 출력합니다.
[struct] top address:00  name:one1 [sub cnt:7]
[vars] memory address:[00][00]  name:A [type:10]
[vars] memory address:[00][01]  name:B [type:10]
[vars] memory address:[00][02]  name:C [type:10]
[vars] memory address:[00][03]  name:D [type:20]
[vars] memory address:[00][04]  name:E [type:20]
[vars] memory address:[00][05]  name:F [type:11]
[vars] memory address:[00][06]  name:G [type:11]
program_cnt=7
[program] top address:00  name:end [sub cnt:0]
[program] top address:01  name:one1.A [sub cnt:2]
[x][y] memory address:[01][00]  name:= [type:-25]
[x][y] memory address:[01][01]  name:100 [type:-25]
[program] top address:02  name:one1.B [sub cnt:2]
[x][y] memory address:[02][00]  name:= [type:-25]
[x][y] memory address:[02][01]  name:2 [type:-25]
[program] top address:03  name:one1.C [sub cnt:4]
[x][y] memory address:[03][00]  name:= [type:-25]
[x][y] memory address:[03][01]  name:one1.A [type:-25]
[x][y] memory address:[03][02]  name:+ [type:-25]
[x][y] memory address:[03][03]  name:one1.B [type:-25]
[program] top address:04  name:exec [sub cnt:1]
[x][y] memory address:[04][00]  name:notepad.exe [type:101]
[program] top address:05  name:put [sub cnt:4]
[x][y] memory address:[05][00]  name:$1+$2=$3 [type:102]
[x][y] memory address:[05][01]  name:one1.A [type:102]
[x][y] memory address:[05][02]  name:one1.B [type:102]
[x][y] memory address:[05][03]  name:one1.C [type:102]
[program] top address:06  name:end [sub cnt:0]
// 여기까지 입니다.  다음과정은 실행을 대비해 침조 변수를 실제 주소화 하는 것입니다. // ( 이단계는 조금 복잡합니다.)

2018년 6월 14일 목요일

[한이터백승기] AI준비단계 - 컴파일 단계 준비(2)

*) 컴파일형식의 스크립트 언어: 추가 데모 소스코드 분석 및 구조체 분석
주소 매기기 (이미지는 소스와 프로그램 컴파일 과정의 이미지 입니다.)
*) 개발중인 이 프로그램은  AI 로 연계하기 위한 것입니다.

















원본소스를 구조체와 프로그램부로 나누고 분석합니다.
지금은 구조체를 분석하고 메모리에 저장한후 순서대로 주소를 
붙힌상태입니다.
다음은 구조체에 붙힌 주소를 프로그램에 적용할 단계입니다.

2018년 6월 13일 수요일

[한이터백승기] AI준비단계 - 컴파일 단계 준비

다음과 같이 코드룰 binary로 변환 할것이고 다음은 간단한 정의문입니다,.




다음과 같은 실제코드를 변환할 준비중입니다.변환이 끝나면 실행코드를 작성할 것입니다.
gRTN.demo("" 
"struct one1 begin;" 
"int A,B,C;" // 정수:초기화 -> to int array 
"str D,E;"   // 문자열:길이 -> to 가변 Array 
"num F,G;"   // FLOAT NUMBER  -> to double 
"end;" 
"program main begin;" 
"one1.A = 100;" 
"one1.B = 2;" 
"one1.C = one1.A + one1.B;" 
"exec notepad.exe" 
"put '$1+$2=$3\n',one1.A,one1.B,one1.C;" // like printf 
"end;" 
);