<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ## 概述 提取關鍵字和變量名 提取字符串 提取操作符 提取數字 ## 方式 ### 提取關鍵詞或變量 **狀態機描述:** ![](https://img.kancloud.cn/91/e6/91e67d23073c1dfce9cce73e43f56568_800x195.png) <details> <summary>token.java</summary> ``` public static Token makeVarOrKeyWord(PeekIterator<Character> it) { String s = ""; // 獲取一個字符串 while (it.hasNext()) { Character lookahead = it.peek(); if (AlphabetHelper.isLetter(lookahead)) { s += lookahead; } else { break; } it.next(); } // 判斷是否是關鍵詞 if (KeyWords.isKeyWord(s)) { return new Token(TokenType.KEYWORD, s); } if (s.equals("true") || s.equals("false")) { return new Token(TokenType.BOOLEAN, s); } return new Token(TokenType.VARIABLE, s); } ``` </details> <br /> ### 提取字符串 **狀態機描述:** ![](https://img.kancloud.cn/57/5f/575f430b105d529527df7c7ea5543047_400x187.png) - 如果兩邊都為單引號或雙引號,則為字符串 <details> <summary>token.java</summary> ``` public static Token makeString(PeekIterator<Character> it) throws LexicalException { StringBuilder s= new StringBuilder(); int state = 0; while(it.hasNext()){ char c = it.next(); switch(state){ case 0: if (c=='\''){ state=1; }else if (c=='\"'){ state=2; } s.append(c); break; case 1: if (c=='\''){ return new Token(ToKenType.STRING,s.toString()+c); }else{ s.append(c); } break; case 2: if (c=='\"'){ return new Token(ToKenType.STRING,s.toString()+c); }else{ s.append(c); } break; } } // end while // 不可能到這里,但是為了 java的規范,添加一句 throw new LexicalException("Unexpected error"); ``` </details> <br /> ### 提取操作符 **狀態機描述:** <details> <summary>點擊打開狀態機描述</summary> ![](https://img.kancloud.cn/56/02/5602757aea59d814fae73b46fc2d1544_1078x5260.png) </details> <br /> <details> <summary>token.java</summary> ``` public static Token makeOp(PeekIterator<Character> it) throws LexicalException { int state = 0; while (it.hasNext()) { char lookahead = it.next(); switch (state) { case 0: switch (lookahead) { case '+': state = 1; break; case '-': state = 2; break; case '*': state = 3; break; case '/': state = 4; break; case '>': state = 5; break; case '<': state = 6; break; case '=': state = 7; break; case '!': state = 8; break; case '&': state = 9; break; case '|': state = 10; break; case '^': state = 11; break; case '%': state = 12; break; case ',': return new Token(TokenType.OPERATOR, ","); case ';': return new Token(TokenType.OPERATOR, ";"); }// while end break; case 1: if (lookahead=='+'){ return new Token(TokenType.OPERATOR,"++"); }else if (lookahead == '='){ return new Token(TokenType.OPERATOR,"+="); }else{ it.putBack(); return new Token(TokenType.OPERATOR,"+"); } case 2: if (lookahead=='-'){ return new Token(TokenType.OPERATOR,"--"); }else if (lookahead == '='){ return new Token(TokenType.OPERATOR,"-="); }else{ it.putBack(); return new Token(TokenType.OPERATOR,"+"); } case 3: if (lookahead == '='){ return new Token(TokenType.OPERATOR,"*="); }else{ it.putBack(); return new Token(TokenType.OPERATOR,"*"); } case 4: if (lookahead == '='){ return new Token(TokenType.OPERATOR,"/="); }else{ it.putBack(); return new Token(TokenType.OPERATOR,"/"); } case 5: if ( lookahead == '='){ return new Token(TokenType.OPERATOR,">="); }else if (lookahead == '>'){ return new Token(TokenType.OPERATOR,">>"); }else{ it.putBack(); return new Token(TokenType.OPERATOR,">"); } case 6: if ( lookahead == '='){ return new Token(TokenType.OPERATOR,"<="); }else if (lookahead == '<'){ return new Token(TokenType.OPERATOR,"<<"); }else{ it.putBack(); return new Token(TokenType.OPERATOR,">"); } case 7: if ( lookahead == '='){ return new Token(TokenType.OPERATOR,"=="); }else{ it.putBack(); return new Token(TokenType.OPERATOR,"="); } case 8: if ( lookahead == '='){ return new Token(TokenType.OPERATOR,"!="); }else{ it.putBack(); return new Token(TokenType.OPERATOR,"!"); } case 9: if ( lookahead == '&'){ return new Token(TokenType.OPERATOR,"&&"); }else if (lookahead=='='){ return new Token(TokenType.OPERATOR,"&="); }else{ it.putBack(); return new Token(TokenType.OPERATOR,"&"); } case 10: if(lookahead == '|') { return new Token(TokenType.OPERATOR, "||"); } else if (lookahead == '=') { return new Token(TokenType.OPERATOR, "|="); } else { it.putBack(); return new Token(TokenType.OPERATOR, "|"); } case 11: if(lookahead == '^') { return new Token(TokenType.OPERATOR, "^^"); } else if (lookahead == '=') { return new Token(TokenType.OPERATOR, "^="); } else { it.putBack(); return new Token(TokenType.OPERATOR, "^"); } case 12: if (lookahead == '=') { return new Token(TokenType.OPERATOR, "%="); } else { it.putBack(); return new Token(TokenType.OPERATOR, "%"); } } } throw new LexicalException("Unexpected error"); } ``` </details> <br /> ### 提取數字 **狀態機描述:** ![](https://img.kancloud.cn/c4/b0/c4b01b6bd40ed6b2b59f6cab96007569_800x268.png) 簡單說明: - 查看狀態 "0"->"1" 這條狀態,發現若用戶一致輸入"0",并接下來輸入一個非"1-9",非".",則說明這個整數為0 <br/> <details> <summary>token.java</summary> ``` public static Token makeNumber(PeekIterator<Character> it )throws LexicalException{ StringBuilder s= new StringBuilder(); int state =0; while(it.hasNext()){ char lookahead = it.next(); switch (state){ case 0: if (lookahead=='0'){ state=1; }else if(AlphabetHelper.isNumber(lookahead)){ state=2; }else if(lookahead=='+' || lookahead=='-' ){ state=3; }else if(lookahead=='.' ){ state=5; } break; case 1: if (lookahead =='0'){ state=1; }else if (AlphabetHelper.isNumber(lookahead)){ state=2; }else if(lookahead=='.'){ state=4; }else{ return new Token(TokenType.INTEGER, s.toString()); } break; case 2: if (AlphabetHelper.isNumber(lookahead)){ state=2; }else if (lookahead=='.'){ state=4; }else{ return new Token(TokenType.INTEGER, s.toString()); } break; case 3: if (AlphabetHelper.isNumber(lookahead)){ state=2; }else if(lookahead=='.'){ state=5; }else { throw new LexicalException(lookahead); } break; case 4: if (lookahead=='.'){ throw new LexicalException(lookahead); }else if (AlphabetHelper.isNumber(lookahead)){ state=20; }else{ return new Token(TokenType.FLOAT, s.toString()); } break; case 5: if (AlphabetHelper.isNumber(lookahead)){ state=20; }else{ throw new LexicalException(lookahead); } break; case 20: if (AlphabetHelper.isNumber(lookahead)){ state=20; }else if (lookahead=='.'){ throw new LexicalException(lookahead); }else { return new Token(TokenType.FLOAT, s.toString()); } } // end switch s.append(lookahead); }// end while throw new LexicalException("Unexpected err "); } ``` </details> <br />
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看