📄 compiler.java
字号:
t.getTokenName().equalsIgnoreCase("or"))
{
match(t.getTokenName(),"KeyWord");
}
}
/**************************************************************************/
private void term()
{
factor();
term2();
}
/**************************************************************************/
private void term2()
{
if(
t.getTokenName().equals("*")||
t.getTokenName().equals("/")||
t.getTokenName().equalsIgnoreCase("div")||
t.getTokenName().equalsIgnoreCase("mod")||
t.getTokenName().equalsIgnoreCase("and"))
{
match(t.getTokenName(),"KeyWord");
mulop();
factor();
term2();
}
else
{}
}
/**************************************************************************/
private void factor()
{
if(t.getTokenName().equalsIgnoreCase("not"))
{
match("not","KeyWord");
factor();
}
else
if(t.getTokenName().matches("[a-zA-Z]\\w*"))
{
match("","Identifier");
factor2();
}
else
if(t.getTokenName().matches("\\d+")||
t.getTokenName().matches("\\d+.\\d+"))
{
match("","Numeric");
}
else
if(t.getTokenName().equals("("))
{
match("(","KeyWord");
expression();
match(")","KeyWord");
}
}
/**************************************************************************/
private void factor2()
{
if(t.getTokenName().equals("("))
{
match("(","KeyWord");
expression_list();
match(")","KeyWord");
}
else
{}
}
/**************************************************************************/
private void mulop()
{
if(t.getTokenName().equals("*")||
t.getTokenName().equals("/")||
t.getTokenName().equalsIgnoreCase("div")||
t.getTokenName().equalsIgnoreCase("mod")||
t.getTokenName().equalsIgnoreCase("and"))
{
match(t.getTokenName(),"KeyWord");
}
}
/**************************************************************************/
/**The following method is used for check the token with regular syntax.
/**************************************************************************/
private void match(String name,String type)
{
if(type.equalsIgnoreCase(t.getTokenType())&&
!t.getTokenType().equalsIgnoreCase("KeyWord")&&
!t.getTokenType().equalsIgnoreCase("Identifier"))
nextToken();
else
if(name.equalsIgnoreCase(t.getTokenName())&&
type.equalsIgnoreCase(t.getTokenType()))
nextToken();
else
if(type.equalsIgnoreCase(t.getTokenType())&&
!t.getTokenType().equalsIgnoreCase("KeyWord"))
nextToken();
else
errorMessage(name);
}
/**************************************************************************/
/**The following method is used for taking the text from file or text area.
/**************************************************************************/
private void start()
{
scan=new Scanner(code);
}
/**************************************************************************/
/**The following method is used for indicating to new line from text.
/**************************************************************************/
private void newLine()
{
if(scan.hasNextLine())
{
counter++;
tokens=scan.nextLine();
token=new StringTokenizer(tokens," .;:=><,+-*/()[]{}",true);
temp =new StringTokenizer(tokens," .;:=><,+-*/()[]{}",true);
nextToken();
}
}
/**************************************************************************/
/**The following method is used for getting new token.
/**************************************************************************/
private void nextToken()
{
if(token.hasMoreTokens())
{
String str=token.nextToken();
String strTemp;
String tokenType="";
if(!str.matches("\\s*"))
{
if(str.equals("{"))
{
while(token.hasMoreTokens())
{
str=token.nextToken();
System.out.println("************\n"+
str+"\n"+
"************\n");
if(str.equals("}"))
nextToken();
}
}
/**************************************************************/
else
if(str.equals(":"))
{
stop:
{
while(temp.hasMoreTokens())
{
strTemp=temp.nextToken();
if(strTemp.equals(":"))
{
if(temp.hasMoreTokens())
{
strTemp=temp.nextToken();
if(strTemp.equals("="))
{
if(token.hasMoreTokens())
strTemp=token.nextToken();
str=str.concat(strTemp);
}
break stop;
}
}
}
}
}
/**************************************************************/
else
if(str.equals("<"))
{
stop:
{
while(temp.hasMoreTokens())
{
strTemp=temp.nextToken();
if(strTemp.equals("<"))
{
if(temp.hasMoreTokens())
{
strTemp=temp.nextToken();
if(strTemp.equals("=")||strTemp.equals(">"))
{
if(token.hasMoreTokens())
strTemp=token.nextToken();
str=str.concat(strTemp);
}
break stop;
}
}
}
}
}
/**************************************************************/
else
if(str.equals(">"))
{
stop:
{
while(temp.hasMoreTokens())
{
strTemp=temp.nextToken();
if(strTemp.equals(">"))
{
if(temp.hasMoreTokens())
{
strTemp=temp.nextToken();
if(strTemp.equals("="))
{
if(token.hasMoreTokens())
strTemp=token.nextToken();
str=str.concat(strTemp);
}
break stop;
}
}
}
}
}
/**************************************************************/
else
if(str.matches("\\d+"))
{
stop:
{
while(temp.hasMoreTokens())
{
strTemp=temp.nextToken();
if(strTemp.matches("\\d+"))
{
if(temp.hasMoreTokens())
{
strTemp=temp.nextToken();
if(strTemp.equals("."))
{
if(token.hasMoreTokens())
strTemp=token.nextToken();
str=str.concat(strTemp);
if(temp.hasMoreTokens())
{
strTemp=temp.nextToken();
if(strTemp.matches("\\d+"))
if(token.hasMoreTokens())
strTemp=token.nextToken();
str=str.concat(strTemp);
}
}
}
break stop;
}
}
}
}
/**************************************************************/
else
if(str.equals("."))
{
stop:
{
while(temp.hasMoreTokens())
{
strTemp=temp.nextToken();
if(strTemp.equals("."))
{
if(temp.hasMoreTokens())
{
strTemp=temp.nextToken();
if(strTemp.equals("."))
{
if(token.hasMoreTokens())
strTemp=token.nextToken();
str=str.concat(strTemp);
}
break stop;
}
}
}
}
}
/**************************************************************/
if(isKeyWord(str))
tokenType="KeyWord";
else
if(str.matches("[a-zA-Z]\\w*"))
tokenType="Identifier";
else
if(str.matches("\\d+")||str.matches("\\d+.\\d+"))
tokenType="Numeric";
String lineNo=Integer.toString(counter);
/*********************************/
t=new Token(str,tokenType,lineNo);
/*********************************/
System.out.println(str+"\t\t"+tokenType+"\t\t\t\t"+counter);
}
else
nextToken();
}
else
newLine();
}
/**************************************************************************/
/**The following method is used for checking if the token is KeyWord.
/**************************************************************************/
private boolean isKeyWord(String s)
{
KeyWordsTable key=new KeyWordsTable();
int index=0;
while(index<key.KeyWords.length)
{
if(s.equalsIgnoreCase(key.KeyWords[index]))
return true;
index++;
}
return false;
}
/**************************************************************************/
/**The following method is used for formatting the error message.
/**************************************************************************/
private void errorMessage(String name)
{
numberOfErrors++;
String infoError;
if(name.equals(""))
infoError="Illigal value ..";
else
infoError="Un expected : \t<<"+name+">>";
error+=infoError+"\nError detected at <"+t.getTokenName()+"> Line number : \t<"+t.getLineNo()+">\n\n";
// System.out.println(
// "Error detected at <"+t.getTokenName()+"> Line number <"+t.getLineNo()+">");
}
/**************************************************************************/
/**The following method is used for adding simple details about error.
/**************************************************************************/
private void errorDetails()
{
if(numberOfErrors==0)
details="No Errors founded\nProcess completed";
else
details="Number of Errors are : "+numberOfErrors;
}
/**************************************************************************/
/**The following method is used for retrieving the final formatted message.
/**************************************************************************/
public String getFinalMessage()
{
errorDetails();
return details+
"\n\n__________________BASCAL -- CREATOR 1.01V__________________\n\n"+
error;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -