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...