Guest User

Untitled

a guest
Oct 17th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.04 KB | None | 0 0
  1. import java.util.ArrayList;
  2.  
  3. public class CJIAutomata {
  4. int transTable[][][]={{//초성 테이블
  5. {1,2,3,4,5,6,7},{8,-1,-1,-1,-1,-1,-1},//1번입력(0-1)
  6. {-1,9,-1,-1,-1,-1,-1},{-1,-1,10,-1,-1,-1,-1}, //2번 입력(2-3)
  7. {-1,-1,-1,11,-1,-1,-1},{-1,-1,-1,-1,12,-1,-1},//2번입력(4-5)
  8. {-1,-1,-1,-1,-1,13,-1},{-1,-1,-1,-1,-1,-1,14},//2번입력(6-7)
  9. {15,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//3번8-9
  10. {-1,-1,16,-1,-1,-1,-1},{-1,-1,-1,17,-1,-1,-1},//3번10-11
  11. {-1,-1,-1,-1,18,-1,-1},{-1,-1,-1,-1,-1,19,-1},//3번12-13
  12. {-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//4번14-15
  13. {-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//4번16-17
  14. {-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1} //4번18-19
  15. },
  16. {//중성 테이블
  17. {2,3,1}, {5,4,-1}, {-1,6,-1}, {9,7,8},//0~3
  18. {10,11,-1},{-1,-1,-1},{13,12,-1},{15,-1,14},{16,-1,-1},{24,-1,-1},//4~9
  19. {-1,-1,-1},{18,-1,-1},{19,-1,-1},{-1,-1,-1},{-1,-1,-1},{20,-1,-1},{-1,21,-1},//10~16
  20. {-1,-1,-1},{22,-1,-1},{-1,-1,-1},{-1,-1,-1},{23,-1,-1},//17~21
  21. {-1,-1,-1},{-1,-1,-1}, {-1,-1,-1}//22~24} ;
  22. },
  23. {//종성 테이블.
  24. {1,2,3,4,5,6,7},{8,-1,-1,-1,20,-1,-1},//1번입력(0-1)
  25. {-1,9,-1,-1,21,22,-1},{-1,-1,10,-1,-1,-1,-1}, //2번 입력(2-3)
  26. {-1,-1,-1,11,30,-1,-1},{-1,-1,-1,-1,12,-1,-1},//2번입력(4-5)
  27. {-1,-1,-1,-1,-1,13,-1},{-1,-1,-1,-1,-1,-1,14},//2번입력(6-7)
  28. {15,-1,-1,-1,-1,-1,-1},{23,-1,25,26,24,-1,27},//3번(8-9)
  29. {-1,-1,16,-1,-1,-1,-1},{-1,-1,-1,17,-1,-1,-1},//3번(10-11)
  30. {-1,-1,-1,-1,18,-1,-1},{-1,-1,-1,-1,-1,19,-1},//3번(12-13)
  31. {-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//4번(14-15)
  32. {-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//4번(16-17)
  33. {-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//4번(18-19)
  34. {-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//4번(20-21)
  35. {-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//4번(22-23)
  36. {-1,-1,-1,-1,28,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//5번(24-25)
  37. {-1,-1,-1,29,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//5번(26-27)
  38. {-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1},//5번(28-29)
  39. {-1,-1,-1,-1,-1,-1,-1},{-1,-1,-1,-1,-1,-1,-1} //5번(30-31)
  40. },
  41. };
  42.  
  43. char choTable[] =
  44. {' ', 'ㄱ', 'ㄴ', 'ㄷ', 'ㅂ', 'ㅅ', 'ㅈ', 'ㅇ', 'ㅋ', 'ㄹ',
  45. 'ㅌ', 'ㅍ', 'ㅎ', 'ㅊ', 'ㅁ', 'ㄲ', 'ㄸ', 'ㅃ', 'ㅆ', 'ㅉ'}; // 초성 20개
  46. char jungTable[] =
  47. {' ', 'ㅡ', 'ㅣ', 'ㅏ', 'ㅜ', 'ㅢ', 'ㅏ', 'ㅑ', 'ㅗ', 'ㅓ',
  48. 'ㅟ', 'ㅠ', 'ㅑ', 'ㅐ', 'ㅛ', 'ㅕ', 'ㅚ', ' ', 'ㅝ', 'ㅒ',
  49. 'ㅖ', 'ㅘ', 'ㅞ', 'ㅙ', 'ㅔ'}; // 중성 24개
  50. char jongTable[] =
  51. {' ', 'ㄱ', 'ㄴ', 'ㄷ', 'ㅂ', 'ㅅ', 'ㅈ', 'ㅇ', //1~7
  52. 'ㅋ', 'ㄹ', 'ㅌ', 'ㅍ', 'ㅎ', 'ㅈ', 'ㅁ', 'ㄲ', 'ㄸ', 'ㅃ', 'ㅆ', 'ㅉ', //8~19
  53. 'ㄳ', 'ㄶ', 'ㄵ', 'ㄺ', 'ㄽ', 'ㄾ', 'ㄼ', 'ㄻ', 'ㅀ', 'ㄿ', 'ㅄ'}; //20~30 // 종성 30개
  54.  
  55. char chTable[][] = {choTable, jungTable, jongTable};
  56.  
  57. static final int CHO = 0;
  58. static final int JUNG = 1;
  59. static final int JONG = 2;
  60. static final int ERROR_STATE = -1;
  61.  
  62. String QAutoName[] = {"초성", "중성", "종성"};
  63. int Q=0, n=0;
  64. int qs[] = {0, 0, 0};
  65. char errorLetter = 'X';
  66. int move(int Q, int q, int num) {
  67. if(num==0) num = 10;
  68. if (num > 3) num -= 4;
  69. else num--;
  70. // if (Q == JONG) {
  71. // qJongs[0][nJong] = q;
  72. // qJongs[1][nJong++] = num;
  73. // }
  74. MainFrame.GetInstance().appendLog(String.format("MOVE %s : d(%d, %d) = ", QAutoName[Q], q, num));
  75. q = transTable[Q][q][num];
  76. MainFrame.GetInstance().appendLog(String.format("%d%n", q));
  77. return q;
  78. }
  79. void reset()
  80. {
  81. Q = CHO;
  82. qs[0] = qs[1] = qs[2] = 0;
  83. errorLetter = 'X';
  84. }
  85. ArrayList<Character> inputSeq = new ArrayList<>();
  86. char getStateSymbol(int Q)
  87. {
  88. return chTable[Q][qs[Q]];
  89. }
  90. char getCurrentLetter() {
  91. inputSeq.clear();
  92. for (int i = CHO; i <= Q; i++) {
  93. inputSeq.add(getStateSymbol(i));
  94. }
  95. char letter = HUtil.ArrTOChar(inputSeq);
  96. MainFrame.GetInstance().appendLog(String.format("\t\tCurrent Letter : %c (%s)%n", letter, inputSeq));
  97. return letter;
  98. }
  99. char finishLetter() {
  100. char letter = getCurrentLetter();
  101. reset();
  102. return letter;
  103. }
  104. boolean isMoum(int n) {
  105. if (n >= 1 && n <= 3) return true;
  106. return false;
  107. }
  108.  
  109. /*
  110. * boolean next 함수 부분이 수정한 부분입니다.
  111. * 단, 자동으로 다음글자로의 전환은 생각하기 어려워서 구현하지 못하였습니다.
  112. * 한글을 입력하고 한글 입력이 끝났을 경우 * 혹은 # 을 입력하면 다음 한글로 넘어갑니다.
  113. */
  114.  
  115. boolean next(int num){
  116. int q = qs[Q];
  117. boolean result = false;
  118. boolean bMoum = isMoum(num);
  119. if (Q == CHO && bMoum) {
  120. Q = JUNG;
  121. q = 0;
  122. result = false;
  123. }
  124. else if (Q == JUNG && !bMoum) {
  125. Q = JONG;
  126. q = 0;
  127. result = false;
  128. }
  129. else if (Q == JONG && bMoum) {
  130. Q = CHO;
  131. q = 0;
  132. finishLetter();
  133. result = true;
  134. }
  135. qs[Q] = move(Q, q, num); // true면 새 글자로 추가
  136. char faces[] = {' ', 'ㅣ', '.', 'ㅡ', 'ㄱ', 'ㄴ', 'ㄷ', 'ㅂ', 'ㅅ', 'ㅈ'};
  137. if (qs[Q] == -1) { // 오류 발생. 현재 텍스트에 새글자로 추가
  138. errorLetter = faces[num];
  139. Q = ERROR_STATE;
  140. reset();
  141. if (num == 0 || num > 3)
  142. qs[Q] = move(Q, 0, num);
  143. result = true;
  144. }
  145. return result;
  146. }
  147.  
  148.  
  149. }
Add Comment
Please, Sign In to add comment