//入口类
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import org.omg.CORBA.portable.InputStream;
public class TestTokenAnanlize {
public static void main(String[] args) throws IOException
{
MyCompiler cp = new MyCompiler();
//接受读取的字符串
String bufferOne = null;
String bufferTwo = null;
String scannerResult = null;
StringBuffer fileString = new StringBuffer(50000);
int Index = 0;
int vitalIndex = 0;
int helpVitalIndex = 0;
//ArrayList的读 快改慢的特点适合作为关键字的比较
ArrayList<String> str = new ArrayList<String>();
File getFile = new File("abc.txt");
File vitaleFile = new File("vital.txt");
File targetFile = new File("targetfile.txt");
//建立一个预定缓冲区的输入流,读取文件
BufferedReader inOne = null;
BufferedReader inTwo = null;
BufferedWriter bf = null;
//创建输入输出流,关联文件
try{
inTwo = new BufferedReader(new FileReader(vitaleFile));
bf = new BufferedWriter(new FileWriter("targetfile.txt"),3000);
inOne = new BufferedReader(new FileReader(getFile));
//经测试,关键字被成功加入到str中
while((bufferTwo = inTwo.readLine()) != null)
{
bufferTwo = bufferTwo.trim();
while(vitalIndex < (bufferTwo.length()- 1))
{
if(bufferTwo.length() <= 0)
break;
while(bufferTwo.charAt(vitalIndex) != ',' && (vitalIndex < (bufferTwo.length()- 1)))
{
vitalIndex++;
}
str.add(bufferTwo.substring(helpVitalIndex, vitalIndex));
System.out.println(str.get(str.size() - 1));
helpVitalIndex = vitalIndex;
vitalIndex++;
helpVitalIndex++;
}
vitalIndex = 0;
helpVitalIndex = 0;
}
//解析程序
while((bufferOne = inOne.readLine()) != null)
{
//除去开头和结尾的空白
bufferOne = bufferOne.trim();
//不断调用Scanner()函数扫描每一行代码
while(Index <= bufferOne.length() - 1 && bufferOne.length() != 0)
{
//出现异常
scannerResult = cp.Scanner(bufferOne,Index,str);
//如果是注释行,则推出循环
if(scannerResult == "annotation")
{
break;
}
//将解析出来的单词存放在StringBuffer字符串缓冲区当中,留待以后写入文件
fileString = fileString.append(new Character(scannerResult.charAt(0)).toString()
+ " " + scannerResult.substring(1, scannerResult.length()) + "\n");
//打印解析出来的单词
System.out.println("(" + scannerResult.charAt(0) + " " +
scannerResult.substring(1, scannerResult.length()) + ")");
Index = cp.GetsecIndex();
//观察100毫秒
Thread.sleep(100);
}
//观察500毫秒
Thread.sleep(500);
//索引归位
Index = 0;
}
}catch(IOException e){
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
inTwo.close();
inOne.close();
bf.close();
}
}
}
//实现类
import java.util.ArrayList;
class MyCompiler {
StringBuffer scannerResult = new StringBuffer(100);
char ch;
int signal = 0;
int Index = 0;
int secIndex = 0;
boolean isKeyword = false;
public MyCompiler() {
}
// 驱动表,抽象为一个字符数组,索引0~25为小写英文字母,26~51为大写英文字母,52~61为数字,
// 62~74为界符,75~86为算符,87~93为特殊字符
char[] c = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'f', 'k', 'l',
'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',
'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '*', '%',
'&', '|', '<', '=', '>', '/', '+', '?', '!', '-', '[', ']', '{',
'}', ',', ';', ':', '.', '"', '(', ')', '\\', '#', '@', '^', '~',
'`', '$' };
// 70 + 13 + 9 = 92
// 62~73为算符
// 86~91为特殊字符
// secIndex变化,Index必须同步变化
public String Scanner(String bufferOne, int Index, ArrayList<String> str) {
// 主程序和被调程序的索引一致性检查
if (secIndex == Index) {
this.secIndex = Index;
this.Index = Index;
} else {
this.secIndex = Index;
this.Index = Index;
}
// 如果到达了一行的末尾,则说明已经开始解析下一行代码
if (secIndex == bufferOne.length()) {
// 索引归位
secIndex = 0;
this.Index = 0;
}
// 开始解析单词
while ((bufferOne != null) && (secIndex <= bufferOne.length() - 1)) {
// 进入扫描阶段,获取第一个字符,或者当前指针指向的字符
ch = bufferOne.charAt(secIndex);
// 如果是注释行,直接打印出来
if (String.valueOf(ch).equals("/")
&& String.valueOf(bufferOne.charAt(secIndex + 1)).equals(
"/")) {
System.out.println(bufferOne);
// if(secIndex <= bufferOne.length() - 1)
// {
secIndex = bufferOne.length();
return "annotation";
// }
// else
// {
// secIndex = bufferOne.length();
// return "//";
// }
}
// 如果是数字常数
if ((secIndex + 1) <= bufferOne.length() - 2
&& (Character.isDigit(ch) || (ch == '.' && Character
.isDigit(bufferOne.charAt(secIndex + 1))))) {
signal = 0;
}
// 如果是小写字母或者大写字母或者是下划线
else if (Character.isLowerCase(ch) || Character.isUpperCase(ch)
|| ch == '_') {
signal = 1;
}
// 如果是空白字符
else if (Character.isSpaceChar(ch)) {
signal = 3;
secIndex = secIndex + 1;
this.Index = secIndex;
}
// 其他情况为界符或者算符或者特殊字符
else {
for (int i = 62; i <= 73; i++) {
if (ch == c[i]) {
// 如果是算符
signal = 4;
break;
}
}
// 如果不是算符,则判断是界符还是特殊字符
if (signal != 4) {
for (int i = 86; i <= 91; i++) {
// 特殊字符
if (ch == c[i]) {
signal = 6;
break;
}
}
// 界符
if (signal != 6) {
signal = 5;
}
}
}
// 根据字符继续向后扫描,判断并返回指定字符串
switch (signal) {
case 0:
// 循环的过程当中判断是否到达了一行的末尾
while (Character.isDigit((bufferOne.charAt(secIndex)))) {
if (secIndex < bufferOne.length() - 1) {
secIndex++;
} else {
// 如果到达一行的末尾,将secIndex自增1,便于主程序操控,进入下一行的扫描
secIndex = secIndex + 1;
break;
}
}
// 如果上面的while循环判断除了已经到达一行末尾,对出最外层while循环
if (secIndex == bufferOne.length()) {
scannerResult = new StringBuffer(bufferOne.substring(Index,
secIndex));
// 到达末尾,归零处理
secIndex = 0;
this.Index = 0;
break;
}
// 若未到达末尾,判断当前字符是否为空格,如果为空格,则此锁定的字符串只可能是数字
if (bufferOne.charAt(secIndex) == ' ') {
// 将空格一起返回到main()方法,空间开销可能会比较大
scannerResult = new StringBuffer(bufferOne.substring(Index,
secIndex));
this.Index = secIndex;
// 追加常数标志位
scannerResult = scannerResult.insert(0, '0');
}
// 2013年4月24日
// 5.4e223,5.24E9,.78,3E535,543e4
// 暂时不考虑正数中含有E字符的数字
// 根据不同情况讨论
else if ((bufferOne.charAt(secIndex) == '.')) {
int figure = 0;
while (Character.isDigit((bufferOne.charAt(secIndex
+ figure + 1)))) {
if ((secIndex + figure + 1) == bufferOne.length() - 1) {
secIndex = bufferOne.length();
this.Index = bufferOne.length();
return new StringBuffer(bufferOne.substring(Index,
secIndex + figure + 1)).insert(0, '0')
.toString();
}
figure++;
}
secIndex = secIndex + figure + 1;
this.Index = secIndex + figure + 1;
scannerResult = new StringBuffer(bufferOne.substring(Index,
secIndex));
scannerResult.insert(0, '0');
/****
* if(figure != 0 && (bufferOne.charAt(secIndex + figure) ==
* 'E')) {
* while(Character.isDigit((bufferOne.charAt(secIndex +
* figure + 1)))) { figure++; } //此时secIndex +
* figure处的字符已经非数字 //687678jio; scannerResult = new
* StringBuffer(bufferOne.substring(Index,secIndex +
* figure)); secIndex = secIndex + figure; this.Index =
* secIndex;
*
* //追加常数标志位,并且是一个小数,并且包含E scannerResult =
* scannerResult.insert(0, '0');
*
* }
*
* //数字中不包含E的情况 else if(figure != 0 &&
* (bufferOne.charAt(secIndex + figure) != 'E')) {
* scannerResult = new
* StringBuffer(bufferOne.substring(Index,secIndex +
* figure)); secIndex = secIndex + figure; this.Index =
* secIndex;
*
* //追加常数标志位,并且是一个小数,并且不包含E scannerResult =
* scannerResult.insert(0, '0'); }
*******/
}
// 直接截取数字
else {
scannerResult = new StringBuffer(bufferOne.substring(Index,
secIndex));
this.Index = secIndex;
// 设为标示符
scannerResult = scannerResult.insert(0, '0');
}
break;
//case 1:
case 1:
//System.out.println("enter in 111111111");
// 需要判断是否为关键字
while (Character.isLowerCase((bufferOne.charAt(secIndex)))
|| Character.isUpperCase(((bufferOne.charAt(secIndex))))
|| bufferOne.charAt(secIndex) == '_'
|| Character.isDigit(bufferOne.charAt(secIndex))) {
if (secIndex < bufferOne.length() - 1) {
secIndex++;
} else {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 1));
// scannerResult = scannerResult.insert(0, '2');
secIndex = bufferOne.length();
this.Index = bufferOne.length();
// return scannerResult.toString();
break;
}
}
/****
* //判断是否为保留字
* if(Character.isLowerCase((bufferOne.charAt(secIndex)))) {
* //判断是否为保留字曾经出现异常
* if(this.isKeyword(str,bufferOne.substring(Index,secIndex +
* 1))) { scannerResult = new
* StringBuffer(bufferOne.substring(Index,secIndex + 1));
* scannerResult.insert(0, '2'); this.Index = secIndex; break; }
* } else { isKeyword = false; } }
*****/
/**
* //出现保留字,跳出循环,将保留字返回给主控程序 if(isKeyword == true) { break; }
*
* //循环结束后没有遇到保留字 出现异常 scannerResult = new
* StringBuffer(bufferOne.substring(Index,secIndex)); this.Index
* = secIndex;
******/
//到达该行末尾说明已经截取了单词
if (secIndex == bufferOne.length()) {
}
//如果没有到达该行的末尾
else {
scannerResult = new StringBuffer(bufferOne.substring(Index,
secIndex));
this.Index = secIndex;
}
if (isKeyword(str, scannerResult.toString())) {
// 是保留字
scannerResult = scannerResult.insert(0, '7');
} else {
// 不是保留字,则是关键字
scannerResult = scannerResult.insert(0, '2');
}
//secIndex++;
this.Index = secIndex;
break;
case 3:
while (bufferOne.charAt(secIndex) == ' ') {
secIndex++;
}
this.Index = secIndex;
break;
// 判断算符
case 4:
// 判断是否为“==”
if (ch == '=') {
// kjkjkjn==
if (((secIndex + 1) <= bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 1) == '=') {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 2));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 2;
this.Index = secIndex;
} else if ((secIndex + 1) == bufferOne.length()) {
secIndex = secIndex + 1;
this.Index = secIndex;
return new StringBuffer(bufferOne.substring(Index,
secIndex)).insert(0, '4').toString();
} else {
secIndex = secIndex + 1;
this.Index = secIndex;
return new StringBuffer(bufferOne.substring(Index,
secIndex)).insert(0, '4').toString();
}
}
else if (ch == '+') {
if (((secIndex + 1) <= bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 1) == '=') {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 2));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 2;
this.Index = secIndex;
} else if (((secIndex + 1) < bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 1) == '+') {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 2));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 2;
this.Index = secIndex;
} else if (((secIndex + 1) < bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 1) != '='
&& bufferOne.charAt(secIndex + 1) != '+') {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 1));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 1;
this.Index = secIndex;
}
}
else if (ch == '-') {
if (((secIndex + 1) <= bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 1) == '-') {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 2));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 2;
this.Index = secIndex;
} else if (((secIndex + 1) < bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 1) == '=') {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 2));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 2;
this.Index = secIndex;
} else if (((secIndex + 1) < bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 1) != '-'
&& bufferOne.charAt(secIndex + 1) != '=') {
if (Character.isDigit(bufferOne.charAt(secIndex + 1))) {
// 为减号或者负号
scannerResult = new StringBuffer(
bufferOne.substring(Index, secIndex + 1));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 1;
this.Index = secIndex;
}
}
}
else if (ch == '*') {
if (((secIndex + 1) <= bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 1) == '=') {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 2));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 2;
this.Index = secIndex;
}
else if ((secIndex + 1) == bufferOne.length()) {
secIndex = secIndex + 1;
this.Index = secIndex;
return new StringBuffer(bufferOne.substring(Index,
secIndex)).insert(0, '4').toString();
} else {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 1));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 1;
this.Index = secIndex;
}
}
else if (ch == '/') {
if (((secIndex + 1) <= (bufferOne.length() - 1) && bufferOne
.charAt(secIndex + 1) == '=')) {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 2));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 2;
this.Index = secIndex;
}
else if ((secIndex + 1) == bufferOne.length()) {
secIndex = secIndex + 1;
this.Index = secIndex;
return new StringBuffer(bufferOne.substring(Index,
secIndex)).insert(0, '4').toString();
} else {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 1));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 1;
this.Index = secIndex;
}
}
else if (ch == '%') {
if ((secIndex + 1) <= (bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 1) == '=') {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 2));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 2;
this.Index = secIndex;
}
else if ((secIndex + 1) == bufferOne.length()) {
secIndex = secIndex + 1;
this.Index = secIndex;
return new StringBuffer(bufferOne.substring(Index,
secIndex)).insert(0, '4').toString();
} else {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 1));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 1;
this.Index = secIndex;
}
}
else if (ch == '!') {
if ((secIndex + 1) <= (bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 1) == '=') {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 2));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 2;
this.Index = secIndex;
}
else if ((secIndex + 1) == bufferOne.length()) {
secIndex = secIndex + 1;
this.Index = secIndex;
return new StringBuffer(bufferOne.substring(Index,
secIndex)).insert(0, '4').toString();
} else {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 1));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 1;
this.Index = secIndex;
}
}
else if (ch == '&') {
if ((secIndex + 1) <= (bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 1) == '&') {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 2));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 2;
this.Index = secIndex;
}
else if ((secIndex + 1) <= (bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 1) == '=') {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 2));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 2;
this.Index = secIndex;
}
else if ((secIndex + 1) == bufferOne.length()) {
secIndex = secIndex + 1;
this.Index = secIndex;
return new StringBuffer(bufferOne.substring(Index,
secIndex)).insert(0, '4').toString();
} else {
secIndex = secIndex + 1;
this.Index = secIndex;
return new StringBuffer(bufferOne.substring(Index,
secIndex)).insert(0, '4').toString();
}
}
else if (ch == '|') {
if ((secIndex + 1) <= (bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 1) == '=') {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 2));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 2;
this.Index = secIndex;
}
else if ((secIndex + 1) == (bufferOne.length())) {
secIndex = secIndex + 1;
this.Index = secIndex;
return new StringBuffer(bufferOne.substring(Index,
secIndex)).insert(0, '4').toString();
} else if ((secIndex + 1) <= (bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 1) == '|') {
secIndex = secIndex + 2;
this.Index = secIndex;
return new StringBuffer(bufferOne.substring(Index,
secIndex)).insert(0, '4').toString();
} else if ((secIndex + 1) <= (bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 1) != '|') {
secIndex = secIndex + 1;
this.Index = secIndex;
return new StringBuffer(bufferOne.substring(Index,
secIndex)).insert(0, '4').toString();
}
/*****
* else { scannerResult = new
* StringBuffer(bufferOne.substring(Index,secIndex + 1));
* scannerResult = scannerResult.insert(0, 4); secIndex =
* secIndex + 1; this.Index = secIndex; }
*****/
}
else if (ch == '>') {
// >=
if ((secIndex + 1) <= (bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 1) == '=') {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 2));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 2;
this.Index = secIndex;
}
// >>=,>>>
else if ((secIndex + 1) <= (bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 1) == '>') {
if ((secIndex + 2) <= (bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 2) == '=') {
scannerResult = new StringBuffer(
bufferOne.substring(Index, secIndex + 3));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 3;
this.Index = secIndex;
}
else if ((secIndex + 2) <= (bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 2) == '>') {
scannerResult = new StringBuffer(
bufferOne.substring(Index, secIndex + 3));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 3;
this.Index = secIndex;
} else if ((secIndex + 2) <= (bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 2) != '>'
&& bufferOne.charAt(secIndex + 2) == '=') {
scannerResult = new StringBuffer(
bufferOne.substring(Index, secIndex + 2));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 2;
this.Index = secIndex;
} else if ((secIndex + 2) == (bufferOne.length())) {
scannerResult = new StringBuffer(
bufferOne.substring(Index, secIndex + 2));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 2;
this.Index = secIndex;
}
else {
// 这种情况按照无符号位移处理
scannerResult = new StringBuffer(
bufferOne.substring(Index, secIndex + 2));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 2;
this.Index = secIndex;
}
}
/****
* else if(bufferOne.charAt(secIndex + 1) == '>' &&
* bufferOne.charAt(secIndex + 2) == '>') { scannerResult =
* new StringBuffer(bufferOne.substring(Index,++secIndex));
* scannerResult = scannerResult.insert(0, 4); this.Index =
* secIndex; }
****/
// 纯'>'号
else {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 1));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 1;
this.Index = secIndex;
}
}
else if (ch == '<') {
if ((secIndex + 1) <= (bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 1) == '=') {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 2));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 2;
this.Index = secIndex;
}
else if ((secIndex + 1) <= (bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 1) == '<') {
if ((secIndex + 2) <= (bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 2) == '=') {
scannerResult = new StringBuffer(
bufferOne.substring(Index, secIndex + 3));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 3;
this.Index = secIndex;
}
/***
else if(bufferOne.charAt(secIndex + 1) == '<')
{
scannerResult = new StringBuffer(bufferOne.substring(Index,secIndex + 2));
scannerResult = scannerResult.insert(0, 4);
secIndex = secIndex + 2;
this.Index = secIndex;
}
***/
else if ((secIndex + 2) == (bufferOne.length())) {
secIndex = secIndex + 2;
this.Index = secIndex;
return new StringBuffer(bufferOne.substring(Index,
secIndex)).insert(0, '4').toString();
}
}
// 纯'<'号
else {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 1));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 1;
this.Index = secIndex;
}
}
else if (ch == '^') {
if ((secIndex + 1) <= (bufferOne.length() - 1)
&& bufferOne.charAt(secIndex + 1) == '=') {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 2));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 2;
this.Index = secIndex;
} else if ((secIndex + 1) == (bufferOne.length())) {
secIndex = secIndex + 1;
this.Index = secIndex;
return new StringBuffer(bufferOne.substring(Index,
secIndex)).insert(0, '4').toString();
} else {
scannerResult = new StringBuffer(bufferOne.substring(
Index, secIndex + 1));
scannerResult = scannerResult.insert(0, '4');
secIndex = secIndex + 1;
this.Index = secIndex;
}
}
break;
case 5:
// 如果当前字符是'"'
if (ch == '"') {
while (bufferOne.charAt(secIndex) != '"') {
secIndex++;
}
scannerResult = new StringBuffer(bufferOne.substring(this.Index,this.secIndex + 1));
scannerResult = scannerResult.insert(0, '8');
this.Index = secIndex;
}else
{
scannerResult = new StringBuffer(new Character(ch).toString());
scannerResult = scannerResult.insert(0, '5');
}
secIndex++;
this.Index = secIndex;
break;
case 6:
scannerResult = new StringBuffer(new Character(ch).toString());
scannerResult = scannerResult.insert(0, '6');
secIndex = secIndex + 1;
this.Index = secIndex;
break;
}// switch结束
break;
}// while 结束
return scannerResult.toString();
}// scanner结束
private boolean isKeyword(ArrayList<String> str, String s) {
int i;
boolean isTrue = false;
for (i = 0; i <= str.size() - 1; i++) {
// 注意此处必须使用“equals()方法”,不能使用“==”
if (s.equals(str.get(i))) {
isTrue = true;
break;
}
}
return isTrue;
}
public int GetsecIndex() {
return secIndex;
}
}
// 一、算术运算符:
// 单目::+(取正)-(取负) ++(自增1) - -(自减1)
// 双目:+ - * / %(取余)
// 三目:a>b?true:false
// 二、关系运算:
// 等于符号:==,不等于符号: != ,大于符号:>, 小于符号:<,大于等于符号: >= ,小于等于符号: <=
// 三、位运算符 逻辑运算符:
// 位运算符 与(&)、非(~)、或(|)、异或(^)
// 逻辑运算符 与(&&)、非(!)、或(||)
// 四、赋值运算符
// = += -= *= /= %= &= ^= |= <<= >>=
// 七 位移运算符
// << 带符号左移 >>带符号右移 >>> 无号右移