패키지 com.disici; 2 세 수입 java.io.File에; 4 수입 java.io.FileReader; 5 6 공용 클래스 LexicalAnalyze { 7 개인 숯불 채널; 8 개인 문자열 reservedWord [] = { "시작", "가상", "후", "동안", "수행", "단부"}; //保留字 9 10 //判断是否是保留字 11 부울 isReserveWord (문자열 STR) { 12에 대해 INT (I = 0; I는 <reservedWord.length; 내가 ++) { 13 일 경우 (reservedWord [I] .equals (STR) ) (14) 반환 사실; 15} 16 반환 거짓; 17} 18 19 //判断是否是字母 20 부울 대해서 isLetterOrDigit (숯 문자) { 21의 경우 ((문자> = 'A'&& 문자 <= 'Z') || (문자> = 'A'&& 문자 <= 'Z')) 에 해당 창 (22); (23) 다른 거짓 (24) 반환; 25} 26 27 //判断是否是数字 28 부울 isdigit에 (문자 숫자) { 29 일 경우 (숫자> = 0 && 자리 <= '9') 30 참을 리턴; 31 다른 거짓 창 32; } 33 34 35 공중 공극은 (CHAR [] 문자)를 분석하여 { 36 문자열 배열 = ""; 37 (0 = 1을 나타내는 int i가 chars.length를 <; 내가 ++) { 38 = CH에서의 문자 [I]; 39 어레이 = ""; (40) 41 인 경우 (CH == '|| CH는 =='\ T '|| CH =='\ N- '|| CH =='\ R & LT ') { (대해서 isLetterOrDigit가 (CH)) {IF (42)는 다른이다} (43) 동안은 ((대해서 isLetterOrDigit (CH) || isdigit에 (CH))) { 44은 어레이 + = CH; 45 CH를 =의 문자 [I가 ++] (46)이다} 47 // 한 문자 뒤로 48 난 ...; 49 IF (isReserveWord ( 어레이)) { 50 //에서 System.out.println ( "여기서 도시"); 51 // 예약어 ; 52에서 System.out.println (배열) //이다 ) (array.equals는 ( "선두"IF (53)가 ) { 54) ( "합니다 (1 ,. 시작)"에서 System.out.println이고; 55} 다른 경우 (array.equals () "의 경우") { 56에서 System.out.println ( "(경우 2)"); 57} 다른 경우 (array.equals ( "다음")) { 58에서 System.out.println ( "(그리고, 3)"); 59} 다른 경우 (array.equals () "동안") { 60에서 System.out.println ( "하며 (4)"); 61} 다른 경우 (array.equals는 ( "수행")) { 62에서 System.out.println ( "DO (5)"); 63} 다른 경우 (array.equals는 ( "END")) { 64에서 System.out.println ( "(단, 6)"); (67) 만약 (array.equals ( "L (L | d) *")) (68)에서 System.out.println ( "(L (L | D) * 10)"); (69) 그 밖의 경우 (array.equals ( "DD의 *")) (70)에서 System.out.println ( "(DD *를 11)"); 71} 72} 다른 경우 (isdigit에 (CH2) || (CH2 == '.')) { 73 동안 (isdigit에 (CH2) || (CH2 == '.'&& isdigit에 (문자 [++ I])) ) { 74의 경우 (CH2 ==) '.' 75 난 -; (76) 어레이 배열 + = CH; (77) = CH 용의 문자 [++ I]; 78} 79 //属于无符号常数 80은 System.out. 다른 스위치 (81)} (CH) { 82의 경우 '+' 83에서 System.out.println ( "(+ 13)"); (84) 휴식; 85의 경우 '-' 86에서 System.out.println ( "(- 14)"); 브레이크 (87); 케이스 88 '*' (89)에서 System.out.println ( "(* 15)"); (90) 휴식; 케이스 91 '/' 92에서 System.out.println ( "(/ 16)"); 브레이크 (93); 케이스 (94) '(' 95에서 System.out.println ( "((27)"); 케이스 97 ')' (98)에서 System.out.println ( "() 28)"); 99 휴식; 100의 경우 '#' 101에서 System.out.println ( "(# 0)"); 브레이크 (102); 케이스 (103) '=' 104에서 System.out.println ( "(= 25)"); (105) 휴식; 케이스 (106) '>'{ 107 CH = 용의 문자 [++ I]; 만약 108 (CH2 == '=') (109)에서 System.out.println ( "(> = 24)"); 또 {110 (111)에서 System.out.println ( " 113} 114} 115 체류; 케이스 (116) '<'{ 117 CH = 용의 문자 [++ I]; 만약 118 (CH2 == '=') (119)에서 System.out.println ( "(<= 21)"); 또 {120 (121)에서 System.out.println ( "(<20)"); 난 - 122; 123} 124} 125 체류; 케이스 126 '': { 127 CH = 용의 문자 [++ I]; 만약 128 (CH2 == '=') (129)은 System.out. 사람은 {130 : 131은에서 System.out.println ( "., 17 ()")는 132 난 ... 133} 134} 135 BREAK; 136} (137)} (138)} (139) (140) 공공 정적 무효 메인 (문자열 [] 인수)이 발생 {예외 (141)는 입력 문자 스트림 //이다 문자 배열을 읽을 수있는 파일의 문자의 형태 TXT 파일 입력을 반복하는 방법을 사용하여 분류 출력 읽은 후 142 파일 file = 새 파일 ( " ./ TXT /analyzeTest.txt "); 143 =을 FileReader 새로운 새 판독기을 FileReader (파일) (144) INT 길이 = (int)를 file.length (); 145 문자 버퍼 [] = 새로운 새 문자 [. 길이 + 1] 146 reader.Read (버퍼 ); 147 reader.close (); . (148) 새로운 LexicalAnalyze () (버퍼) 분석; 149} 150}
输出结果:
(시작, 1)
(= 25)
(1,11)
(> = 24)
(경우 2)
(> 23)
(2,11)
(그리고, 3)
(: = 18)
(3,11)
(단, 6)
네 번째 작업
추천
출처www.cnblogs.com/du162/p/11655216.html
추천
행