Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.ArrayList;
- public class CJIAutomata {
- int transTable[][][]={{//초성 테이블
- {1,2,3,4,5,6,7},{8,-1,-1,-1,-1,-1,-1},//1번입력(0-1)
- {-1,9,-1,-1,-1,-1,-1},{-1,-1,10,-1,-1,-1,-1}, //2번 입력(2-3)
- {-1,-1,-1,11,-1,-1,-1},{-1,-1,-1,-1,12,-1,-1},//2번입력(4-5)
- {-1,-1,-1,-1,-1,13,-1},{-1,-1,-1,-1,-1,-1,14},//2번입력(6-7)
- {15,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//3번8-9
- {-1,-1,16,-1,-1,-1,-1},{-1,-1,-1,17,-1,-1,-1},//3번10-11
- {-1,-1,-1,-1,18,-1,-1},{-1,-1,-1,-1,-1,19,-1},//3번12-13
- {-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//4번14-15
- {-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//4번16-17
- {-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1} //4번18-19
- },
- {//중성 테이블
- {2,3,1}, {5,4,-1}, {-1,6,-1}, {9,7,8},//0~3
- {10,11,-1},{-1,-1,-1},{13,12,-1},{15,-1,14},{16,-1,-1},{24,-1,-1},//4~9
- {-1,-1,-1},{18,-1,-1},{19,-1,-1},{-1,-1,-1},{-1,-1,-1},{20,-1,-1},{-1,21,-1},//10~16
- {-1,-1,-1},{22,-1,-1},{-1,-1,-1},{-1,-1,-1},{23,-1,-1},//17~21
- {-1,-1,-1},{-1,-1,-1}, {-1,-1,-1}//22~24} ;
- },
- {//종성 테이블.
- {1,2,3,4,5,6,7},{8,-1,-1,-1,20,-1,-1},//1번입력(0-1)
- {-1,9,-1,-1,21,22,-1},{-1,-1,10,-1,-1,-1,-1}, //2번 입력(2-3)
- {-1,-1,-1,11,30,-1,-1},{-1,-1,-1,-1,12,-1,-1},//2번입력(4-5)
- {-1,-1,-1,-1,-1,13,-1},{-1,-1,-1,-1,-1,-1,14},//2번입력(6-7)
- {15,-1,-1,-1,-1,-1,-1},{23,-1,25,26,24,-1,27},//3번(8-9)
- {-1,-1,16,-1,-1,-1,-1},{-1,-1,-1,17,-1,-1,-1},//3번(10-11)
- {-1,-1,-1,-1,18,-1,-1},{-1,-1,-1,-1,-1,19,-1},//3번(12-13)
- {-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//4번(14-15)
- {-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//4번(16-17)
- {-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//4번(18-19)
- {-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//4번(20-21)
- {-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//4번(22-23)
- {-1,-1,-1,-1,28,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//5번(24-25)
- {-1,-1,-1,29,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//5번(26-27)
- {-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//5번(28-29)
- {-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1} //5번(30-31)
- },
- };
- char choTable[] =
- {' ', 'ㄱ', 'ㄴ', 'ㄷ', 'ㅂ', 'ㅅ', 'ㅈ', 'ㅇ', 'ㅋ', 'ㄹ',
- 'ㅌ', 'ㅍ', 'ㅎ', 'ㅊ', 'ㅁ', 'ㄲ', 'ㄸ', 'ㅃ', 'ㅆ', 'ㅉ'}; // 초성 20개
- char jungTable[] =
- {' ', 'ㅡ', 'ㅣ', 'ㅏ', 'ㅜ', 'ㅢ', 'ㅏ', 'ㅑ', 'ㅗ', 'ㅓ',
- 'ㅟ', 'ㅠ', 'ㅑ', 'ㅐ', 'ㅛ', 'ㅕ', 'ㅚ', ' ', 'ㅝ', 'ㅒ',
- 'ㅖ', 'ㅘ', 'ㅞ', 'ㅙ', 'ㅔ'}; // 중성 24개
- char jongTable[] =
- {' ', 'ㄱ', 'ㄴ', 'ㄷ', 'ㅂ', 'ㅅ', 'ㅈ', 'ㅇ', //1~7
- 'ㅋ', 'ㄹ', 'ㅌ', 'ㅍ', 'ㅎ', 'ㅈ', 'ㅁ', 'ㄲ', 'ㄸ', 'ㅃ', 'ㅆ', 'ㅉ', //8~19
- 'ㄳ', 'ㄶ', 'ㄵ', 'ㄺ', 'ㄽ', 'ㄾ', 'ㄼ', 'ㄻ', 'ㅀ', 'ㄿ', 'ㅄ'}; //20~30 // 종성 30개
- char chTable[][] = {choTable, jungTable, jongTable};
- static final int CHO = 0;
- static final int JUNG = 1;
- static final int JONG = 2;
- static final int ERROR_STATE = -1;
- String QAutoName[] = {"초성", "중성", "종성"};
- int Q=0, n=0;
- int qs[] = {0, 0, 0};
- char errorLetter = 'X';
- int move(int Q, int q, int num) {
- if(num==0) num = 10;
- if (num > 3) num -= 4;
- else num--;
- // if (Q == JONG) {
- // qJongs[0][nJong] = q;
- // qJongs[1][nJong++] = num;
- // }
- MainFrame.GetInstance().appendLog(String.format("MOVE %s : d(%d, %d) = ", QAutoName[Q], q, num));
- q = transTable[Q][q][num];
- MainFrame.GetInstance().appendLog(String.format("%d%n", q));
- return q;
- }
- void reset()
- {
- Q = CHO;
- qs[0] = qs[1] = qs[2] = 0;
- errorLetter = 'X';
- }
- ArrayList<Character> inputSeq = new ArrayList<>();
- char getStateSymbol(int Q)
- {
- return chTable[Q][qs[Q]];
- }
- char getCurrentLetter() {
- inputSeq.clear();
- for (int i = CHO; i <= Q; i++) {
- inputSeq.add(getStateSymbol(i));
- }
- char letter = HUtil.ArrTOChar(inputSeq);
- MainFrame.GetInstance().appendLog(String.format("\t\tCurrent Letter : %c (%s)%n", letter, inputSeq));
- return letter;
- }
- char finishLetter() {
- char letter = getCurrentLetter();
- reset();
- return letter;
- }
- boolean isMoum(int n) {
- if (n >= 1 && n <= 3) return true;
- return false;
- }
- /*
- * boolean next 함수 부분이 수정한 부분입니다.
- * 단, 자동으로 다음글자로의 전환은 생각하기 어려워서 구현하지 못하였습니다.
- * 한글을 입력하고 한글 입력이 끝났을 경우 * 혹은 # 을 입력하면 다음 한글로 넘어갑니다.
- */
- boolean next(int num){
- int q = qs[Q];
- boolean result = false;
- boolean bMoum = isMoum(num);
- if (Q == CHO && bMoum) {
- Q = JUNG;
- q = 0;
- result = false;
- }
- else if (Q == JUNG && !bMoum) {
- Q = JONG;
- q = 0;
- result = false;
- }
- else if (Q == JONG && bMoum) {
- Q = CHO;
- q = 0;
- finishLetter();
- result = true;
- }
- qs[Q] = move(Q, q, num); // true면 새 글자로 추가
- char faces[] = {' ', 'ㅣ', '.', 'ㅡ', 'ㄱ', 'ㄴ', 'ㄷ', 'ㅂ', 'ㅅ', 'ㅈ'};
- if (qs[Q] == -1) { // 오류 발생. 현재 텍스트에 새글자로 추가
- errorLetter = faces[num];
- Q = ERROR_STATE;
- reset();
- if (num == 0 || num > 3)
- qs[Q] = move(Q, 0, num);
- result = true;
- }
- return result;
- }
- }
Add Comment
Please, Sign In to add comment