资源简介

LR(0)完整的语法分析方法(拓广文法、识别活前缀状态机、LR0表、识别字符串)内有word详细说明

资源截图

代码片段和文件信息



// ConsoleApplication14.cpp : 此文件包含 “main“ 函数。程序执行将在此处开始并结束。
//
#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
set N_;
set T_;
set ALL_;

stack s;
struct pragram
{
string left;
string right;
}pragram[200];
struct all
{
    string left;
    vector right;
}all[20];
int ncount1=1;
int showVet(vector a)
{
    for(int i=0;i    {
        cout<    }
    cout<}
int input()     //拆解表达式
{
    freopen(“input.txt““r“stdin);   //可以选择文件 1(PPT109页面) 121(PPT121页面)  118(PPT118页面)
cin >> n;
for (int i = 0; i < n; i++)
{
string left;
cin >> left;
char c;
int t=-1;
while (1)
{
scanf(“%c“&c);
            if(t==-1) {t++;continue;}
if (c == ‘#‘) break;
if(c==‘|‘)
            {
                count1++;
                t=0;
                pragram[count1].left = left;
                continue;
            }
pragram[count1].left = left;
pragram[count1].right = pragram[count1].right+c;
t++;
}
count1++;
}
cout<    cout<<“拓广文法后:“<    string a=pragram[1].left;   //拿到第一条表达式左部
    a=a+“‘“;
    pragram[0].left=a;
    pragram[0].right=pragram[1].left;

for (int i =0;i< count1; i++)
{
cout << pragram[i].left<<“->“;
cout< ALL_.insert(pragram[i].left);
ALL_.insert(pragram[i].right);
}
cout<}
int N() //挑出非终极符号
{
    cout<<“非终极符号“<    for(int i=0;i    {
        string P=pragram[i].left;
         N_.insert(P);
    }
    set::iterator it;
    for(it=N_.begin();it!=N_.end();it++)
    {
        cout<<*it<    }
}
int split()     //分离所有符号
{
    string bc;
    set::iterator itit_Nit1;
    for(it=ALL_.begin();it!=ALL_.end();)
    {

        int check=0;
        string a=*it;
        int t=a.find(“ “);          //空格拆分
        if(t!=-1)
        {
            b=a.substr(0t);
            c=a.substr(t+1a.length());
            check=1;
        }

        if(check==1)
        {
            ALL_.erase(it);
            ALL_.insert(b);
            ALL_.insert(c);
            it=ALL_.begin();

        }
        else
        {
            ++it;
        }

    }
}
int T()     //挑选终极符号
{
    set::iterator itit_Nit1;
    for(it=T_.begin();it!=T_.end();)
    {
        int check=0;
        string a=*it;                                //拿到字符
        for(it_N=N_.begin();it_N!=N_.end();it_N++)
        {
            string b=*it_N;
            if(a==b)
            {   check=1;
                break;
            }
        }
        if(check==1)
        {
            T_.erase(it++);
        }
        else{
            it++;
        }
    }
    cout<<“终极符号“<    for(it1=T_

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-01-07 16:11  LR0分析表\
     文件       54658  2019-01-07 15:47  LR0分析表\LR0表.jpg
     文件          60  2019-01-07 15:52  LR0分析表\input.txt
     文件       17987  2019-01-07 16:09  LR0分析表\main.cpp
     文件     1151997  2019-01-07 16:09  LR0分析表\main.exe
     文件      135860  2019-01-07 16:09  LR0分析表\main.o
     文件      426088  2019-01-07 16:10  LR0分析表\reader_me.docx
     文件      119091  2019-01-07 16:01  LR0分析表\活前缀自动机图.jpg
     文件       56668  2019-01-07 15:47  LR0分析表\进程图.jpg

评论

共有 条评论