📄 parsingmethod.java
字号:
{
flag = false;
}
else
{
error = true;
flag = false;
}
}
if(error)
{
errorMethod.error("single",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
while(WordAnalyze.wordPointer<WordAnalyze.wordStringLength
&&!WordAnalyze.wordString[WordAnalyze.wordPointer].equals("}"))
{
advance();
}
clearStack();
clearQueue();
}
}
////////////////////express analyzing//////////////////
public void expressAnalyze()
{
expressA();
}
public void expressA()
{
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("("))
{
advance();
expressA();
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals(")"))
{
advance();
if(judgeOperator(WordAnalyze.wordString[WordAnalyze.wordPointer]))
{
advance();
expressA();
}
}
else
{
errorMethod.error("sign",0,")",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
}
}
else
if(judgeNum(WordAnalyze.wordString[WordAnalyze.wordPointer]))
{
advance();
expressB();
}
else
if(judgeSymbol(WordAnalyze.wordString[WordAnalyze.wordPointer]))
{
if(!symbolIsExisting(WordAnalyze.wordString[WordAnalyze.wordPointer]))
{
errorMethod.error("symbol",1,WordAnalyze.wordString[WordAnalyze.wordPointer],WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
}
else
{
String s = getSymbolType(WordAnalyze.wordString[WordAnalyze.wordPointer]);
String t = getTopStack();
if(t.equals("double")||t.equals("float"))
{
if(s.equals("double")||s.equals("float")||s.equals("int"))
{
}
else
{
errorMethod.error("express",1,WordAnalyze.wordString[WordAnalyze.wordPointer],WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
}
}
else
if(!t.equals(s))
{
errorMethod.error("express",1,WordAnalyze.wordString[WordAnalyze.wordPointer],WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
}
}
advance();
expressB();
}
else
{
errorMethod.error("express",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
}
}
public void expressB()
{
if(judgeOperator(WordAnalyze.wordString[WordAnalyze.wordPointer]))
{
advance();
expressA();
}
}
//////////////logic express analyze///////////
public void logicExpressAnalyze()
{
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals(")"))
{
errorMethod.error("logicExpress",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
}
logicFlag = true;
feiFlag = true;
logicExpressA();
logicFlag = false;
feiFlag= false;
}
public void logicExpressA()
{
logicExpressB();
logicExpressD();
}
public void logicExpressD()
{
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("||")
||WordAnalyze.wordString[WordAnalyze.wordPointer].equals("&&"))
{
logicFlag = true;
feiFlag = true;
advance();
logicExpressB();
}
}
public void logicExpressB()
{
if(feiFlag&&WordAnalyze.wordString[WordAnalyze.wordPointer].equals("!"))
{
advance();
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("("))
{
advance();
logicExpressB();
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals(")"))
{
advance();
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("&&")
||WordAnalyze.wordString[WordAnalyze.wordPointer].equals("||"))
{
logicExpressD();
}
}
else
{
errorMethod.error("sign",0,")",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
}
}
else
if(judgeSymbol(WordAnalyze.wordString[WordAnalyze.wordPointer]))
{
if(symbolIsExisting(WordAnalyze.wordString[WordAnalyze.wordPointer]))
{
if(getSymbolType(WordAnalyze.wordString[WordAnalyze.wordPointer]).equals("char"))
{
errorMethod.error("logicExpress",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
}
else
{
advance();
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("&&")
||WordAnalyze.wordString[WordAnalyze.wordPointer].equals("||"))
{
logicExpressD();
}
}
}
else
{
errorMethod.error("symbol",1,WordAnalyze.wordString[WordAnalyze.wordPointer],WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
}
}
else
if(judgeNum(WordAnalyze.wordString[WordAnalyze.wordPointer]))
{
advance();
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("&&")
||WordAnalyze.wordString[WordAnalyze.wordPointer].equals("||"))
{
logicExpressD();
}
}
else
{
errorMethod.error("logicExpress",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
}
}
else
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("("))
{
advance();
logicExpressB();
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals(")"))
{
advance();
if(judgeOperator(WordAnalyze.wordString[WordAnalyze.wordPointer]))
{
logicExpressC();
}
else
if(judgeLogicOperator(WordAnalyze.wordString[WordAnalyze.wordPointer])&&logicFlag==true)
{
logicExpressC();
}
else
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("||")
||WordAnalyze.wordString[WordAnalyze.wordPointer].equals("&&"))
{
logicExpressD();
}
}
else
{
errorMethod.error("sign",0,")",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
}
}
else
if(judgeSymbol(WordAnalyze.wordString[WordAnalyze.wordPointer]))
{
if(!symbolIsExisting(WordAnalyze.wordString[WordAnalyze.wordPointer]))
{
errorMethod.error("symbol",1,WordAnalyze.wordString[WordAnalyze.wordPointer],WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
}
else
{
if(getSymbolType(WordAnalyze.wordString[WordAnalyze.wordPointer]).equals("char"))
{
advance();
if(judgeLogicOperator(WordAnalyze.wordString[WordAnalyze.wordPointer]))
{
advance();
if(judgeSymbol(WordAnalyze.wordString[WordAnalyze.wordPointer]))
{
if(symbolIsExisting(WordAnalyze.wordString[WordAnalyze.wordPointer])&&getSymbolType(WordAnalyze.wordString[WordAnalyze.wordPointer]).equals("char"))
{
advance();
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("&&")
||WordAnalyze.wordString[WordAnalyze.wordPointer].equals("||"))
{
logicExpressD();
}
}
else
{
errorMethod.error("logicExpress",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
}
}
else
{
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("'"))
{
advance();
if(WordAnalyze.wordString[WordAnalyze.wordPointer].length()==1)
{
advance();
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("'"))
{
advance();
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("&&")
||WordAnalyze.wordString[WordAnalyze.wordPointer].equals("||"))
{
logicExpressD();
}
}
else
{
errorMethod.error("logicExpress",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
}
}
else
{
errorMethod.error("logicExpress",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
}
}
}
}
else
{
errorMethod.error("logicExpress",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
}
}
else
{
advance();
logicExpressC();
}
}
}
else
if(judgeNum(WordAnalyze.wordString[WordAnalyze.wordPointer]))
{
advance();
logicExpressC();
}
else
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("!"))
{
advance();
if(judgeSymbol(WordAnalyze.wordString[WordAnalyze.wordPointer]))
{
if(symbolIsExisting(WordAnalyze.wordString[WordAnalyze.wordPointer]))
{
advance();
logicExpressD();
}
else
{
errorMethod.error("symbol",1,WordAnalyze.wordString[WordAnalyze.wordPointer],WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
}
}
else
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("("))
{
logicExpressB();
}
else
{
errorMethod.error("logicExpress",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
}
}
}
public void logicExpressC()
{
if(judgeOperator(WordAnalyze.wordString[WordAnalyze.wordPointer]))
{
feiFlag = false;
advance();
logicExpressB();
}
else
if(judgeLogicOperator(WordAnalyze.wordString[WordAnalyze.wordPointer]))
{
feiFlag= false;
if(logicFlag)
{
advance();
logicFlag = false;
logicExpressB();
}
else
{
errorMethod.error("logicExpress",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
}
}
else
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("||")
||WordAnalyze.wordString[WordAnalyze.wordPointer].equals("&&"))
{
logicExpressD();
}
}
////////////////the symbol is exist or not//////////////
public boolean symbolIsExisting(String s)
{
boolean flag = false;
int i;
for(i=0;i<symbolTableLength&&!flag;i++)
{
if(symbolTable[i].getSymbolName().equals(s))
{
flag = true;
}
}
return flag;
}
///////////////get over of the error sentence////////////
public void getOverError()
{
while(WordAnalyze.wordPointer<WordAnalyze.wordStringLength-1
&&!WordAnalyze.wordString[WordAnalyze.wordPointer].equals(";"))
{
advance();
}
}
//////////////////succeed////////////////////
public void success()
{
if(successFlag)
{
CompileFrame.errorArea.append("SUCCEED"+String.valueOf('\n'));
}
else
{
CompileFrame.errorArea.append("Number of error: "+String.valueOf(errorNum)+String.valueOf('\n'));
}
}
////////show the symbol table//////////////////
public void showSymbolTable()
{
for(int i=0;i<symbolTableLength;i++)
{
CompileFrame.errorArea.append("symbol name:"+symbolTable[i].getSymbolName()+" type:"+symbolTable[i].getSymbolType()+String.valueOf('\n'));
}
}
public void showIncludeFile()
{
for(int i=0;i<fileNum;i++)
{
CompileFrame.errorArea.append("file name:"+includeFile[i].getFileName()+" type:"+includeFile[i].getFileType()+String.valueOf('\n'));
}
}
public void showErrorLine()
{
for(int i=0;i<errorNum;i++)
{
CompileFrame.errorArea.append("error line in errorLines:"+String.valueOf(errorLines[i])+String.valueOf('\n'));
}
}
///////////program analyze//////////////////
public void programAnalyze()
{
/////////the defination part/////////
defineAnalyze();
/////////the program part///////////
while(WordAnalyze.wordPointer<WordAnalyze.wordStringLength-1)
{
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("if"))
{
ifAnalyze();
clearStack();
clearQueue();
}
else
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("while"))
{
whileAnalyze();
clearStack();
clearQueue();
}
else
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("for"))
{
forAnalyze();
clearStack();
clearQueue();
}
else
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("printf"))
{
printfAnalyze();
clearStack();
clearQueue();
}
else
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals("scanf"))
{
scanfAnalyze();
clearStack();
clearQueue();
}
else
if(judgeSymbol(WordAnalyze.wordString[WordAnalyze.wordPointer]))
{
evaluateAnalyze();
clearStack();
clearQueue();
}
else
if(WordAnalyze.wordString[WordAnalyze.wordPointer].equals(";"))
{
nullAnalyze();
clearStack();
clearQueue();
}
else
{
errorMethod.error("internal",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
getOverError();
clearStack();
clearQueue();
}
}
}
public void parsingAnalyzeMethod()
{
if(WordAnalyze.wordStringLength==0)
{
errorMethod.error("nothing",0,"",WordAnalyze.lineOfWord[WordAnalyze.wordPointer]);
}
else
{
includeOtherFile();
if(WordAnalyze.wordPointer<WordAnalyze.wordStringLength)
{
mainProgram();
}
}
// showSymbolTable();
// showIncludeFile();
// showErrorLine();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -