2017-02-11 5 views
3

으로 ASCII 코드를 얻기 문자의 ASCII의 수 (key 단어를 사용 을 눌러 스택에 넣어 것과 같은 수) 스택에 넣고.Gforth에 <code>'a'</code> 입력시 Gforth

' ' (공백)과 같이 작동하지 않습니다. 대신 :

' ' ok 
.s <1> 34384939008 ok 

숫자는 32 여야합니다.이 동작을 설명하는 내용은 무엇입니까? 그리고 그것에 대해 수행 할 수있는 것 - 수동으로 스택에 ' ' (공백)에 해당하는 ASCII 번호를 넣는 것 외에?

답변

7

'a' 구문은 Forth에서 상당히 새로워졌습니다. 이것은 모든 것을 공백으로 구분 된 토큰으로 파싱하는 전통적인 구문의 확장 위에 추가되었습니다. 따라서 'a'은 하나의 원자 토큰이며, 문자 리터럴로 구문 분석됩니다.

이제 ' '은 공백 문자를 포함하고 있기 때문에 원자 토큰이 아닙니다. 오히려, 그것은 두 개의 ' 토큰으로 분석됩니다. '은 Forth 단어 ("tick"이라고 함)이기 때문에 실제로는 완벽하게 유효한 코드입니다. 귀하의 예에서는 첫 번째 틱이 두 번째 틱에서 작동합니다. 결과는 34384939008이고 '의 xt입니다.

대신 무엇을해야합니까? 문자의 ASCII 코드를 가져 오는 일반적인 단어는 CHAR 또는 [CHAR]입니다. 첫 번째는 해석 모드에서 작동하고 두 번째 모드는 컴파일 모드에서 작동합니다. BUT 공백 문자의 특별한 경우에는 작동하지 않습니다. 왜냐하면 다시 공백 문자가 모두 파싱되기 때문입니다.

그러나 ASCII 코드 공간 문자 인 BL을 푸시하는 다른 단어가 있습니다.

+0

LOL, 진드기도 난해한 단어가 아닙니다. 당혹 스럽네요 ;-) 방금 FORTH에서 시작해서 그걸 놓쳤습니다. –

+0

한가지 질문 : 런타임과 컴파일 모드에서 두 가지 버전'char'와'[char]'가있는 이유는 무엇일까요? –

+2

해석 된 코드에서'CHAR' 만 의미가 있습니다. 그러나'CHAR'과'[CHAR]'모두 컴파일 된 코드에서 유용 할 수 있습니다. '[CHAR]'는 컴파일 타임에 작동하므로 프로그램의 다음 단어를 구문 분석합니다. 'CHAR'는 런타임에 작동하기 때문에 프로그램 텍스트에서는 작동하지 않지만 나중에 입력 스트림에서 작동합니다. 예 : 즉각적인 단어. –