WAM 디버거
WAM 디버거
어떤 경우에는 WAM 데이터 구조에 접근하는 것이 유용해요. 이 하위 디버거는 사용자가 WAM의 어떤 스택이나 레지스터의 내용을 검사/수정할 수 있게 해줘요.
본문
어떤 경우에는 WAM 데이터 구조에 접근하는 것이 유용해요. 이 하위 디버거는 사용자가 WAM의 어떤 스택이나 레지스터의 내용을 검사/수정할 수 있게 해줘요. WAM 디버거는 내장 술어 wam_debug/0(5.3.1절) 또는 W 디버거 명령어(5.5절)로 호출돼요.
다음 표는 WAM 디버거의 특정 명령어를 보여줘요:
| 명령어 | 설명 |
|---|---|
| write A [N] | 주소 A에서 시작하는 N개의 항을 write/1(8.14.6절)로 쓰기 |
| data A [N] | 주소 A에서 시작하는 N개의 워드 표시 |
| modify A [N] | 주소 A에서 시작하는 N개의 워드 표시 및 수정 |
| where A | A에 해당하는 실제 주소 표시 |
| what RA | 실제 주소 RA에 해당하는 것 표시 |
| deref A | 주소 A에서 시작하는 역참조(dereferenced) 워드 표시 |
| envir [SA] | SA(또는 현재 것)에 위치한 환경의 내용 표시 |
| backtrack [SA] | SA(또는 현재 것)에 위치한 선택점의 내용 표시 |
| backtrack all | 모든 선택점 표시 |
| quit | WAM 디버거 종료 |
| help | 사용 가능한 명령어 요약 표시 |
위 표에서 다음 규약이 적용돼요:
[와]사이의 요소는 선택적이에요.- N은 선택적 정수(기본값 1).
- A는 WAM 주소이며 그 구문은
BANK_NAME[N], 즉 인덱스(기본값 0)가 뒤따를 수 있는 뱅크 이름이에요.BANK_NAME은 다음 중 하나예요:reg- WAM 일반 레지스터(스택 포인터, continuation 등).x- WAM X 레지스터(임시 변수, 즉 인자).y- WAM Y 레지스터(영구 변수).ab- 현재 선택점에 저장된 WAM X 레지스터.STACK_NAME- WAM 스택(STACK_NAME은local,global,trail,cstr중 하나).
- SA는 WAM 스택 주소, 즉
STACK_NAME[N](WAM 주소의 특수한 경우). - RA는 실제 주소이며 그 구문은 C 정수의 구문(특히
0x...표기 인식).
모호함이 없으면 명령어와 뱅크 이름의 앞 글자만 사용할 수 있어요. 또한 뱅크 이름의 인덱스를 둘러싸는 대괄호 []는 생략할 수 있어요. 예를 들어 다음 명령어(global 스택의 인덱스 3부터 25개의 연속 워드 내용 표시):
data global[3] 25
는 다음과 같이 축약할 수 있어요:
d g 3 25