⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 analysecases.java

📁 编译器中的词法分析
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
package cmm.cmmcc;


import java.util.ArrayList;

public class AnalyseCases {
	 public ArrayList arrayToken = new ArrayList();
     public ArrayList arrayType = new ArrayList();
     public ArrayList errorType = new ArrayList();
     public ArrayList endPlaceArray = new ArrayList();
     public int endPlace;//每一个token结束的地方
     public String token;//token的内容
     public String identifier;//存放token内容的缓存
     public int length = Lexer.getLength();//所有的输入的长度

     /// <summary>
     /// 判断不用向后读取的符号
     /// </summary>
     /// <param name="startPlace"></param>
     /// <param name="curch"></param>
     /// <param name="content"></param>
     public void isSingleSymbol(int startPlace, char curch) 
     {
    	 Token tk = null;
         switch (curch)
         {
             case '*':
             case '(':
             case ')':
                 this.endPlace = startPlace;
                 arrayToken.add(curch);
                 arrayType.add("算数运算符");
                 errorType.add("correct");
                 endPlaceArray.add(endPlace);
                 break;
             case '>':
                 this.endPlace = startPlace;
                 arrayToken.add(curch);
                 arrayType.add("关系运算符");
                 errorType.add("correct");
                 endPlaceArray.add(endPlace);
                 break;
             case '{':
             case '}':
                 this.endPlace = startPlace;
                 arrayToken.add(curch);
                 arrayType.add("语句符号");
                 errorType.add("correct");
                 endPlaceArray.add(endPlace);
                 break;
             case ';':
                 this.endPlace = startPlace;
                 arrayToken.add(curch);
                 arrayType.add("分隔符");
                 errorType.add("correct");
                 endPlaceArray.add(endPlace);
                 break;
             case ']':
                 this.endPlace = startPlace;
                 arrayToken.add(curch);
                 arrayType.add("error");
                 errorType.add("非法数组");
                 endPlaceArray.add(endPlace);
                 break;
         }
     }

     /// <summary>
     /// 判断需要向后读取一位以上的符号
     /// </summary>
     /// <param name="startPlace"></param>
     /// <param name="curch"></param>
     /// <param name="content"></param>
     public void IsDoubleSymbol(int startPlace, char curch, String content)
     {    	    	 
         switch (curch)
         {
             case '/':
                 if (startPlace + 1 < content.length())
                 {
                     token = "/";

                     //if (content[startPlace + 1] == '*')
                     if (content.charAt(startPlace + 1)=='*')
                     {
                         token = "/*";

                         if ((startPlace + 2) < content.length())
                         {
                             for (int i = (startPlace + 2); i < content.length(); i++)
                             {
                                 token = token + content.charAt(i);

                                 if (content.charAt(i) == '*' && i < content.length() && content.charAt(i+1) == '/')
                                 {
                                     token = token + content.charAt(i+1);

                                     arrayToken.add(token);
                                     arrayType.add("注释符号");
                                     errorType.add("correct");
                                     endPlace = i + 1;
                                     endPlaceArray.add(endPlace);
                                     break;
                                 }
                                 else if (i == (content.length() - 1))
                                 {
                                     arrayToken.add(token);
                                     arrayType.add("注释符号");
                                     errorType.add("correct");
                                     endPlace = i;
                                     endPlaceArray.add(endPlace);
                                 }
                             }
                         }
                         else
                         {
                             arrayToken.add("/*");
                             arrayType.add("注释符号");
                             errorType.add("correct");
                             endPlace = startPlace + 1;
                             endPlaceArray.add(endPlace);
                         }
                     }
                     else
                     {
                         arrayToken.add(curch);
                         arrayType.add("算术运算符");
                         errorType.add("correct");
                         endPlace = startPlace;
                         endPlaceArray.add(endPlace);
                     }
                 }
                 else
                 {
                     arrayToken.add(curch);
                     arrayType.add("算数运算符");
                     errorType.add("correct");
                     endPlace = startPlace;
                     endPlaceArray.add(endPlace);
                 }
                 break;

             case '=':
             case '<':
                 if (startPlace + 1 < content.length())
                 {
                     //if (content[startPlace + 1] == '=')
                	 if (content.charAt(startPlace + 1) == '=')
                     {
                         arrayToken.add("==");
                         arrayType.add("关系运算符");
                         errorType.add("correct");
                         endPlace = startPlace + 1;
                         endPlaceArray.add(endPlace);
                     }
                     //else if (content[startPlace + 1] == '>')
                	 else if (content.charAt(startPlace + 1) == '>') 
                     {
                         arrayToken.add("<>");
                         arrayType.add("关系运算符");
                         errorType.add("correct");
                         endPlace = startPlace + 1;
                         endPlaceArray.add(endPlace);
                     }
                     else
                     {
                         arrayToken.add(curch);
                         arrayType.add("关系运算符");
                         errorType.add("correct");
                         endPlace = startPlace;
                         endPlaceArray.add(endPlace);
                     }
                 }
                 else
                 {
                     arrayToken.add(curch);
                     arrayType.add("关系运算符");
                     errorType.add("correct");
                     endPlace = startPlace;
                     endPlaceArray.add(endPlace);
                 }
                 break;

             case '[':
                 if (startPlace + 1 < content.length())
                 {
                     token = "[";

                     for (int i = (startPlace + 1); i < content.length(); i++)
                     {
                         //token = token + content[i];
                    	 token = token + content.charAt(i);

                         if (content.charAt(i) == ']')
                         {
                             if (content.charAt(i-1) == '[' && content.charAt(i) == ']')
                             {
                                 arrayToken.add(token);
                                 arrayType.add("数组");
                                 errorType.add("correct");
                                 endPlace = startPlace + 1;
                                 endPlaceArray.add(endPlace);
                                 i++;
                                 break;   
                             }
                             else
                             {
                                 int j = 1;

                                 //while (char.isDigit(token[j]))
                                 while (java.lang.Character.isDigit(token.charAt(j))) 
                                 {
                                     j++;
                                 }
                                 if (j == token.length() - 1)
                                 {
                                     arrayToken.add(token);
                                     arrayType.add("数组");
                                     errorType.add("correct");
                                     endPlace = i;
                                     endPlaceArray.add(endPlace);
                                     i++;
                                     break;  
                                 }
                                 else
                                 {
                                     arrayToken.add(token);
                                     arrayType.add("error");
                                     errorType.add("非法数组");
                                     endPlace = i;
                                     endPlaceArray.add(endPlace);
                                     i++;
                                     break; 
                                 }
                             }
                         }
                         else if (content.charAt(i) != ']' && (content.charAt(i) == ' ' || content.charAt(i) == '+' || content.charAt(i) == '-' ||
                             content.charAt(i) == '*' || content.charAt(i) == '/' || content.charAt(i) == '(' || content.charAt(i) == ')' ||
                             content.charAt(i) == '{' || content.charAt(i) == '}' || content.charAt(i) == ';' || content.charAt(i) == '<' ||
                             content.charAt(i) == '>' || content.charAt(i) == '=' || content.charAt(i) == '\n'))
                         {
                             arrayToken.add(token);
                             arrayType.add("error");
                             errorType.add("非法数组");
                             endPlace = i;
                             endPlaceArray.add(endPlace);
                             i++;
                             break;
                         }
                         else if (content.charAt(i) != '0' && content.charAt(i) != '1' && content.charAt(i) != '2' && content.charAt(i) != '3' &&
                             content.charAt(i) != '4' && content.charAt(i) != '5' && content.charAt(i) != '6' && content.charAt(i) != '7' &&
                             content.charAt(i) != '8' && content.charAt(i) != '9')
                         {
                             for (int j = i + 1; j < content.length(); j++)
                             {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -