这个程序有些局限性,即不能分析任意语法。
分析的语法如下:
代码结构如下:
代码如下:
Main.java:
package cn.porkbar.recursion;
import java.io.IOException;
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.println("请输入要分析的文件路径,输入-1退出:");
String op;
RecursionDown parser;
while (sc.hasNext())
{
op = sc.next();
if (op.equals("-1"))
{
System.out.println("谢谢使用!");
break;
}
else
{
try
{
parser = new RecursionDown(op);
parser.Parser();
}
catch (IOException e)
{
System.out.println("无法打开文件!");
}
}
System.out.println("*****************************\n请输入要分析的文件路径,输入-1退出:");
}
}
}
RecursionDown.java:
/*
规则:
⑴<程序>::=begin<语句串>end
⑵<语句串>::=<语句>{;<语句>}
⑶<语句>::=<赋值语句>
⑷<赋值语句>::=ID:=<表达式>
⑸<表达式>::=<项>{+<项> | -<项>}
⑹<项>::=<因子>{*<因子> | /<因子>
⑺<因子>::=ID | NUM | (<表达式>)
syn映射表:
-1:未知的符号
0:结束符$
10:自定义变量名
1、2...9:begin和end关键字(3-9为保留串,后续可继续扩充)
11:数字
12、13、14、15:加减乘除符号
16:';'字符
17:':='字符
18、19:左右括号
*/
package cn.porkbar.recursion;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import cn.porkbar.util.Util;
public class RecursionDown
{
private File file; //要读取的文件
static private String[] rwtab = {
"begin","end"}; //关键字映射表
private char[] pro = new char[1024*1024]; //可以读取1M以内的文件
private int p