scanner.java

来自「桂林电子科技大学编译原理完整JAVA源代码(词法、语法、语义) 此为完整版本」· Java 代码 · 共 463 行 · 第 1/2 页

JAVA
463
字号
package news;
import news.Sql.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
/*
 * Scanner.java
 *
 * Created on 2007年1月12日, 上午7:45
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

/**
 *
 * @author Administrator
 */
public class Scanner {
    private static final int CONST=2; /* 常量 */
    private static final int EARIVALE=3;/* 变量 */
    private static final int KEYWORD=1;/* 关建字 */
    private static  final int LP=4;/* ( */
    private static  final int RP=5;/* ) */
    private static  final int LH=7;/* ( */
    private static  final int RH=8;/* ) */
    private static final int SEMI=9; /* ; */
    private static final int LY=10;/* < */
    private static  final int RY=11;/* <= */
    private static final int YY=12;/* = */
    private static final int LD=13;/* > */
    private static final int RD=14;/* >= */
    private static final int BD=15;/* != */
    private static final int CC=16;/* && */
    private static  final int PLUS=17;/* + */
    private static final int MINUS=18;/* - */
    private static final int STAR=19;/* * */
    private static final int DIV=20;/* / */
    private static final int DYH=21;/* = */
    private static final int LF=22;/* ' */
    private static final int ERROR=88;/* ' */
    private static String keywords[]={"main","int","real","char","if","else"};
    private static int n,col=0;
    private static String s[]=new String[200];
    private  int value,line=1;
    private static char g;
    private String zushi="";
    private int lie[]=new int[200];
    String err="",name="",message=""; //名称
    public static  boolean flag=false;
    public Scanner() {
        
    }
    
    public static void main(String[] args) {
        Framer f=new Framer();
        f.setVisible(true);
        
    }
    public void splist(char[] ch)    //折分字符
    {
        zushi="";
        for(int n=0;n<s.length;n++) {
            s[n]=null;
        }
        n=0;
        col=0;
        s[n]=new String();
        for(int a=0;a<ch.length;a++) {
            if((71<=ch[a]&&ch[a]<=122)||(Character.isDigit(ch[a]))) //是否是字母、数字
            {
                if(flag) {
                    n++;
                    s[n]=new String();
                    flag=false;
                }
                col++;
                s[n]+=ch[a];
                if(ch[a+1]=='.')  //处理正小数点
                {
                    s[n]=s[n]+ch[a+1];
                    a=a+2;
                    col++;
                    while(Character.isDigit(ch[a])||ch[a]=='.') {
                        s[n]+=ch[a];
                        a=a+1;
                        col++;
                    }
                    a=a-1;
                }
                lie[n]=col-s[n].length()+1;
            } else {
                flag=true;
                if(ch[a]==' '||ch[a]=='\r'||ch[a]=='\0'||ch[a]=='\t')  //是否是空格、回车、换行
                {
                    if(ch[a]=='\t') {
                        col+=8;
                    }
                    col++;
                    continue;
                }
                col++;
                if(ch[a]=='\n') {
                  col=0;                
                }
                n++;                
                s[n]=new String();
                if(ch[a]=='/')  //处理注释符号/*---------*/
                {
                    if(ch[a+1]=='*') {
                        a=a+2;
                        while(true){
                            if(ch[a]=='\n') {
                                s[n]="\n";
                                n++;
                            }
                            if(ch[a]=='*'){
                                if(ch[a+1]=='/') {
                                    a=a+2;
                                    break;
                                }else {
                                    zushi="注释符号不配对!\n";
                                    a=a+1;
                                    break;
                                }
                            }
                            a++;
                            if((int)ch[a]==-1){
                                break;
                            }
                            
                        }
                    }
                }
                if(ch[a]=='/')  //处理注释符号//---------
                {
                    if(ch[a+1]=='/') {
                        a=a+2;
                        while(ch[a]!='\n') {
                            a++;
                            
                        }
                        if(ch[a]=='\n') {
                            col=0;
                        }
                    }
                }
                s[n]=new String();
                s[n]+=ch[a];
                if(ch[a]=='.')  //处理正小数点
                {
                    a=a+1;
                    col++;
                    while(Character.isDigit(ch[a])||ch[a]=='.') {
                        s[n]+=ch[a];
                        col++;
                        a=a+1;
                    }
                }
                if(ch[a]=='-')  //处理负数小数点
                {
                    a=a+1;
                    col++;
                    while((Character.isDigit(g=ch[a]))||(g=='.')) {
                        s[n]+=ch[a];
                        col++;
                        a=a+1;
                    }
                    a=a-1;
                }
          /*      if(ch[a]=='m')
                    if(ch[a+1]=='a')
                        if(ch[a+2]=='i')
                            if(ch[a+3]=='n'){
                    s[n]="main";
                    a=a+3;
                            }
                if(ch[a]=='i')
                    if(ch[a+1]=='n')
                        if(ch[a+2]=='t') {
                    s[n]="int";
                    a=a+2;
                        }
           */
                if(ch[a]=='=')
                    if(ch[a+1]=='=') {
                    s[n]="==";
                    a=a+1;
                    col++;
                    }
                if(ch[a]=='!')
                    if(ch[a+1]=='=') {
                    s[n]="!=";
                    a=a+1;
                    col++;
                    }
                if(ch[a]=='<')
                    if(ch[a+1]=='=') {
                    s[n]="<=";
                    a=a+1;
                    col++;
                    }
                if(ch[a]=='>')
                    if(ch[a+1]=='=') {
                    s[n]=">=";
                    a=a+1;
                    col++;
                    }
                if(ch[a]=='<')
                    if(ch[a+1]=='>') {
                    s[n]="<>";
                    a=a+1;
                    col++;
                    }
                if(ch[a]=='|')
                    if(ch[a+1]=='|') {
                    s[n]="||";
                    a=a+1;
                    col++;
                    }
                if(ch[a]=='+')
                    if(ch[a+1]=='+') {
                    s[n]="++";
                    a=a+1;
                    col++;
                    }
                if(ch[a]==':')
                    if(ch[a+1]=='=') {
                    s[n]=":=";
                    a=a+1;
                    col++;
                    }
                if(ch[a]=='-')

⌨️ 快捷键说明

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