스택 기반 프로그래밍 언어를 구현하여 컴퓨터 프로그래밍 지식을 확장하는 데 관심이 있습니다. "pushint 1
"과 같은 함수를 사용하여 스택의 맨 위에 값 1을 가진 정수를 전달하고 "L01: jump L01:
"과 같은 레이블을 통해 흐름 제어를 수행 할 계획이므로 어디서부터 시작할지 조언을 구합니다.간단한 스택 기반 프로그래밍 언어 구현 방법
지금까지 나는 (IDEOne에 연결하려고했지만) 내 언어가 작동하도록하려는 C# 구현을 만들었지 만 매우 복잡하고 최적화가 필요합니다. 입력을 XML로 변환 한 다음 구문 분석합니다. 내 목표는 더 낮은 수준의 언어 (아마도 C/C++)로 가고 있지만 내 문제는 다양한 데이터 유형을 보유 할 수 있고 고정 크기가 아닌 스택을 구현하는 것입니다.
결국 배열 및 함수도 구현하고 싶습니다. 또한, 나는 더 나은 Lexer를 가질 필요가 있다고 생각하며, 파싱 트리가 그러한 단순한 언어에 좋은 아이디어인지 궁금해합니다.
아무런 조언이나 비판을 환영하며, 아직 프로그래밍에 익숙하지 않은 것으로 간주하십시오. (최근 AP CompSci I을 완료했습니다.) 또한 오픈 소스 스택 기반 언어에 대한 링크도 환영합니다. 여기
내가 컴파일/시도하고 해석하고자하는 기본 프로그램입니다 (여기서[this is a comment]
) :
[Hello World!]
pushchar '\n'
pushstring "Hello World!"
print
[Count to 5 and then count down!]
pushint 1
setlocal 0
L01:
pushchar '\n'
getlocal 0
print [print x + '\n']
getlocal 0
increment
setlocal 0 [x = x + 1]
pushint 5
getlocal 0
lessthan [x < 5]
iftrue L01
L02:
pushchar '\n'
getlocal 0
print [print x + '\n']
getlocal 0
decrement
setlocal 0 [x = x - 1]
pushint 0
getlocal 0
greaterthan [x > 0]
iftrue L02
는 예상 출력은 다음과 같습니다
Hello World!
1
2
3
4
5
4
3
2
1
새 프로그래밍 언어의 구문은 [tag : REBOL] 프로그래밍 언어의 구문과 매우 유사합니다. –
@AndersonGreen이 구문은 실제로 Adobe ActionScript Virtual Machine 2 (AVM2)의 opcode를 기반으로합니다. Rebol은 재미있어 보입니다! – Wingpad