📄 getwords.java
字号:
package myCompiler;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Vector;
public class GetWords {
int senLength = 0;
int index = 0;
char[] sentenceChar = new char[1000];
String Token;
char CHAR;
int Num=100;
int Identnum=0;
SYM sym;
Vector<IDENT> Ident=new Vector<IDENT>();
int value;
String IDENTITY="IDENTITIER";
String DIGIT="DIGIT";
int Length=10;
int line=1;
private java.io.File SourceFile;
public java.io.RandomAccessFile randomAFile;
long pos=0;
long fileLength;
byte[] b;
public GetWords(String SourceFileName){
try {
SourceFile = new java.io.File(SourceFileName);
randomAFile = new java.io.RandomAccessFile(this.SourceFile, "r");
try {
fileLength=randomAFile.length();
randomAFile.seek(pos);
b=new byte[(int) fileLength+1];
randomAFile.readFully(b,0,(int) fileLength);
b[(int) fileLength]='$';
} catch (IOException e) {
e.printStackTrace();
}
KWTable.initKWTable();
IDETable.initIDETable();
}
catch (FileNotFoundException e) {
e.printStackTrace(System.err);
}
}
public char getchar() {
char c = 0;
c=(char) b[(int) pos];
pos++;
return c;
}
public static void main(String args[]){
String s="e:/pl0.txt";
GetWords g=new GetWords(s);
if(g.SourceFile.exists()){
do{
g.getsym();
System.out.println(g.sym.name+" "+g.sym.code);
}while(g.pos<g.fileLength);
for(int i=0;i<g.Ident.size();i++){
System.out.println(g.Ident.get(i).name+" "+g.Ident.get(i).type);
}
System.out.println(g.value);
}
}
public void getsym(){
sym=new SYM();
int Index1;
Token="";
CHAR=getchar();
while(CHAR==' '|(byte)CHAR==13|(byte)CHAR==10)
{if(CHAR==13)line++;
CHAR=getchar();
}
if (CHAR == '$') {
sym.name="$";
sym.code=IDETable.findKey(String.valueOf(CHAR));
return;
}
if(Character.isLetter(CHAR)){
Index1=0;
while (Character.isLetter(CHAR) || Character.isDigit(CHAR)) {
if(Character.isUpperCase(CHAR))
CHAR=Character.toLowerCase(CHAR);
if(Index1<10)
{ Token=contact(Token,CHAR);
Index1++;
}
CHAR = getchar();
}
retract();
if (KWTable.findKey(Token)>0){
sym.name=Token;
sym.code=KWTable.findKey(Token);
}
else {
int i;
for( i=0;i<Ident.size();i++)
if(Token.equalsIgnoreCase(Ident.get(i).name))
break;
if(i==Ident.size())
Ident.add(new IDENT(Token));
sym.name=Token;
sym.code=IDETable.findKey(IDENTITY);
}
}
else if(Character.isDigit(CHAR)){
Index1=0;
while (Character.isDigit(CHAR)) {
Token=contact(Token,CHAR);
Index1++;
CHAR = getchar();
}
retract();
value=Integer.parseInt(Token);
sym.name=Token;
sym.code=IDETable.findKey(DIGIT);
}
else if(CHAR=='+'|CHAR=='-'|CHAR=='*'|CHAR=='/'|CHAR=='='|CHAR=='.'
|CHAR==','|CHAR==';'|CHAR=='('|CHAR==')'|CHAR=='#')
{
Token=contact(Token,CHAR);
sym.name=Token;
sym.code=IDETable.findKey(Token);
}
else if(CHAR=='>')
{
Token=contact(Token,CHAR);
CHAR = getchar();
if(CHAR=='=')
{
Token=contact(Token,CHAR);
sym.name=Token;
sym.code=IDETable.findKey(Token);
}
else{
sym.name=Token;
sym.code=IDETable.findKey(Token);
retract();
}
}
else if(CHAR=='<')
{
Token=contact(Token,CHAR);
CHAR = getchar();
if(CHAR=='=')
{
Token=contact(Token,CHAR);
sym.name=Token;
sym.code=IDETable.findKey(Token);
CHAR = getchar();
}
else{
sym.name=Token;
sym.code=IDETable.findKey(Token);
retract();
}
}
else if(CHAR==':'){
Token=contact(Token,CHAR);
CHAR = getchar();
if(CHAR=='=')
{
Token=contact(Token,CHAR);
sym.name=Token;
sym.code=IDETable.findKey(Token);
}
else{
Error.error(1);
// retract();
}
}
else
{
Error.error(1);
}
}
public String contact(String TOKEN, char CHAR) {
String tmpS = TOKEN + String.valueOf(CHAR);
TOKEN = tmpS;
return TOKEN;
}
public void retract(){
pos--;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -