본 오토마타는 상태머신임. state machine

https://ko.wikipedia.org/wiki/%EC%9C%A0%ED%95%9C_%EC%83%81%ED%83%9C_%EA%B8%B0%EA%B3%84

따로 그림은 안 그림.

case @state when :none when :c when :v when :lv when :cc when :vv when :lvv when :lvt when :lvvt when :lvtt when :lvvtt end

총 11개 상태가 있음.

none 은 아무 것도 입력되지 않은 상태임. 초기값임.

c 는 자음 입력했을 때 상태, 우리가 처음 자음을 입력하면 이 자음이 초성에 쓰이는 자음인지 종성에 쓰이는 자음인지 모름. 이 때 화면에 보여주는 자음은 유니코드에 정의된 호환성 자모를 보여주는 거임. 자판으로 키 하나 또는 쉬트프 + 키 하나로 칠 수 있는 자음을 여기서는 c 라고 함. 각각의 ㅂ,ㅃ,ㄷ,ㄸ,ㄱ,ㄲ ... 들이 c 상태임.
v 는 모음 입력했을 때 상태, ㅐㅖㅔㅠㅜㅡ... 들이 v 상태임. 자판으로 키 하나 또는 쉬트프 + 키 하나로 칠 수 있는 모음을 여기서는 v 라고 함
lv 는  가

cc 는 ㄳ, ㅀ ... cc_rules 참고

vv 는 ㅘ ㅙ.. . vv_rules 참고

lvv 는 과 놔...

lvt 는 공...

lvvt 는 괄, 괌,괠...

lvtt 는 곪, 듦...

lvvtt 는 괆, 됢...


위에 c 는 consonant 을 의미함. 여기서는 ㄲ(R) ㄸ(E) ㅆ(T) 이런것도 c 라고 간주했음. 알파벳 1개로 만드는 단자음/쌍자음.

cc 는 (rt) 이런 것들을 의미함. 알파벳 2개로 만드는 쌍자음

v 는 vowel 모음. 알파벳 1개로 만드는 단모음/쌍모음

vv 는 알파벳 2개로 만드는 쌍모음

t 는 초성(받침)

tt 는 초성(쌍자음 받침)


c 로 표현하면 아래처럼 됨

typedef enum { STATE_NONE, STATE_C, STATE_V, STATE_LV, STATE_CC, STATE_VV, STATE_LVV, STATE_LVT, STATE_LVVT, STATE_LVTT, STATE_LVVTT } TianKoreanComposeState; switch (korean->state) { case STATE_NONE: break; case STATE_C: break; case STATE_V: break; case STATE_LV: break; case STATE_CC: break; case STATE_VV: break; case STATE_LVV: break; case STATE_LVT: break; case STATE_LVVT: break; case STATE_LVTT: break; case STATE_LVVTT: break; }