编译原理将带“|”的规则转化

将E::=T*F|i形式的规则转化为E::=T*F 和E::=i的形式

#include<bits/stdc++.h>
using namespace std;
struct GRAM       //定义一个产生式结构体
{
    string left; //定义产生式的左部
    string right; //定义产生式的右部
}; 
int main()
{
    char str[7][80];  
    const char *ch = "|";  
    char *result;  
    vector<string> strN; 
    string grammer;
    cin>>grammer;
    for(int i=0;i<grammer.length();i++)
    {
        str[0][i]=grammer[i];
     } 
    result = strtok(str[0],ch);  
    while(result!=NULL)  
    {  
        strN.push_back(result);  
        result = strtok(NULL,ch);  
    }  
    for(int i=0;grammer!="#";i++)
    {
        cin>>grammer;
        //gets(str[i]);//注意用的是gets()可以连带空格都扫描进去  
        for(int h=0;h<grammer.length();h++)
        {
            str[i][h]=grammer[h];
        } 
        result = strtok(str[i],ch);  
        while(result!=NULL)  
        {  
            strN.push_back(result);  
            result = strtok(NULL,ch);  
        }  
    }
    cout<<"转化后的形式如下:"<<endl; 
    for(unsigned i=0;i<strN.size()-1&&i-1>=0;i++)
    {

        if(strN[i].find("::")==-1)
        {
            string add="";
            add=add+strN[i-1][0]+"::="+strN[i];
            strN[i]=add;
            //cout<<add<<endl;
        }

        cout<<strN[i]<<endl;
    }
}

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值