天天看点

0916 词法分析(3)

0916 词法分析(3)

package compileWork;

import java.util.ArrayList;

import java.util.Scanner;

public class compileWork_1

{

 public static void main(String args[])

 {

  Scanner s=new Scanner(System.in);

  System.out.println("please input code");

  String scode=s.nextLine();

  s.close();

  ArrayList<String> arrayphrase=new ArrayList<String>();

  int i;

  for(i=0;i<scode.length();i++)

  {

   char[] stemp=scode.substring(i, i+1).toCharArray();

   char cword=stemp[0];

   String sphrase="";

   int flag=0;

   while(i<scode.length()&&cword<='Z'&&cword>='A'||cword<='z'&&cword>='a'||cword>='0'&&cword<='9')

   {

    flag=1;

    i++;

    sphrase+=cword;

    if(i<scode.length()){

    char[] cnextTemp=scode.substring(i,i+1).toCharArray();

    cword=cnextTemp[0];

    }else{

     break;

    }

   }

   if(flag==1){

   arrayphrase.add(sphrase);

   sphrase="";

   if(i<scode.length()&&cword=='<')

    if(i<scode.length()&&i<scode.length()&&cword=='=')

    {

     sphrase+=cword;

    if(i<scode.length()&&cword=='>')

    arrayphrase.add(sphrase);

    sphrase="";

  if(i<scode.length()&&cword==':')

   sphrase+=cword;

   char[] cnextTemp=scode.substring(i+1,i+2).toCharArray();

   cword=cnextTemp[0];

   if(i<scode.length()&&i<scode.length()&&cword=='=')

  }

  if(i<scode.length()&&cword=='+')

  if(i<scode.length()&&cword=='-')

  if(i<scode.length()&&cword=='*')

  if(i<scode.length()&&cword=='/')

  if(i<scode.length()&&cword==';')

 }

 for(String ssign :arrayphrase){

   switch (ssign){

   case "begin":

    System.out.print("<1 "+ssign+">");

    break;

   case "end":

    System.out.print("<2 "+ssign+">");

   case "if":

    System.out.print("<3 "+ssign+">");

   case "then":

    System.out.print("<4 "+ssign+">");

   case "else":

    System.out.print("<5 "+ssign+">");

   case "while":

    System.out.print("<6 "+ssign+">");

   case "do":

    System.out.print("<7 "+ssign+">");

   case "+":

    System.out.print("<13 "+ssign+">");

   case "-":

    System.out.print("<14 "+ssign+">");

   case "*":

    System.out.print("<15 "+ssign+">");

   case "/":

    System.out.print("<16 "+ssign+">");

   case "<=":

    System.out.print("<17 "+ssign+">");

   case "<>":

    System.out.print("<18 "+ssign+">");

   case "<":

    System.out.print("<19 "+ssign+">");

   case ":":

    System.out.print("<21 "+ssign+">");

   case ":=":

    System.out.print("<22 "+ssign+">");

   case ";":

    System.out.print("<23 "+ssign+">");

   default:

   int flagisn=1;

   char[] cssigntemp=ssign.toCharArray();

    for(int k=0;k<ssign.length();k++){

     if(Character.isDigit(cssigntemp[k])!=true){

      flagisn=0;

     }

    if(flagisn==1){

     System.out.print("<11 "+ssign+">");

     System.out.printf("<10"+ssign+">");

  }  

}