์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

." Hello, world!"


1. ๊ฐœ์š”
1.1. ๋ช…์นญ
2. ์—ญ์‚ฌ3. ๋ฌธ๋ฒ•
3.1. ์‚ฌ์น™์—ฐ์‚ฐ3.2. ๋‹จ์–ด
3.2.1. ์ง€์—ญ๋ณ€์ˆ˜
3.3. ์ œ์–ด๋ฌธ
3.3.1. ์กฐ๊ฑด๋ฌธ
3.3.1.1. if ๋ฌธ3.3.1.2. case ๋ฌธ
3.3.2. ๋ฐ˜๋ณต๋ฌธ
3.3.2.1. begin ~ ๋ฌธ3.3.2.2. ํšŸ์ˆ˜ ๋ฐ˜๋ณต๋ฌธ
3.3.2.2.1. ?do ~ loop ๋ฌธ3.3.2.2.2. for ~ next ๋ฌธ
4. ๊ตฌํ˜„์ฒด
4.1. GForth4.2. SwiftForth, SwiftX4.3. pForth4.4. ๊ธฐํƒ€ ๊ตฌํ˜„์ฒด

1. ๊ฐœ์š”[ํŽธ์ง‘]

ํฌ์Šค ํ‘œ์ค€ ํ™ˆํŽ˜์ด์ง€

์ฐฐ์Šค ๋ฌด์–ด(Charles H. Moore)์— ์˜ํ•ด ๊ฐœ๋ฐœ๋œ ๋ช…๋ นํ˜•, ์ ˆ์ฐจ์  ์Šคํƒ ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋‹ค. ๋ฐ˜์˜(Reflective), ์—ฐ๊ฒฐ(Concatenative) ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์—๋„ ์†ํ•œ๋‹ค. ์ฃผ๋กœ ์ž„๋ฒ ๋””๋“œ ์žฅ์น˜๋ฅผ ์œ„ํ•ด์„œ ์“ฐ์—ฌ์ง€์ง€๋งŒ PC๋ฅผ ํƒ€๊ฒŸ์œผ๋กœ ํ•œ ํ”„๋กœ๊ทธ๋žจ๋„ ์ž‘์„ฑ๋œ๋‹ค.

ํฌ์Šค๋Š” ์Šคํƒ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์Šคํƒ์— ์Œ“์ด๋ฉฐ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋•Œ๋ฌธ์— ์ฝ”๋“œ ์ƒ์œผ๋กœ ๋ณด๋ฉด LISP์™€๋Š” ์ • ๋ฐ˜๋Œ€์ธ ์—ญํด๋ž€๋“œ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ์ˆ˜์‹์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.

1.1. ๋ช…์นญ[ํŽธ์ง‘]

Forth๋ผ๋Š” ์ด๋ฆ„์€ 4์„ธ๋Œ€(์ฐจ์„ธ๋Œ€) ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋œปํ•˜๋Š” FOURTH๋กœ ์ง€์–ด์กŒ์œผ๋‚˜, ๋‹น์‹œ ์‚ฌ์šฉํ•˜๋˜ ์‹œ์Šคํ…œ์ด ํŒŒ์ผ ์ด๋ฆ„์„ 5์ž๋กœ ์ œํ•œํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, FORTH๋กœ ์“ฐ๊ฒŒ ๋๋‹ค. ์˜›๋‚ ์—๋Š” ํฌ์Šค์˜ ์ด๋ฆ„์„ ์ „๋ถ€ ๋Œ€๋ฌธ์ž๋กœ ์ ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ๋„ FORTH๋กœ ์“ฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

2. ์—ญ์‚ฌ[ํŽธ์ง‘]

ํฌ์Šค๋Š” 1970๋…„๋Œ€ ์ด์ „๋ถ€ํ„ฐ ์ฐฐ์Šค ๋ฌด์–ด์— ์˜ํ•ด ๊ฐœ๋ฐœ๋˜๊ธฐ ์‹œ์ž‘ํ•˜์˜€๋‹ค.

๋„๋ฆฌ ๋ณด๊ธ‰๋œ ์ดํ›„, 1979๋…„๊ณผ 1983๋…„์— FORTH-79. FORTH-83์œผ๋กœ ์ •๋ฆฌ๋˜์—ˆ๊ณ , ์ด๋Š” 1994๋…„ ANSI์— ์˜ํ•ด ํ‘œ์ค€ํ™”๋˜์—ˆ๋‹ค.
ํฌ์Šค๋Š” ๊ฐ€๋ณ๊ณ  ๋‹จ์ˆœํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— 1980๋…„๋Œ€ ์ƒ๋‹นํ•œ ์ธ๊ธฐ๋ฅผ ๋Œ์—ˆ๋‹ค.

1987๋…„ KAIST์˜ ๋ณ€์ข…ํ™์€ '๋Š˜ํ’ˆ'์ด๋ผ๋Š” ํ•œ๊ตญ์–ด ํฌ์Šค๋ฅผ ๊ฐœ๋ฐœํ–ˆ๋‹ค. ํฌ์Šค์˜ ํ™•์žฅ์„ฑ์œผ๋กœ ๋‹จ์–ด๋ฅผ ํ•œ๊ตญ์–ด๋กœ ๋ฐ”๊ฟ” ๋งŒ๋“  ๊ฒƒ์ด๋‹ค. ์ด๋Š” ๋‹น์‹œ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์›จ์–ด, ๊ณผํ•™๋™์•„ ๋“ฑ์ง€์—๋„ ์†Œ๊ฐœ๋๋‹ค.

์ดํ›„ ํฌ์Šค์˜ ์Šคํƒ ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๋Š” ๊ฐœ๋…์€ Factor, Joy ์–ธ์–ด, ๊ทธ๋ฆฌ๊ณ  ํฌ์ŠคํŠธ์Šคํฌ๋ฆฝํŠธ์—๋„ ์˜ํ–ฅ์„ ์ฃผ์—ˆ๋‹ค.

3. ๋ฌธ๋ฒ•[ํŽธ์ง‘]

์ฃผ๋กœ ์“ฐ์ด๋Š” ๊ตฌํ˜„์ฒด์ธ GForth์˜ ๋งค๋‰ด์–ผ์—์„œ ์˜์–ด๋กœ ๋œ Forth ํŠœํ† ๋ฆฌ์–ผ์ด ์žˆ์–ด์„œ ํฌ์Šค์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž์„ธํ•œ ์„ค๋ช…์€ ์ด๊ณณ์—์„œ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. GForth์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๋“ค๋„ ํฌํ•จ๋˜์–ด์žˆ์œผ๋‚˜, ํ‘œ์ค€์„ ๊ฐ™์ด ๋ณ‘๊ธฐํ•ด๋‘๋ฏ€๋กœ ํฐ ๋ฌธ์ œ๋Š” ์—†๋‹ค.

3.1. ์‚ฌ์น™์—ฐ์‚ฐ[ํŽธ์ง‘]

ํฌ์Šค๋Š” ์—ญํด๋ž€๋“œ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ์‹์„ ๊ธฐ์ˆ ํ•œ๋‹ค. ๋‹จ์–ด๋“ค์€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.
'2 + 3 ร— 5'์˜ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์“ด๋‹ค. ์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ์ ์€ ์‹์—๋Š” ์‚ฌ์น™์—ฐ์‚ฐ์˜ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ณฑ์…ˆ์„ ๋จผ์ € ๊ณ„์‚ฐํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

2 3 5 * + .
  1. ์Šคํƒ์— ๊ฐ’์„ ์‚ฝ์ž…ํ•ด (2, 3, 5)์˜ ๊ฐ’์ด ์žˆ๋‹ค.
  2. ์—ฐ์‚ฐ์ž * ์— ์˜ํ•ด ์Šคํƒ์—๋Š” (2, 15)์˜ ๊ฐ’์ด ์žˆ๋‹ค.
  3. ์—ฐ์‚ฐ์ž + ์— ์˜ํ•ด ์Šคํƒ์—๋Š” (17)์˜ ๊ฐ’์ด ์žˆ๋‹ค.
  4. ๋ช…๋ น์–ด . ์— ์˜ํ•ด ์Šคํƒ์˜ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๊ฐ’ 17์ด ์ถœ๋ ฅ๋œ๋‹ค. ์Šคํƒ์—๋Š” ์•„๋ฌด ๊ฐ’๋„ ์—†๋‹ค.

'( 2 + 3 ) ร— 5'๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ, ํฌ์Šค๋Š” ์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ•์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ด„ํ˜ธ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค. ๊ณ„์‚ฐ์˜ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๊ฐ’์„ ์‚ฝ์ž…, ๊ณ„์‚ฐํ•˜๋ฉด ๋œ๋‹ค.

2 3 + 5 * .
  1. ์Šคํƒ์— ๊ฐ’์„ ์‚ฝ์ž…ํ•ด (2, 3)์˜ ๊ฐ’์ด ์žˆ๋‹ค.
  2. ์—ฐ์‚ฐ์ž + ์— ์˜ํ•ด ์Šคํƒ์—๋Š” (5)์˜ ๊ฐ’์ด ์žˆ๋‹ค.
  3. ์Šคํƒ์— ๊ฐ’์„ ์‚ฝ์ž…ํ•ด (5, 5)์˜ ๊ฐ’์ด ์žˆ๋‹ค.
  4. ์—ฐ์‚ฐ์ž * ์— ์˜ํ•ด ์Šคํƒ์—๋Š” (25)์˜ ๊ฐ’์ด ์žˆ๋‹ค.
  5. ๋ช…๋ น์–ด . ์— ์˜ํ•ด ์Šคํƒ์˜ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๊ฐ’ 25๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค. ์Šคํƒ์—๋Š” ์•„๋ฌด ๊ฐ’๋„ ์—†๋‹ค.

3.2. ๋‹จ์–ด[ํŽธ์ง‘]

ํฌ์Šค๋Š” ๋‹จ์–ด๋ฅผ ์ •์˜ํ•˜์—ฌ ๊ทธ ๋‹จ์–ด๊ฐ€ ๋ฌด์Šจ ํ–‰๋™์„ ํ•  ์ง€๋ฅผ ์ •ํ•œ๋‹ค. ์ด๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ์˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์“ฐ์ธ๋‹ค. ์ฐจ์ด์ ์€ ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ์˜ ํ•จ์ˆ˜๋Š” ์ž…๋ ฅ๋˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ถœ๋ ฅ๊ฐ’์ด ์กด์žฌํ•˜์ง€๋งŒ, ํฌ์Šค๋Š” ์Šคํƒ ๊ธฐ๋ฐ˜ ์–ธ์–ด์ด๊ธฐ์— ์ฝ”๋“œ์— ๊ธฐ์ˆ ํ•œ ๋งŒํผ์˜ ์Šคํƒ์„ ์†Œ๋น„ํ•˜๊ณ  ๊ฐ’์„ ์Šคํƒ์— ๋‚จ๊ธด๋‹ค. ํฌ์Šค๋Š” ์ด๋Ÿฌํ•œ ์Šคํƒ์˜ ๋ณ€ํ™”๋ฅผ ๋‹จ์–ด๋ฅผ ์ •์˜ํ•  ๋•Œ ์†Œ๊ด„ํ˜ธ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ฃผ์„์œผ๋กœ ์ ์–ด ๋†“๋Š”๋‹ค.

ํฌ์Šค์˜ ์žฅ์ ์€ ํ™•์žฅ์„ฑ์œผ๋กœ ์†๊ผฝํžˆ๋Š”๋ฐ, ๊ทธ ์ด์œ ๋Š” ๋‹จ์–ด๋ฅผ ์ •์˜ํ•จ์— ์žˆ์–ด์„œ ํฐ ์ œํ•œ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ธฐ์กด์˜ ๋‹จ์–ด๋ฅผ ๋‹ค์‹œ ์žฌ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์˜ˆ์ปจ๋Œ€ ์—ฐ์‚ฐ์ž + ๋ฅผ ๋‹ค๋ฅธ ์—ญํ• ์„ ํ•˜๊ฒŒ ๋งŒ๋“ค๊ฑฐ๋‚˜, '๋”ํ•˜๊ธฐ'๋ž€ ์ด๋ฆ„์˜ ์—ฐ์‚ฐ์ž๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด ๋”ํ•˜๊ธฐ์˜ ์—ญํ• ์„ ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ ํฌ์Šค๋Š” ๋‹จ์–ด์˜ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ณ„ํ•˜์ง€ ์•Š๋Š” ํŠน์ง•์ด ์žˆ๊ณ , ํฌ์Šค ์ž์ฒด๊ฐ€ ์•ž์„œ ์„ค๋ช…ํ–ˆ๋“ฏ ๊ณต๋ฐฑ์œผ๋กœ ๋‹จ์–ด๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์–ด ์ค‘๊ฐ„์—๋Š” ๊ณต๋ฐฑ์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋‹ค.


: addprint ( n1 n2 -- n1+n2 )
    + dup .
;

์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” ๋‘ ์ •์ˆ˜๋ฅผ ๋”ํ•˜๊ณ  ์ถœ๋ ฅํ•œ ๋’ค, ๋‹ค์‹œ ๊ทธ ๊ฐ’์„ ์Šคํƒ์— ๋‚จ๊ธฐ๋Š” ๋‹จ์–ด์ธ addprint๋ฅผ ์ •์˜ํ•œ๋‹ค. : (์ฝœ๋ก )์€ ๋‹จ์–ด๋ฅผ ์ •์˜ํ•˜๋Š” ๋‹จ์–ด์ด๋‹ค. ์„ธ๋ฏธ์ฝœ๋ก  ๋’ค์—๋Š” ๋‹จ์–ด์˜ ์ด๋ฆ„์„ ๊ธฐ์ˆ ํ•˜๊ณ , ; (์„ธ๋ฏธ์ฝœ๋ก )์ด ์˜ค๊ธฐ ์ „๊นŒ์ง€ ๋‹จ์–ด์˜ ํ–‰๋™์„ ๊ธฐ์ˆ ํ•œ๋‹ค.
  1. : ๋ฅผ ํ†ตํ•ด ๋‹จ์–ด๋ฅผ ์ •์˜ํ•˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.
  2. ๋‹จ์–ด์˜ ์ด๋ฆ„์€ addprint์ด๋‹ค.
  3. ์†Œ๊ด„ํ˜ธ๋ฅผ ํ†ตํ•ด ์Šคํƒ์˜ ๋ณ€ํ™”๋ฅผ ์ฃผ์„์œผ๋กœ ๊ธฐ์ˆ ํ•ด๋†“์•˜๋‹ค.
    1. -- ์•ž์€ ์†Œ๋น„ํ•  ๊ฐ’, ๋’ค๋Š” ๋‚ด๋†“์„ ๊ฐ’์ด๋‹ค.
    2. ๋‘ ์ •์ˆ˜ n1๊ณผ n2๋ฅผ ์†Œ๋น„ํ•  ๊ฒƒ์ž„์„ ์•Œ๋ ค์ค€๋‹ค.
    3. n1๊ณผ n2๋ฅผ ๋”ํ•œ ๊ฐ’์„ ๋‚ด๋†“์„ ๊ฒƒ์ž„์„ ์•Œ๋ ค์ค€๋‹ค.
  4. ๋‹จ์–ด๋Š” '+ dup .' ์˜ ํ–‰๋™์„ ์ทจํ•œ๋‹ค.
    1. + ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ์šฐ์„  ์Šคํƒ์˜ ๋‘ ๊ฐ’์„ ๋ฝ‘์•„ ๋”ํ•œ๋‹ค.
    2. dup ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์Šคํƒ์˜ ๋งจ ์œ„์— ์žˆ๋Š” ๊ฐ’, ์ฆ‰ ์•ž์—์„œ ๋”ํ•œ ๊ฐ’์„ ๋ณต์‚ฌํ•ด ์Šคํƒ์˜ ๋งจ ์œ„์— ์ถ”๊ฐ€ํ•œ๋‹ค.
    3. . ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์Šคํƒ์˜ ๋งจ ์œ„์— ์žˆ๋Š” ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค. ์Šคํƒ์—๋Š” ๋”ํ•œ ๊ฐ’์ด ์—ฌ์ „ํžˆ ๋‚จ์•˜๋‹ค.
  5. ; ๋ฅผ ํ†ตํ•ด ๋‹จ์–ด์˜ ์ •์˜๋ฅผ ๋งˆ์นœ๋‹ค.

์Šคํƒ ๋ณ€ํ™”์— ๋Œ€ํ•œ ์ฃผ์„์œผ๋กœ ์“ฐ์ด๋Š” ์†Œ๊ด„ํ˜ธ์—๋Š” ์ƒ๋‹นํžˆ ๊ตฌ์ฒด์ ์ธ ์ •๋ณด๋ฅผ ์ ์„ ์ˆ˜ ์žˆ๊ณ  ๊ทธ๊ฒƒ์€ ์–ด๋А ์ •๋„์˜ ํ˜•์‹์„ ๊ฐ–๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ์Šคํƒ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ์—†๋‹ค.

3.2.1. ์ง€์—ญ๋ณ€์ˆ˜[ํŽธ์ง‘]

๋‹จ์–ด์—์„œ ์‚ฌ์šฉํ•  ๊ฐ’์ด ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ์†Œ๋น„๋ฅผ ๊ฑฐ์น˜๋Š” ๊ฒฝ์šฐ์—, dup ๋“ฑ์˜ ์Šคํƒ ์กฐ์ž‘ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด ์Šคํƒ์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋ฒˆ๊ฑฐ๋กœ์šด ์ผ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋‹จ์–ด์—์„œ์˜ ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ์˜ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋น„์Šทํ•œ ์‚ฌ์šฉ๋ฒ•์ด๋‹ค.

์ด๋ฅผ ์ด์šฉํ•ด ์•ž์„œ ์ •์˜ํ•œ addprint๋ฅผ ๊ฐœ์กฐํ•ด๋ณธ๋‹ค.


: addprint2 { a b } ( n1 n2 -- n1+n2 )
    a .
    '+' emit space
    b .
    ." = "
    a b + dup .
;

  1. ์ค‘๊ด„ํ˜ธ ๋‚ด์— ๋“ค์–ด๊ฐ€์„œ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๋‹จ์–ด๋“ค์€ ์ง€์—ญ๋ณ€์ˆ˜๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.
    ์—ฌ๊ธฐ์„œ a๊ฐ€ ๋จผ์ € ๋“ค์–ด๊ฐ„ ๊ฐ’, b๊ฐ€ ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„ ๊ฐ’, ์ฆ‰ ์Šคํƒ์˜ ๋งจ ์œ„์— ์žˆ๋Š” ๊ฐ’์ด๋‹ค.
  2. a ๋กœ ์ง€์—ญ๋ณ€์ˆ˜ a์˜ ๊ฐ’์„ ์Šคํƒ์— ๋„ฃ๋Š”๋‹ค. ์ดํ›„ . ๋ช…๋ น์–ด๋กœ ์ถœ๋ ฅํ–ˆ๋‹ค. ์ดํ›„ b๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ถœ๋ ฅ๋œ๋‹ค.
  3. '+' ๋Š” ๋ฌธ์ž ๋ฆฌํ„ฐ๋Ÿด๋กœ ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์ž์˜ ์•„์Šคํ‚ค ์ฝ”๋“œ๊ฐ’์„ ์Šคํƒ์— ๋„ฃ์—ˆ๋‹ค.
    ์ดํ›„ emit ๋ช…๋ น์–ด๋กœ ๊ทธ ์ฝ”๋“œ์— ๋งž๋Š” ๋ฌธ์ž๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  4. space ๋ช…๋ น์–ด๋กœ ๊ณต๋ฐฑ ํ•˜๋‚˜๋ฅผ ์ถœ๋ ฅํ–ˆ๋‹ค.
  5. ." ๋ช…๋ น์–ด๋Š” ๊ณต๋ฐฑ ์ดํ›„ " (์Œ๋”ฐ์˜ดํ‘œ)๊นŒ์ง€ ์˜ฌ ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค.
    ๋”ฐ๋ผ์„œ "(a์˜ ๊ฐ’) + (b์˜ ๊ฐ’) = "์˜ ๋ฌธ์ž์—ด์ด ํ™”๋ฉด์— ์ถœ๋ ฅ๋œ๋‹ค.
  6. a b ๋กœ a์™€ b์˜ ๊ฐ’์„ ์Šคํƒ์— ๋„ฃ๊ณ , ์ด์ „์ฒ˜๋Ÿผ ๊ณ„์‚ฐํ•ด์„œ ์ถœ๋ ฅํ•œ๋‹ค.
    ์Šคํƒ์—๋Š” a์™€ b๋ฅผ ๋”ํ•œ ๊ฐ’์ด ๋‚จ๋Š”๋‹ค.

์˜ˆ์‹œ๋กœ ์ ์€ ์ฝ”๋“œ์— ๊ฐœํ–‰์ด ๋งŽ์ด ๋˜์–ด์žˆ๋‹ค. ๊ฐœํ–‰์—” ํŠน๋ณ„ํ•œ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ๋‹ค๋ฅธ ๊ณต๋ฐฑ๊ณผ ํ•˜๋Š” ์ผ์ด ๊ฐ™์ง€๋งŒ, ์ฝ”๋“œ๋ฅผ ๋ณด๊ธฐ ์‰ฝ๊ฒŒ ํ•ด ์ฃผ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ์‹ค์ œ๋กœ ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„๋กœ ์ด์–ด ์“ธ ์ˆ˜๋„ ์žˆ๋‹ค. ๊ฐ„๋‹จํ•œ ๋‹จ์–ด์˜ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ ‡๊ฒŒ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์„ ํ˜ธ๋œ๋‹ค.

3.3. ์ œ์–ด๋ฌธ[ํŽธ์ง‘]

ํฌ์Šค์—์„œ๋Š” ์ œ์–ด๋ฌธ์„ ๋‹จ์–ด ์ •์˜ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ œ์–ด๋ฌธ์˜ ์กฐ๊ฑด์œผ๋กœ๋Š” ์ •์ˆ˜ํ˜• ๊ฐ’์ด ์“ฐ์ด๋Š”๋ฐ, 0์€ ๊ฑฐ์ง“, 0์ด ์•„๋‹Œ ๊ฐ’์€ ์ฐธ์œผ๋กœ ์ทจ๊ธ‰๋œ๋‹ค. true ์™€ false ๋‹จ์–ด๋ฅผ ํ†ตํ•ด ์ฐธ๊ฐ’์„ ํ‘œํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

3.3.1. ์กฐ๊ฑด๋ฌธ[ํŽธ์ง‘]

3.3.1.1. if ๋ฌธ[ํŽธ์ง‘]
if, else, then ๋‹จ์–ด๋กœ ์กฐ๊ฑด ์‹คํ–‰์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. gforth์—์„  then ๋Œ€์‹  endif๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‘ ์ˆซ์ž ์ค‘ ํฐ ์ˆซ์ž๋งŒ์„ ๋‚จ๊ธฐ๋Š” ๋‹จ์–ด max๋ฅผ ๋งŒ๋“ค์–ด๋ณธ๋‹ค.

: max ( n1 n2 -- n )
    2dup
    < if
        drop
    else
        nip
    endif
;
  1. 2dup ๋ช…๋ น์–ด๊ฐ€ ์Šคํƒ์˜ ๋‘ ์›์†Œ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์ œํ•œ๋‹ค.
  2. < ๋ฅผ ํ†ตํ•ด ์Šคํƒ์˜ ์œ— ๊ฐ’์ด ๋” ํฌ๋ฉด true, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด false๊ฐ€ ์Šคํƒ์— ๋‚จ๋Š”๋‹ค.
  3. if ๋Š” ์Šคํƒ์—์„œ ๊ฐ’์„ ๋ฝ‘์•„ ์ฐธ์ผ ๋•Œ์™€ ๊ฑฐ์ง“์ผ ๋•Œ๋ฅผ ๊ฐ€๋ ค ์กฐ๊ฑด ์‹คํ–‰์„ ํ•œ๋‹ค.
    if ์ดํ›„ else๋‚˜ endif๊ฐ€ ์˜ค๊ธฐ ์ „๊นŒ์ง€์˜ ์ฝ”๋“œ๋Š” ์ฐธ์ด๋ฉด ์‹คํ–‰๋œ๋‹ค.
    ์ฐธ์ผ ๊ฒฝ์šฐ drop ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์Šคํƒ์˜ ๋งจ ์œ— ๊ฐ’์„ ๋ฒ„๋ฆฐ๋‹ค.
  4. else ์ดํ›„ endif๊ฐ€ ์˜ค๊ธฐ ์ „๊นŒ์ง€์˜ ์ฝ”๋“œ๋Š” ๊ฑฐ์ง“์ผ ๊ฒฝ์šฐ ์‹คํ–‰๋œ๋‹ค.
    ์ด๋•Œ else๋Š” ๊ผญ ์—†์–ด๋„ ๋œ๋‹ค. ๊ฑฐ์ง“์ผ ๊ฒฝ์šฐ nip ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์Šคํƒ์˜ ๋งจ ์œ„์—์„œ ๋ฐ”๋กœ ์•„๋žซ ๊ฐ’์„ ๋ฒ„๋ฆฐ๋‹ค.
  5. endif๋กœ ์กฐ๊ฑด๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค.
3.3.1.2. case ๋ฌธ[ํŽธ์ง‘]
๋‹ค๋ฅธ ์–ธ์–ด์—์„œ์˜ switch ~ case ๋ฌธ๊ณผ ์œ ์‚ฌํ•˜๋‹ค.

case
    1 of ." one" endof
    2 of ." two" endof
    3 of ." three" endof
    2 2 + of ." four" endof
    ." other number"
endcase

์œ„ ์ฝ”๋“œ๋Š” case ๋ฌธ์—์„œ ์Šคํƒ์—์„œ ๊ฐ’์„ ๋ฝ‘์•„ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์— ๋”ฐ๋ผ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

3.3.2. ๋ฐ˜๋ณต๋ฌธ[ํŽธ์ง‘]

3.3.2.1. begin ~ ๋ฌธ[ํŽธ์ง‘]
begin์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ์€ ๊ฐ„๋‹จํ•œ ๋ฐ˜๋ณต๋ฌธ์ด๋‹ค. C์–ธ์–ด๋‚˜ ๋‹ค๋ฅธ ๋น„์Šทํ•œ ์–ธ์–ด์—์„œ์˜ ๋ฌดํ•œ๋ฃจํ”„, while๋ฌธ, do-whlie๋ฌธ์— ํ•ด๋‹นํ•œ๋‹ค. begin ๋‹จ์–ด๋Š” ์ผ๋‹จ ๋Ÿฐํƒ€์ž„์—์„œ ๋งŒ๋‚˜๋ฉด ์•„๋ฌด ์ผ์„ ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ฃจํ”„๊ฐ€ ๋๋‚˜๋ฉด ์ ํ”„ํ•ด์„œ ๋˜๋Œ์•„์˜ฌ ์œ„์น˜๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.


0
begin
    dup . 1 +
again

begin ~ again ๋ฌธ์€ ๋ฌดํ•œ ๋ฃจํ”„์ด๋‹ค. ์ด ์ฝ”๋“œ๋Š” 0๋ถ€ํ„ฐ ์ˆซ์ž๋ฅผ ๊ณ„์† ์ฆ๊ฐ€์‹œ์ผœ ๋‚˜๊ฐ€๋ฉด์„œ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ์ด๋‹ค. 'Ctrl + C'๋ฅผ ํ‚ค๋ณด๋“œ๋กœ ๋ˆŒ๋Ÿฌ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ผ์œผ์ผœ ํƒˆ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.


0
begin
    dup . 1 +
    dup 10 >
until

์ด ์ฝ”๋“œ๋Š” 0๋ถ€ํ„ฐ 10๊นŒ์ง€ ์ถœ๋ ฅํ•œ๋‹ค. begin ~ until ๋ฌธ์€ until๋ฌธ์—์„œ ์กฐ๊ฑด์„ ํŒ๋‹จํ•˜์—ฌ ๊ฑฐ์ง“์ด๋ฉด ๋ฐ˜๋ณตํ•œ๋‹ค. ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ์˜ do-while๋ฌธ๊ณผ ๋น„์Šทํ•˜๋‹ค.


0
begin
    1 +
    dup 10 <
while
    dup .
repeat

์ด ์ฝ”๋“œ๋Š” 1๋ถ€ํ„ฐ 9๊นŒ์ง€ ์ถœ๋ ฅํ•œ๋‹ค. ์šฐ์„  begin๋ฌธ ์ดํ›„์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ ๋’ค์— while๋ฌธ์—์„œ ์กฐ๊ฑด์„ ํŒ๋‹จํ•˜์—ฌ ์ฐธ์ด๋ฉด repeat๊นŒ์ง€ ์‹คํ–‰ํ•˜๊ณ  ๋ฐ˜๋ณตํ•œ๋‹ค. while์—์„œ ๊ฑฐ์ง“์ผ ๊ฒฝ์šฐ repeat ์ดํ›„๋กœ ์ ํ”„ํ•œ๋‹ค. ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ์˜ while๋ฌธ๊ณผ ๋น„์Šทํ•˜๋‹ค.
3.3.2.2. ํšŸ์ˆ˜ ๋ฐ˜๋ณต๋ฌธ[ํŽธ์ง‘]
๋‹ค๋ฅธ ์–ธ์–ด์—์„œ์˜ for๋ฌธ๊ณผ ์œ ์‚ฌํ•˜๋‹ค. ํšŸ์ˆ˜ ๋ฐ˜๋ณต๋ฌธ์˜ ํŠน์ง•์œผ๋กœ๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์„ธ๋Š” ์ง€์—ญ๋ณ€์ˆ˜๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค๋Š” ์ ์ด๋‹ค. ๋‘˜๋Ÿฌ์‹ธ์ธ ์ˆœ์„œ๋Œ€๋กœ i, j, k์˜ ์„ธ ๊ฐ€์ง€ ์ง€์—ญ๋ณ€์ˆ˜๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
3.3.2.2.1. ?do ~ loop ๋ฌธ[ํŽธ์ง‘]
๋‹ค์Œ์€ 0๋ถ€ํ„ฐ 9๊นŒ์ง€ 10๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ์ด๋‹ค.

10 0 ?do
    i .
loop



GForth์—์„œ ์ˆซ์ž์˜ ์ฆ๊ฐ์„ ์กฐ์ ˆํ•˜๋ ค๋ฉด loop๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  +loop ๋‚˜ -loop ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์ด ๋‘˜์€ ์•ž์— ์˜ค๋Š” ๊ฐ’์„ ๋ฝ‘์œผ๋ฉด์„œ ๊ทธ ๊ฐ’๋งŒํผ ์ฆ๊ฐํ•˜๊ฒŒ ๋œ๋‹ค. +loop๋Š” ๋ถ€ํ˜ธ ์žˆ๋Š” ์ •์ˆ˜๊ฐ’, -loop๋Š” ๋ถ€ํ˜ธ ์—†๋Š” ์ •์ˆ˜๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉฐ '-1 +loop'์™€ '1 -loop'๋Š” ๋™์ผํ•œ ์ž‘๋™์„ ํ•œ๋‹ค.

๋‹ค์Œ์€ 10๋ถ€ํ„ฐ 1๊นŒ์ง€ 10๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ์ด๋‹ค.

0 10 -do
    i .
1 -loop


๋˜ํ•œ GForth์—์„œ๋Š” ?do ๋Œ€์‹ ์— +do ๋‚˜ -do ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ์จ, ๋ฐ˜๋ณต๋ฌธ์˜ ์‹œ์ž‘๊ณผ ๋์„ ์ž˜๋ชป ์ ์–ด ๋ฐฉํ–ฅ์ด ์ด์ƒํ•œ ๊ฒฝ์šฐ ๋ฐ˜๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

leave ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ๋„์ค‘์— ๋น ์ ธ๋‚˜์˜ค๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ์˜ break ์™€ ๊ฐ™๋‹ค.
unloop exit ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๊ฐ€์ง„๋‹ค.
3.3.2.2.2. for ~ next ๋ฌธ[ํŽธ์ง‘]
๋ณด๋‹ค ๊ฐ„๋‹จํ•œ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ๋Š” for ~ next ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์Œ์€ ์ด๋ฅผ ํ™œ์šฉํ•œ 10๋ถ€ํ„ฐ 0๊นŒ์ง€ 11๊ฐœ์˜ ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฐ˜๋ณต๋ฌธ์ด๋‹ค.

10 for
    i .
next

4. ๊ตฌํ˜„์ฒด[ํŽธ์ง‘]

4.1. GForth[ํŽธ์ง‘]

ํ™ˆํŽ˜์ด์ง€
GNU ํ”„๋กœ์ ํŠธ ํŽ˜์ด์ง€

GNU ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€๋กœ์„œ ๊ด€๋ฆฌ๋˜๋Š” ๊ตฌํ˜„์ฒด์ด๋‹ค. ํ”„๋ฆฌ์›จ์–ด, ์ž์œ  ์†Œํ”„ํŠธ์›จ์–ด์ด๋‹ค. 1992๋…„ ์ค‘๋ฐ˜ Bernd Paysan, Anton Ertl ๊ทธ๋ฆฌ๊ณ  Jens Wilke์— ์˜ํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค. GForth๋Š” ANSI/200x Forth ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜๋ฉฐ, ๋‹ค์–‘ํ•œ ํ”„๋กœ์„ธ์„œ์˜ ๋ฆฌ๋ˆ…์Šค, ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ์œˆ๋„, ๋งฅ OS, ์•ˆ๋“œ๋กœ์ด๋“œ, ๊ทธ๋ฆฌ๊ณ  GForth EC ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ์—์„œ ๊ตฌ๋™๋œ๋‹ค.

GForth๋Š” GCC๋กœ๋ถ€ํ„ฐ ์ง์ ‘์ ์œผ๋กœ ๋น ๋ฅด๊ฒŒ, ํ˜น์€ ๊ฐ„์ ‘์ ์œผ๋กœ ์Šค๋ ˆ๋“œ๋œ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•œ๋‹ค.

4.2. SwiftForth, SwiftX[ํŽธ์ง‘]

ํ™ˆํŽ˜์ด์ง€

Forth, Inc.๋กœ๋ถ€ํ„ฐ ๊ฐœ๋ฐœ๋˜๋Š”, ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ƒ์šฉ ๊ตฌํ˜„์ฒด์ด๋‹ค.

SwiftForth๋Š” 32๋น„ํŠธ x86 ํ˜ธํ™˜ CPU์—์„œ ๋ฆฌ๋ˆ…์Šค, ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ์œˆ๋„, ๋งฅ OS์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ IDE๊ฐ€ ์ œ๊ณต, ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋””๋ฒ„๊น… ํˆด๋กœ ์—ญ ์–ด์…ˆ๋ธ”๋Ÿฌ, ์—ญ ์ปดํŒŒ์ผ๋Ÿฌ, ๋‹จ๊ณ„๋ณ„ ๋””๋ฒ„๊ฑฐ๊ฐ€ ํฌํ•จ๋œ๋‹ค.

SwiftX๋Š” ARM์„ ๋น„๋กฏํ•œ ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ์„ ํƒ€๊ฒŸ์œผ๋กœ ํ•œ ๊ตฌํ˜„์ฒด์ด๋‹ค.

4.3. pForth[ํŽธ์ง‘]

ํ™ˆํŽ˜์ด์ง€
Github
Phil Burk์— ์˜ํ•ด C๋กœ ์“ฐ์—ฌ์ง„ ์˜คํ”ˆ ์†Œ์Šค ๊ตฌํ˜„์ฒด์ด๋ฉฐ, ์ด์‹์„ฑ์ด ํŠน์ง•์ด๋‹ค. ๋ฆฌ๋ˆ…์Šค, ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ์œˆ๋„, ๋งฅ OS์™€ ๋งŽ์€ ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

4.4. ๊ธฐํƒ€ ๊ตฌํ˜„์ฒด[ํŽธ์ง‘]

  • SP-Forth: ๋Ÿฌ์‹œ์•„์—์„œ ๊ฐœ๋ฐœ๋œ ๊ตฌํ˜„์ฒด.
  • Mecrisp MSP430๋ฅผ ์œ„ํ•œ ๊ตฌํ˜„์ฒด.
  • VFX Forth: ๊ณ ์†์˜ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ตฌํ˜„์ฒด.