2018년 7월 25일 수요일

2018-07-25 스크립트언어를 위한 LOOP문

2018-07-25 스크립트언어를 위한 LOOP문
기본 스크립트 언어의 구성의 마지막 단계가 for(;;) 문이므로 이 단계는 마지막 단계인셈이다.
이프로그램은 에 다른 모듈과 결합되어 어떤 기능으로 구현될 것이며 아직은 미정이다. 대화형 챗봇이 최종 목표가 될것이다.


2018년 7월 22일 일요일

2018-07-23 스크립트언어를 위한 비교 처리프로그램 (5)

개발중인 스크립트 언어에서  비교문은 산술식과 결합된다.결과를 만드는 프로그램은 이미 완료된 상태지만 아직 IF 의 결과에 따른 처리문 은 이제 개발 할 예정이다.  다양한 많은 프로그램의 결과는 간단할지도 모르지만 숨겨진 과정은 어마어마 하다.(단순히 남의 코드를 복사하는 사람은 당연히 그 결과 이상을 개발 할수 없다. 이유는 결과이외엔 아는 것이 없기때문이다.)

2018년 7월 18일 수요일

2018-07-17 스크립트언어를 위한산술식 처리프로그램 (4)

스크립트 언어에서 사칙연산 을 포함한 문자열수식 계산함수는 필수로 요구된다.다음은 그 구현 원리를 간단하게 소개합니다.( 오늘2018-07-18 개발 및 적용된 예입니다. )

2018년 7월 16일 월요일

2018-07-13 AI를 위한 컴파일러 개발(3)

2018-07-17 AI를 위한 컴파일러 개발(3) by 백승기
*이제 이 스크립트 컴파일러의 이름을 정했습니다.( 임시이름 )  
그리고 변수처리기의 기능을 일부 마무리했고  
간단한 계산기정도의 처리능력을 발휘할 수 있습니다,  
명령어중 pr은 print 기능을 제공합니다.  
그리고 함수 호출기능이 추가되었고 이제 실행됩니다.
* 다음엔 if 와 goto 기능을 구현할까 합니다.
 단 if 문에 goto문은 구현이 되어지므로 따로 goto문을 구현하지는 않을 예정입니다.

MyCalc <가칭> 버전 1.00-> 스크립트 소스
"function main;" 
" A=123;" 
" B='NAME';" 
" pr '----------------------------';" 
" pr 'B=$01',B;" 
" B=1000;" 
" C=A+B;" 
" D=A+B*10;" 
" pr '----------------------------';" 
" pr '$02+$01=$03',A,B,C;" 
" pr 'D=$01',D;" 
" pr '----------------------------';" 
" call sub;" 
"end;" 
"" 
"function sub;" 
" pr '-sub function-';" 
"end;"
MyCalc <가칭> 버전 1.00-> 실행결과
----------------------------
B=NAME
----------------------------
1000+123=1123.00
D=10123.00
----------------------------
-sub function- 


2018년 7월 15일 일요일

스크립트언어를 개발하고 싶다면...

먼저 BASIC언어를 배우거나 테스트해보세요
기초에 불과한 언어일지라도 유용합니다.

BASIC 은 단지 교육용으로 사용하다가 이제 어디서 쓰는지 모르는 언어가 되었지만

기본적인 구조가 다음과 같습니다.
10 rem Basic Language
20 print "Good Morning"
30 goto 20

이것은 영원히 "Good Morning" 을 출력합니다.
10 라인은 rem -> 주석입니다.
20 "Good Morning" 을 출력합니다.
30 goto 20 => 20 번으로 가라는 뜻입니다.

어째서 영원히 "Good Morning" 을 출력할까?
이것은 모든 프로그램은 10-> 20-> 30 -> 순차적으로 흐르도록 되어 있습니다.
최근에는 EVENT 함수가 주를 이루어 순차적이 아니라 생각할지 모르지만
그것도 커널에서 순차적으로 명령을 처리합니다.
즉 위 프로그램은 10 -> 20-> 30-> 20->30-> 20->30-> ... 전원이 꺼질때까지 ...

프로그램의 모든것은 순서를 가지고 있습니다.
이것을 이해한다면 배우기도 편해지고 새로운 프로그램을 만들기도 쉬어 집니다.

2018년 7월 12일 목요일

2018-07-13 AI를 위한 컴파일러 개발(2)

백승기의 2018-07-13 AI를 위한 컴파일러 개발(2)

이번에는 실행과에 대한 설명을 먼저 합니다.
1.시행했을때 컴파일하고 선언하지 않았지만 소스속에서 변수라 예상되는 항목을 찾아내어 변수로 만들고 이름을 등록하고 초기화 해줍니다.2. 실행과정속에서 변수를 사용하는 코드를 분석에서 변경되는 값을 수정해줍니다.3. 이번 컴파일러의 변수는 수치,문자열 속성 구분따위 없앴습니다. (제 맘대로이니까요)4. 마지막에 최종 결과 값이 보입니다. (참고로 A+B의 덧셈연산을 수행한 최종 결과도 확인됩니다.)* 다음은 어디까지 할까요 역시 제 맘대로 입니다.

다음은 스크립트소스와 결과 입니다.

스크립트소스 원본: 개발중인 컴파일러가 이걸 컴파일합니다.// Comfile Code 
g_psr.fnLineSplit( 
"function main;" 
" A=123;" 
" B='NAME';" 
" pr 'B=$01',B;" 
" B=1000;" 
" C=A+B;" 
" pr '$02+$01=$03',A,B,C;" 
" call sub;" 
"end;" 
"" 
"function sub;" 
" pr '-sub function-';" 
"end;" 
); 
// Run Code 
g_psr.fnRunSplit();



다음은 실행결과 입니다.

2018년 7월 11일 수요일

2018-07-11 AI를 위한 컴파일러 개발(1)

2018-07-11 AI를 위한 컴파일러 개발(1)
이제 새로 스크립트 컴파일러를 개발중에 있습니다.다음소스코드는 원본 스크립트 코드 입니다.

// Comfile Code -컴파일단계
g_psr.fnLineSplit( 
"function main;" 
" A=123;" 
" B='NAME';" 
" pr 'B=$01',B;" 
" B=1000;" 
" C=A+B;" 
" pr '$02+$01=$03',A,B,C;" 
" call sub;" 
"end;" 
"" 
"function sub;" 
" pr '-sub function-';" 
"end;" 
); 
// Run Code  - 실행단계
g_psr.fnRunSplit();* 개발단계에서 이전에 한번 실행했던 방식에서 이제 컴파일단계와 실행단계로 구분합니다.실행단계에서의 결과물은 다음과 같습니다.

//결과 는 실행소스를 두가지로 구분하고 처리합니다.1. 하나는 소스 그룹이고 2. 두번째는 변수 그룹입니다.* 이제는 실행코드를 실제 실행되도록 작성할 겁니다.



2018년 7월 5일 목요일

2018-07-06 AI를 위한 직관적 컴파일러 준비

2018 - 07 - 06 AI를 위한 직관적 컴파일러 준비

지금까지 준비했던 스크립트 파일"struct one1 begin;" 
"int A=111,B=222,C=333;"    // 정수:초기화 -> to int array 
"chr D:40='aaa',E:32;" // 문자열:길이 -> to 크기를 지정함 <- 추가 
"int A=111,B=222,C=333;"    // 정수:초기화 -> to int array 
"str D1='ab cd',E1='';"      // 문자열:길이 -> to 가변 미구현 
"num F=11.1,G=12.12;" // 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 
"putln one1.A,one1.B,one1.C;" // like prinf 
"putln A = one1.A;" // like prinf 
"putln B = one1.B;" // like prinf 
"putln C = one1.C;" // like prinf 
"end;" 
 ---- 이것은 경험으로 남겨둡니다 ---구조체 및 실행문을 만들고 실행하는 코드를 만들었습니다. 왠지 코드가 제가 사용하기 복잡해서  계산 및 AI 스런 컴파일러로 재구성해야 할듯 합니다.
그래서 코드를 다음과 같이  구조체 및 변수 선언을 없애고 함수문만사용하는 형태로 코드를 다시 작성하고 있습니다.일종의 시행착오를 수정하지만 결코 느려지는 것은 아닙니다.어짜피 제가 쓰기 편한 스크립트 실행코드를 개발하는 것입니다.
별써 시작하고 있습니다.( 아래 컴파일 중 코드 )--> 새로운 형식의 직관적 코드
"function main;"
" A=123;"
" B='NAME';"
" pr '$02=$01',A,B;"
"end;" 

"function sub;"
"end;" 



2018년 7월 2일 월요일

[한이터백승기] AI준비단계 - 마지막(6)

이번것으로 컴파일러 준비단계는 마지막입니다.
프로그램은 소스코드를 메모리로 읽고 번역하고 실행하는 것으로 이어졌습니다.
실행대상은 변수구조체 선언문과 간단한 실행문을 처리하는 것으로 마무리됩니다.
1. 변수는 구조체만 정의 하였습니다.
    => 이유는 대표명이 있는 구조체가 분석하기 쉽습니다.
2. 실행코드는 간단한 연산문 덧셈과 할당 뿐입니다.
   => 사실은 사칙연산은 다 됩니다. 
뜻밖이지만 다중계산도 될지도 모릅니다.
여기서 마무리 짖는 것은 다음에 해야할 내용이 문장 및 구조 분석입니다.
물론  한글문장 분석은 좀더 나중에 할것입니다. 
지금은 좀더 고도의 산술식만 처리하는 스크립트 코드를 번역하고 실행하는 프로그램에 집중할것입니다.
=> 프로그램은 남이 한것을 가져다 자기이름으로 바꾸는 것은 쉽지만 , 
자기 스스로 프로그램을 만드는 것은 오랜경험없이 쉽게 만든다는것은 전부 거짓말입니다.
=> 이 프로그램은 제가 지금 몸이 아파 병원신세를 지기직전 상태로 요양중에 매일 잠깐동안만  작성하고 있는 것입니다. ( 1~2시간 정도 )
=> 한국에서는 이런 초급수준의 컴파일러도 만들수 없을 것입니다. 
( 연구소도 못할 것이고  대학생들은 가능할듯 합니다. => 빨리빨리 문화의 피해입니다. )

다음은 스크립트 소스코드 입니다.
  ==> [ 스크립트 컴파일러 소스코드는 공개하지 않을 예정입니다. ]

gRTN.demo(""
"struct one1 begin;"
"int A=111,B=222,C=333;"    // 정수:초기화 -> to int array
"chr D:40='aaa',E:32;" // 문자열:길이 -> to 크기를 지정함 <- 추가
"int A=111,B=222,C=333;"    // 정수:초기화 -> to int array
"str D1='ab cd',E1='';"      // 문자열:길이 -> to 가변 미구현
"num F=11.1,G=12.12;" // 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
"putln one1.A,one1.B,one1.C;" // like prinf

"putln A = one1.A;" // like prinf
"putln B = one1.B;" // like prinf
"putln C = one1.C;" // like prinf
"end;"
);