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 + -
显示快捷键?