v5.0을만듬.

추가사항은 입력출력 다양하게 만들고, 기타 성능 향상을 위한 세부 기능이 추가됨.


그리고 코딩 할 수 있는 컴파일러를 만듬.

근데 테스트를 정말 간단한 것만 해봤고 자세히는 안 해봐서 오류 생길 가능성 매우 높음.

예를 들어 A - B로 코딩했는데 결과가 B - A로 나온다던지..

근데 컴파일 에러 뜨는거는 왠만하면 정확할거임.


<문법>


그냥 쓰다 보면 컴파일 에러가 나기 때문에 그거 보면서 하면 됨.

맨 처음에 상수가 못옴. 그래서

3 + [5] (X)

[3] + 3 (O)

[5] + 3 + 2 (O)


공백과 엔터는 무시함.


3 - 숫자 3

[3] - 메모리 3번지에 있는 숫자

[[3]] - 메모리 (메모리 3번지에 있는 숫자) 번지에 있는 숫자

...


= - 대입 연산자


~ - 연산하는 연산자 앞에 붙이면 항 두 개의 위치가 바뀜

3 / 5 는 5 ~/ 3 과 같음


연산하는 연산자 : +, -, *, /, %, ^^(제곱), <<, >>, &, |, ^(XOR), <, ==, >, <=, >=, != 총 17개


순서는 무조건 왼쪽부터 오른쪽으로.

괄호 그런거 못함.


1줄이 명령어 1개로 일대일대응됨.

jump 혹은 jmp 혹은 j : 뒤의 수만큼 앞으로 점프.

jump명령어가 아닌 보통 경우는 바로 다음(+1) 명령어를 실행하는에 여기서 jump N 하면 1 + N 뒤의 명령어를 실행함.

jump -1 하면 자기한테 점프해서 탈출못하는 무한루프걸림.

print 0 혹은 prt 0 혹은 p 0 : 0번 단자로 뒤의 값을 출력 단자는 0~8까지

get 1 [N] 혹은 g 1 [N] : 1번 단자로 들어오는 입력을 읽어서 N번째 메모리에 넣음.. 딱 그 순간의 입력을 읽는거임. 따라서 0이 될 수 있음.

recieve 1 [N] 혹은 rcv 1 [N] 혹은 r 1 [N] : 1번 단자에 입력이 들어올 때까지 대기하다가 입력이 들어오면 그걸 읽어서 N번쨰 메모리에 넣음.

입력은 0이 될 수 없음. 값이 들어올 대까지 계속 대기하는거임.

get과 recieve는 1~16번 단자가 있음.


end 혹은 e : 프로그램 종료

wait X 혹은 w : X틱만큼 대기

alarm X 혹은 arm 혹은 a : X번쨰 알람 냄

sound X 혹은 snd X 혹은 s X : X번째 소리 냄


맨 앞에 i를 넣으면 전에 입력한 커맨드랑 동시에 실행됨.

대신 동시 실행이 안전하게 가능한 명령어만 i 기능이 됨. (점프 상수, 프린트 상수, 알람, 사운드)


<예제코드>

는 유튜브에 있음

대충 되는 명령어들 개별적으로 적자면


[4] = [[[5] + 6] + + + 3]

jump [5] < 9 * -10

alarm 3

wait 10

i alarm 5

[4 + 7] = 3

print 1 [4] + 7

get 9 [5]


등등..



<사용방법>

1. 컴파일러를 실행해서 코드를 적음

2. * 를 입력해서 문자열 뽑음

3. 문자열 압축

4. 앞에 0을 붙여서 팩토리오에 적용

5. 알맞은 위치에 설치하고 위의 실행버튼 누름


<cpu 이상해졌을 때 대처법>

맨 위에 일정신호조합기 2개가 있는데 그중에 오른쪽 거에서 쭉 아래쪽으로 내려가면

자기를 되먹임하고 점 신호를 기록하고 초록 선이 엄청 많이 연결된 비교 조합기가 있음.

그거의 되적임 신호를 끊었다가 다시 설치한 뒤

다시 맨 위의 일정신호조합기중 왼쪽인 램 클리너를 껐다키면 램이 초기화됨.



<실행영상>

https://youtu.be/gjg_hkBiRRg

<cpu 블프>

https://factorioprints.com/view/-MYA1CJMThSVq3-Ci9TB

<컴파일러>

https://blog.naver.com/mkkim0612/222308881455