輸入文法壓縮自產生式文法和不可達文法

2021-09-12 15:09:56 字數 2148 閱讀 3900

description

輸入開始符號,非終結符,終結符,產生式

壓縮自產生式文法和不可達文法後,按非終結符順序輸出產生式;

input

輸入開始符號;

非終結符個數,非終結符,空格符分隔;

終結符個數,終結符,空格符分隔;

產生式的個數,各產生式的左邊和右邊符號,空格符分隔;

output

delete self production:自產生式文法

unreached vn:不可達非終結符

delete production:不可達產生式

delete vn:不可達非終結符

g[開始符號]:

壓縮自產生式文法和不可達文法後,按非終結符順序輸出各產生式;

sample input:

z

8 z e f p g t q s

3 + * i

18z e+t

e ep g

f fp g

g gt t*i

q es i

e s+f

f fp

g gg

q e+f

e tf p

g fq t

q s

sample output:

delete self production:e::=e

delete self production:f::=f

delete self production:g::=g

unreached vn:q

delete production:q::=e

delete production:q::=e+f

delete production:q::=t

delete production:q::=s

delete vn:q

g[z]:

z::=e+t

e::=s+f | t

f::=fp | p

p::=g | g

g::=gg | f

t::=t*i

s::=i

code:

本程式主要有由四個模組組成

模組一功能:輸入並儲存資料

模組四功能:輸出產生式

#include #include #include #include #include using namespace std;

int main(int argc, char const *ar**)

vns;

struct vts;

struct ps;

vectoryoubu;

cin >> s;

cin >> vns.nv;

for(int i=0;i> vns.vn[i];

cin >> vts.nt;

for(int i=0;i> vts.vt[i];

int n;

cin >> n;

std::map> m;

while(n--)

// handle data

// find self production

for (int i = 0; i < vns.nv; ++i)

else

} }// find unreached vn

std::vectors;

std::vectorunreached;

for(int i = 0; i < vns.nv ; i++)

auto it = s.begin();

while(it != s.end())

for(int i = 0; i < youbu.size(); i++)

} if(flag == 0)

cout << "delete vn:" << c << endl;

s.erase(it);

} else

} // output g[start]

cout << "g[" << s << "]:" << endl;

for (int i = 0; i < s.size(); ++i)

cout << endl;

} return 0;

}

編譯原理加標記法(壓縮文法等價變換)

include using namespace std 儲存左右部的字串和標記 struct str 判斷終結符和非終結符 int norterminal char c int main num len 得到所有的輸入規則的左部和右部 for unsigned i 0 i0 strl i flag ...

MVC下壓縮輸入的HTML內容

在mvc下如何壓縮輸出的html 替換html 中的空白,換行符等字元?1.首先要了解mvc是如何輸出html 到客戶端的,先了解下controller這個類,裡面有很多方法,我們需要的主要有兩個 onactionexecuting和onresultexecuted 2.新建乙個基類,繼承自 sys...

MVC下壓縮輸入的HTML內容

在mvc下如何壓縮輸出的html 替換html 中的空白,換行符等字元?1.首先要了解mvc是如何輸出html 到客戶端的,先了解下controller這個類,裡面有很多方法,我們需要的主要有兩個 onactionexecuting和onresultexecuted 2.新建乙個基類,繼承自 sys...