第四の仕事

パッケージcom.disici。
  2 
  3インポートjava.io.Fileの。
  4インポートjava.io.FileReader。
  5 
  6パブリッククラスLexicalAnalyze { 
  7プライベートチャーCH。
  8プライベート文字列reservedWord [] = { "開始"、 "IF"、 "次に"、 "一方"、 "行う"、 "終了"}。//保留字
  9 
 10 //判断是否是保留字
 11ブールisReserveWord(文字列str){ 
 12のために(INT i = 0; iは<reservedWord.length; iは++){ 
 13 IF(reservedWord [I] .equals(STR) )
 14リターンはtrue。
 15} 
 16リターン偽。
 17} 
 18 
 19 //判断是否是字母 
 20ブーリアンisLetter(CHAR文字){
 21 IF((文字> = '' &&文字<= 'Z')||(文字> = 'A' &&文字<= 'Z'))
 真22リターン。
 23他に
 24のリターンはfalse; 
 25} 
 26 
 27 //判断是否是数字
 28ブーリアンisDigit(チャー桁){ 
 29 IF(数字> = '0' &&桁<= '9')
 30リターン真。
 31他に
 32のリターンはfalse; 
 33} 
 34 
 35公共ボイドは(CHAR []文字を){解析
 36文字列= ""; 
 37は、(i = 0、int型、iがchars.lengthを<; Iは++){ 
 38個のCH =の文字[I]。
 39アレイ= ""; 
 40
 41(CH == '' || CH == '\ T' || CH == '\ N-' || CH == '\ R&LT'){あるIF 
 42が他のある}(isLetter(CH))IF { 
 43は、一方で((isLetter(CH)|| isDigit(CH))){ 
 44がアレイ+ = CH; 
 45のCH =の文字[Iが++]; 
 46である} 
 47 //バック一文字
 48 i--; 
 49 IF(isReserveWord(アレイ)){ 
 50 //するSystem.out.println( "ここで示されている"); 
 51 //予約語
 52 //のSystem.out.println(配列)であり、
 53 IFは(array.equals( "開始")であります){ 
 54のSystem.out.println( "(1 ,.開始)")です。
 55}そうでなければ(array.equals() "IF"){もし
 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( "(行い、5)")。
 63}そうであれば(array.equalsは( "終了")){ 
 64のSystem.out.println( "(終了、6)")。
 67(array.equals( "L(リットル| D)*"))であれば
 68のSystem.out.println( "(L(リットル| D)*、10)"); 
 他の69(array.equals( "DD用*"))であれば
 70のSystem.out.println( "(DD *、11)"); 
 71} 
 72}そうであれば(isDigit(CH)||(CH == ' ')){ 
 73ながら(isDigit(CH)||(CH =='' && isDigit(文字[++ I])) ){ 
 74 IF(CH ==) '' 
 75 i--。
 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 IF(CH == '=')
109のSystem.out.println( "(> = 24)")。
そう110 { 
111のSystem.out.println(」
113} 
114} 
115ブレーク。
116ケース'<':{ 
117のCH =の文字[++ i]は、
118 IF(CH == '=')
119のSystem.out.println( "(<= 21)")。
そう120 { 
121のSystem.out.println( "(<20)")。
122 i--。
123} 
124} 
125ブレーク。
126ケース':':{ 
127のCH =の文字[++ i]は、
128 IF(CH == '=')
129のSystem.out。
他の{130 
131のSystem.out.println( "(。:17)")であり、
132 i--; 
133} 
134} 
135 BREAK; 
136} 
137} 
138} 
139 
140公共の静的な無効メイン(文字列[]引数)スロー{例外
141は入力文字ストリーム//である:文字列を読み取るために、ファイルの文字の形式でTXTファイル入力、反復する方法を使用して、分類出力読んだ後に
142ファイルファイル=新しいファイル( " ./ TXT /analyzeTest.txt「); 
143 = FileReaderの新しい新しいリーダーFileReaderの(ファイル); 
144 INTの長さ=(INT)file.length(); 
145チャーバッファー[] =新しい新しいCHAR [長さ+ 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