パッケージ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
おすすめ
ランキング