📄 scan.java~43~
字号:
package 编译技术;
/**字符串打描的思想如下
* 首先获取要编译的源程序字符串,并将其中的每一个字符存储在一个字符数组里面
*
*/
public class Scan
{
//static int wordStart = 0; //标识一个单元的开始
//static int wordEnd = 0; //标识一个单元的结束
static int columns = 1; //记录当前列
static int rows = 1; //记录当前行
static int index = 0;
static boolean wordState = true; //标识当前单元是否为非法字符单元,如果是,则wordState为false
static String sourceString;
static char[] c;
static String s="";//要返回的子字符串
public static String getWord(String sourceString)
{
//扫描字符串并返回每一个独立的单元
c = new char[sourceString.length()];
c = sourceString.toCharArray();
while (index < c.length)
{
//当前单元的首字符为字母
if (isLetter(c[index]))
{
s=""+c[index];
//wordStart = index;
//wordEnd = index;
//向后移一个字符
index = index + 1;
//wordEnd = wordEnd + 1;
while (isLetter(c[index]) || isDigit(c[index]))
{
index++;
concat(s, c[index]);
//++wordEnd;
}
//返回以字母开头的字符串
//return sourceString.substring(wordStart, wordEnd + 1);
//doFirstLetter();
}
}
//当前单元的首字符为数字
/* else if (isDigit(c[index]))
{
wordStart = index;
wordEnd = index;
//doFirstDigit();
}
//当前单元的首字符为非字母非数字处理
else
{
wordStart=index;
wordEnd=index;
//doUnLetterDigit();
}
}*/
//return " ";
return s;//sourceString.substring(wordStart, wordEnd + 1);
}
//第一个是字母的处理方法
//如果下一个字符为数字或字母,则继续向后移
//直到非数字非字母为止,再判断当前单元
//是不是保留字,如果不是,则为正确的标识
//符
/*public static void doFirstLetter()
{
while(isLetter(c[index]) || isDigit(c[index]))
{
index=index+1;
wordEnd=wordEnd+1;
}
String word=sourceString.substring(wordStart,wordEnd+1);
int type = new ReservedWordTable().getKeyWordType(word);
Frame1.MessageBox.setText(Frame1.MessageBox.getText()+"\n["+type+","+word+"]");
}*/
//第一个是数字的处理方法
//判断下一个字符是不是数字或字母
//如果是字母,则标识wordState为false
//即此单元为非法标识符,但是要继续后面移
//直到有非数字非字母为止
/*public static void doFirstDigit()
{
while (isLetter(c[index]) || isDigit(c[index]))
{
if (isLetter(c[index]))
{
wordState = false;
}
index = index + 1;
wordEnd = wordEnd + 1;
}
String word = sourceString.substring(wordStart, wordEnd+1);
//int type = new ReservedWordTable().getKeyWordType(word);
if (wordState == false)
{
Frame1.MessageBox.setText(Frame1.MessageBox.getText() + "\nERROR in " +
rows + "," + columns + " " + word);
}
else
{
Frame1.MessageBox.setText(Frame1.MessageBox.getText()+"\n[11,"+word+"]");
}
}
//第一个是非字母非数字的处理方法
//判断是不是运算符或关系符
//首先判断是不是>,如果是,则判断下一个字符是不是=
//如果是,则当前单元为>=,开始下一单元,如果不是
//则当前单元为>,开始下一单元的处理
//其它类同
public static void doUnLetterDigit()
{
}*/
//判断是不是字母
public static boolean isLetter(char ch)
{
return java.lang.Character.isLetter(ch);
}
//判断是不是数字
public static boolean isDigit(char ch)
{
return java.lang.Character.isDigit(ch);
}
public char getBc(char[] sentenceChar)
{
try
{
while ( (sentenceChar[this.index]) == ' ')
{
this.index++;
}
this.index++;
}
catch (java.lang.ArrayIndexOutOfBoundsException e)
{
return ';'; //表示此行已经结束
}
return sentenceChar[index - 1];
}
public char getChar(char[] sentenceChar)
{
//next();
this.index++;
return sentenceChar[this.index - 1];
}
public static String concat(String token, char chr)
{
String tmpS = token + String.valueOf(chr);
token = tmpS;
return token;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -