네 번째 작업

패키지 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