📄 syntaxanalyse.java
字号:
else return false;
}
else if("READ"==keystr)
{
if(true==Read())
{
return true;
}
else return false;
}
else if("WRITE"==keystr)
{
if(true==Write())
{
return true;
}
else return false;
}
else if("BEGIN"==keystr)
{
if(true==CompSent())
{
return true;
}
else return false;
}
else
{
System.out.println(keystr);
errstr="语句定义出现错误";
ErrorDoen(errstr);
return false;
}
//return true;
}
//赋值语句r
public boolean AssiPro()
{
if("IDENT"==keystr)
{
GetKeyWord();
if(true==Suffix())
{
return true;
}
else return false;
}
else
{
errstr="定义标识符出现错误";
ErrorDoen(errstr);
return false;
}
}
//后缀r
public boolean Suffix()
{
if("BECOMES"==keystr)
{
GetKeyWord();
if(true==Express())
{
return true;
}
else return false;
}
else if("LPAREN"==keystr)
{
GetKeyWord();
if(true==Express())
{
if("RPAREN"==keystr)
{
GetKeyWord();
return true;
}
else
{
errstr="定义后缀出现错误";
ErrorDoen(errstr);
//GetKeyWord();
return false;
}
}
else return false;
}
else return true;
}
//条件语句r
public boolean IfSent()
{
if("IF"==keystr)
{
GetKeyWord();
if(true==Conditio())
{
if("THEN"==keystr)
{
GetKeyWord();
if(true==Sentence())
{
return true;
}
else return false;
}
else
{
errstr="条件语句出现错误";
ErrorDoen(errstr);
GetKeyWord();
return false;
}
}
else return false;
}
else
{
errstr="条件语句出现错误";
ErrorDoen(errstr);
return false;
}
}
//条件r
public boolean Conditio()
{
if(("PLUS"==keystr)||("MINUS"==keystr)||("USNUMBER"==keystr)||("LPAREN"==keystr)||("IDENT"==keystr))
//表达式的frist集
{
if(true==Express())
{
if(true==RespOper())
{
if(true==Express())
return true;
else return false;
}
else return false;
}
else return false;
}
else if("ODD"==keystr)
{
GetKeyWord();
if(true==Express())
return true;
else return false;
}
else
{
errstr="条件语出现错误";
ErrorDoen(errstr);
//GetKeyWord();
return false;
}
}
//当型语句r
public boolean WhilSent()
{
if("WHILE"==keystr)
{
GetKeyWord();
if(true==IfSent())
{
if("DO"==keystr)
{
GetKeyWord();
if(true==Sentence())
return true;
else return false;
}
else
{
errstr="当语句出现错误";
ErrorDoen(errstr);
//GetKeyWord();
return false;
}
}
else return false;
}
else
{
errstr="当语句出现错误";
ErrorDoen(errstr);
//GetKeyWord();
return false;
}
}
//读语句r
public boolean Read()
{
if("READ"==keystr)
{
GetKeyWord();
if("LPAREN"==keystr)
{
GetKeyWord();
if("IDENT"==keystr)
{
GetKeyWord();
if(true==this.IdSuff())
{
if("RPAREN"==keystr)
{
GetKeyWord();
return true;
}
else
{
errstr="读语句出现错误";
ErrorDoen(errstr);
//GetKeyWord();
return false;
}
}
else return false;
}
else
{
errstr="读语句出现错误";
ErrorDoen(errstr);
//GetKeyWord();
return false;
}
}
else
{
errstr="读语句出现错误";
ErrorDoen(errstr);
//GetKeyWord();
return false;
}
}
else
{
errstr="读语句出现错误";
ErrorDoen(errstr);
//GetKeyWord();
return false;
}
}
//写语句
public boolean Write()
{
if("WRITE"==keystr)
{
GetKeyWord();
if("LPAREN"==keystr)
{
GetKeyWord();
if(true==this.Express())
{
if(true==this.ExprSuff())
{
if("RPAREN"==keystr)
{
GetKeyWord();
return true;
}
else
{
errstr="写语句出现错误";
ErrorDoen(errstr);
//GetKeyWord();
return false;
}
}
else return false;
}
else return false;
}
else
{
errstr="写语句出现错误";
ErrorDoen(errstr);
//GetKeyWord();
return false;
}
}
else
{
errstr="写语句出现错误";
ErrorDoen(errstr);
//GetKeyWord();
return false;
}
}
//复合语句
public boolean CompSent()
{
if("BEGIN"==keystr)
{
GetKeyWord();
if(true==this.Sentence())
{
if(true==this.SentSuff())
{
if("END"==keystr)
{
GetKeyWord();
return true;
}
else
{
errstr="复合语句出现错误";
ErrorDoen(errstr);
//GetKeyWord();
return false;
}
}
else return false;
}
else return false;
}
else
{
errstr="复合语句出现错误";
ErrorDoen(errstr);
//GetKeyWord();
return false;
}
}
//语句后缀
public boolean SentSuff()
{
while(true)
{
if("SEMICOLON"==keystr)
{
GetKeyWord();
if(true==Sentence()) {}
else return false;
}
else return true;
}
}
//表达式
public boolean Express()
{
if("PLUS"==keystr)
{
GetKeyWord();
if(true==Term())
{
if(true==TermSuff())
return true;
else return false;
}
else return false;
}
else if("MINUS"==keystr)
{
GetKeyWord();
if(true==Term())
{
if(true==TermSuff())
return true;
else return false;
}
else return false;
}
else if("IDENT"==keystr||"USNUMBER"==keystr||"LPAREN"==keystr)
{
if(true==Term())
{
if(true==TermSuff())
return true;
else return false;
}
else return false;
}
else
{
errstr="表达式语句出现错误";
ErrorDoen(errstr);
return false;
}
}
//表达式后缀
public boolean ExprSuff()
{
while(true)
{
if("COMMA"==keystr)
{
GetKeyWord();
if(true==Express())
return true;
else return false;
}
else return true;
}
}
//项
public boolean Term()
{
if(true==Factor())
{
if(true==FactSuff())
return true;
else return false;
}
else return false;
}
//项后缀
public boolean TermSuff()
{
while(true)
{
if("PLUS"==keystr||"MINUS"==keystr)//TermSuff()的first集中的字符
{
if(true==AddOper())
{
if(true==Term())
return true;
else return false;
}
else return false;
}
else return true;
}
}
//因子后缀
public boolean FactSuff()
{
while(true)
{
if("TIMES"==keystr||"SLASH"==keystr)//FactSuff()的first集中的字符
{
if(true==MulOper())
{
if(true==Factor()){}
else return false;
}
else return false;
}
else return true;
}
}
//因子
public boolean Factor()
{
if("IDENT"==keystr)
{
GetKeyWord();
return true;
}
else if("USNUMBER"==keystr)
{
GetKeyWord();
return true;
}
else if("LPAREN"==keystr)
{
GetKeyWord();
if(true==Express())
{
if("RPAREN"==keystr)
{
GetKeyWord();
return true;
}
else
{
System.out.println(keystr);
errstr="因子构造中缺少右括号出现错误";
ErrorDoen(errstr);
//GetKeyWord();
return false;
}
}
else return false;
}
else
{
errstr="因子构造出现错误";
ErrorDoen(errstr);
//GetKeyWord();
return false;
}
}
//加型运算符
public boolean AddOper()
{
if("PLUS"==keystr)
{
GetKeyWord();
return true;
}
else if("MINUS"==keystr)
{
GetKeyWord();
return true;
}
else
{
errstr="加型运算符构造出现错误";
ErrorDoen(errstr);
//GetKeyWord();
return false;
}
}
//乘型因子
public boolean MulOper()
{
if("TIMES"==keystr)
{
GetKeyWord();
return true;
}
else if("SLASH"==keystr)
{
GetKeyWord();
return true;
}
else
{
errstr="乘型运算符构造出现错误";
ErrorDoen(errstr);
//GetKeyWord();
return false;
}
}
//关系运算符
public boolean RespOper()
{
if("EQL"==keystr)
{
GetKeyWord();
return true;
}
else if("NLEQ"==keystr)
{
GetKeyWord();
return true;
}
else if("LSS"==keystr)
{
GetKeyWord();
return true;
}
else if("LEQ"==keystr)
{
GetKeyWord();
return true;
}
else if("GTR"==keystr)
{
GetKeyWord();
return true;
}
else if("GEQ"==keystr)
{
GetKeyWord();
return true;
}
else
{
errstr="关系运算符运算符构造出现错误";
ErrorDoen(errstr);
//GetKeyWord();
return false;
}
}
public static void main(String args[])
{
WordAnalyse worda=new WordAnalyse();
SyntaxAnalyse syntax=new SyntaxAnalyse();
String str=new String();
String str1=new String();
System.out.println("请你输入要进行词法分析的文件:");
str=worda.ReadLineFormConsole();
System.out.println("请你创建要存储词法分析后的文件名:");
str1=worda.ReadLineFormConsole();
if(false==worda.WriteFile(str1))
{
System.out.println("创建存储词法分析后的文件名失败:");
}
if(true==worda.OpenFile(str))
{
while(-1!=worda.FileIsEnd())
{
worda.GetSym();
if(-1!=worda.FileIsEnd())
{
worda.PrintResult();
}
}
System.out.println("词法分析总共错误出现"+worda.GetErrorNum());
}
System.out.println();
System.out.println("语法分析结果");
if(syntax.OpenFile(str1))
{
if(syntax.Program())
{
System.out.println("无语法错误!");
syntax.CloseFile();
}
}
else
{
System.out.println("无法打开文件!");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -