개발중인 스크립트 언어에서 비교문은 산술식과 결합된다.결과를 만드는 프로그램은 이미 완료된 상태지만 아직 IF 의 결과에 따른 처리문 은 이제 개발 할 예정이다. 다양한 많은 프로그램의 결과는 간단할지도 모르지만 숨겨진 과정은 어마어마 하다.(단순히 남의 코드를 복사하는 사람은 당연히 그 결과 이상을 개발 할수 없다. 이유는 결과이외엔 아는 것이 없기때문이다.)
이번에는 실행과에 대한 설명을 먼저 합니다. 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(); 다음은 실행결과 입니다.
지금까지 준비했던 스크립트 파일"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;"
이번것으로 컴파일러 준비단계는 마지막입니다. 프로그램은 소스코드를 메모리로 읽고 번역하고 실행하는 것으로 이어졌습니다. 실행대상은 변수구조체 선언문과 간단한 실행문을 처리하는 것으로 마무리됩니다. 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;" );