LL(1)文法判定的的Java实现

本文详细介绍了如何使用Java实现LL(1)文法的判定过程,包括First集合、Follow集合和Select集合的计算,以及具体的代码实现结构,如grammer类和analyze类的详细功能。
摘要由CSDN通过智能技术生成

LL(1)文法判定的java实现方法

LL(1)文法

LL(1)文法由三个部分组成

  • First集合

顾名思义,可知First(S)即为符合文法的字符串中可能出现在S符号前的终结符或非终结符组成的的集合

  • Follow集合

和First的定义类似

  • Select集合

该集合是用来判定文法是否为LL(1)文法的集合

代码组成

首先创建一个文件用来将文法读入程序中

文件内容

S
SABCD
abcd
S->AB
S->bC
A->&
A->b
B->&
B->aD
C->AD
C->b
D->aS
D->c

grammer类

定义的变量 p保存产生式 S保存起始符

private Map<Character,List<List<Character>>> P= new HashMap<>();
private Set<Character> VN=new HashSet<>();//非终止符
private Set<Character> VT=new HashSet<>();//终止符
private Character S;

读取文件内容保存到内存中

public Grammar(String fileNamePath)
{
    File file=new File(fileNamePath);
    if(!file.exists()||!file.isFile())
    {
        System.err.println("文件不存在");
        return;
    }
    Init(file);
}
private void Init(File file)
{
    try(BufferedReader bufferedReader=new BufferedReader(new FileReader(file))) {
        String str;
        int i=0;
        while ((str=bufferedReader.readLine())!=null)
        {
            i++;
            if(i==1)
            {
                if(str.trim()!="")
                {
                    S=str.charAt(0);
                }
            }
            else if(i==2||i==3)
            {
                for (int j=0;j<str.length();j++)
                {
                    Character c=str.charAt(j);
                    if(c!=' ')
               
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值