资源简介

实验要求: (1)要提供一个源程序编辑界面,让用户输入文法规则(可保存、打开存有文法规则的文件) (2)检查该文法是否存在着左递归,如果有,则消除该文法的左递归。因此需要提供窗口以便用户可以查看消除左递归后的结果。 (3)检查该文法是否存在着左公共因子,如果有,则消除该文法的左公共因子。因此需要提供窗口以便用户可以查看消除左公共因子的结果。 (4)需要提供窗口以便用户可以查看文法对应的LL(1)分析表,并报告该文法是否为LL(1)文法。 (5)需要提供窗口以便用户输入需要分析的句子。 (6)需要提供窗口以便用户查看使用LL(1)分析该句子的过程。【可以使用表格的形式逐行显示分析过程】 (7)应该书写完善的软件文档

资源截图

代码片段和文件信息

#include “ll.h“
#include
#include
#include 
#include
#include
#include“QDebug“
#include
#include
#include “sstream“
#include “fstream“

using namespace std;

//ll::ll()
//{

//}

bool ll::isin(char xint type)
{
    if(type==1)
    {
        for(int i=0;i<=num1;i++)
        {
            if(x==get1[i])
                return true;
        }
    }
    else if(type==2)
    {
        for(int i=0;i<=num2;i++)
        {
            if(x==get2[i])
                return true;
        }
    }
    return false;
}

void ll::readin(const std::string &pro)
{
    memset(table-1sizeof(table));
    string ss;
    ss+=pro[0];
    if(!isin(pro[0]1))
    {
        get1[num1]=pro[0];
        num1++;
    }
    for(int i=3;i    {
        if(pro[i]==‘|‘)
        {
             proce.push_back(ss);
             ss.clear();ss+=pro[0];
        }
        else
        {
            ss+=pro[i];
        }
        if(pro[i]>=‘A‘&&pro[i]<=‘Z‘&&!isin(pro[i]1))
        {
            get1[num1]=pro[i];
            num1++;
        }
        else if(!(pro[i]>=‘A‘&&pro[i]<=‘Z‘)&&pro[i]!=‘|‘&&pro[i]!=‘@‘&&!isin(pro[i]2))
        {
            get2[num2]=pro[i];
            num2++;
        }
    }
    proce.push_back(ss);
}

void ll::jiji()
{
    num2-=1;
    num1-=1;
    getnum[‘#‘]=0;
    getchar1[0]=‘#‘;
//cout<<“请输入所有的终结符:“<    char x;
    do
    {
    x=get2[num2];
    getnum[x]=++num;
    getchar1[num]=x;
    num2--;
    }while(num2>=0);
    numvt=++num;
    getnum[‘@‘]=numvt;        //kong zi
    getchar1[num]=(‘@‘);
    do
    {
    x=get1[num1];
    getnum[x]=++num;
    getchar1[num]=x;
    num1--;
    }while(num1>=0);
}

void ll::jiaoji(string &astring b)
{
    std::setse;
    for(int i=0;i       se.insert(a[i]);
    for(int i=0;i       se.insert(b[i]);
    string ans;
    std::set::iterator it;
    for(it=se.begin();it!=se.end();it++)
        ans+=*it;
    a=ans;
}

string ll::get_f(int vnint & has_0)
{
    if(vn==numvt)has_0=1;
    if(vn    string ans;
    for(int i=0;i        {
           if(getnum[proce[i][0]]==vn)
             ans+=get_f(getnum[proce[i][1]]has_0);
        }
    return  ans;
}
void ll::getfirst()
{
    for(int i=1;i<=numvt;i++)     //终结符,first集是其本身。
    {
         first[i]+=(‘0‘+i);
    }
    for(int j=0;j    {
        int k=0;int has_0=0;        //k扫瞄该产生式
       do{
            has_0=0;
            k++;
           if(k==proce[j].size())  //推到最后一个了,则附加空字
           {
               first[getnum[proce[j][0]]]+=(‘0‘+numvt);
               break;
          }                     //合并之
           jiaoji(first[getnum[proce[j][0]]]get_f(getnum[proce[j][k]]has_0));
         }
      while(has_0);  //到无法推出空字为止
    }
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-12-26 21:47  LL1_\
     文件        1095  2018-12-26 20:41  LL1_\LL1_.pro
     文件       23958  2018-12-26 20:41  LL1_\LL1_.pro.user
     文件       43553  2018-12-16 09:51  LL1_\LL1_.pro.user.cd10749
     文件       24118  2018-12-16 09:51  LL1_\LL1_.pro.user.d36f2ae
     目录           0  2018-12-26 21:47  LL1_\build-LL1_-Desktop_Qt_5_10_0_MinGW_32bit-Debug\
     文件        1033  2018-12-16 10:18  LL1_\build-LL1_-Desktop_Qt_5_10_0_MinGW_32bit-Debug\.qmake.stash
     文件       30226  2018-12-16 10:18  LL1_\build-LL1_-Desktop_Qt_5_10_0_MinGW_32bit-Debug\Makefile
     文件       47019  2018-12-16 10:18  LL1_\build-LL1_-Desktop_Qt_5_10_0_MinGW_32bit-Debug\Makefile.Debug
     文件       47109  2018-12-16 10:18  LL1_\build-LL1_-Desktop_Qt_5_10_0_MinGW_32bit-Debug\Makefile.Release
     目录           0  2018-12-26 21:47  LL1_\build-LL1_-Desktop_Qt_5_10_0_MinGW_32bit-Debug\debug\
     文件     2002991  2018-12-16 14:39  LL1_\build-LL1_-Desktop_Qt_5_10_0_MinGW_32bit-Debug\debug\LL1_.exe
     文件      516850  2018-12-16 14:39  LL1_\build-LL1_-Desktop_Qt_5_10_0_MinGW_32bit-Debug\debug\ll.o
     文件      537540  2018-12-16 12:43  LL1_\build-LL1_-Desktop_Qt_5_10_0_MinGW_32bit-Debug\debug\main.o
     文件      743658  2018-12-16 14:32  LL1_\build-LL1_-Desktop_Qt_5_10_0_MinGW_32bit-Debug\debug\mainwindow.o
     文件        4574  2018-12-16 12:43  LL1_\build-LL1_-Desktop_Qt_5_10_0_MinGW_32bit-Debug\debug\moc_mainwindow.cpp
     文件      453441  2018-12-16 12:43  LL1_\build-LL1_-Desktop_Qt_5_10_0_MinGW_32bit-Debug\debug\moc_mainwindow.o
     文件        9895  2018-12-16 10:18  LL1_\build-LL1_-Desktop_Qt_5_10_0_MinGW_32bit-Debug\debug\moc_predefs.h
     目录           0  2019-03-20 13:54  LL1_\build-LL1_-Desktop_Qt_5_10_0_MinGW_32bit-Debug\release\
     文件        6788  2018-12-16 11:18  LL1_\build-LL1_-Desktop_Qt_5_10_0_MinGW_32bit-Debug\ui_mainwindow.h
     文件        7612  2018-12-16 14:39  LL1_\ll.cpp
     文件         948  2018-12-16 14:49  LL1_\ll.h
     文件         183  2018-12-15 13:57  LL1_\main.cpp
     文件        3703  2018-12-26 20:54  LL1_\mainwindow.cpp
     文件         618  2018-12-16 12:43  LL1_\mainwindow.h
     文件        3558  2018-12-26 20:51  LL1_\mainwindow.ui
     文件        5694  2018-12-05 12:31  LL1_\my.ico

评论

共有 条评论