[copy]
This commit is contained in:
parent
0600b113d6
commit
936e9ea07d
|
|
@ -12,6 +12,7 @@
|
||||||
LL1::LL1()
|
LL1::LL1()
|
||||||
{
|
{
|
||||||
read_grammar();
|
read_grammar();
|
||||||
|
|
||||||
init_grammar_set();
|
init_grammar_set();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ void Grammar::read_grammar() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
string buf;
|
string buf;
|
||||||
string arrow = "->";
|
string arrow = "->";
|
||||||
string farrow;
|
string farrow;
|
||||||
|
|
@ -77,6 +78,7 @@ void Grammar::read_grammar() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 符号集 和 非终结符 去重
|
// 符号集 和 非终结符 去重
|
||||||
set<string> ssymbols(symbols.begin(), symbols.end());
|
set<string> ssymbols(symbols.begin(), symbols.end());
|
||||||
symbols.clear();
|
symbols.clear();
|
||||||
|
|
@ -96,7 +98,7 @@ void Grammar::read_grammar() {
|
||||||
set_difference(symbols.begin(), symbols.end(), VNs.begin(), VNs.end(), back_inserter(VTs));
|
set_difference(symbols.begin(), symbols.end(), VNs.begin(), VNs.end(), back_inserter(VTs));
|
||||||
|
|
||||||
infile.close();
|
infile.close();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Grammar::print_grammar()
|
void Grammar::print_grammar()
|
||||||
|
|
@ -158,8 +160,7 @@ void Grammar::init_grammar_set()
|
||||||
{
|
{
|
||||||
string symbol;
|
string symbol;
|
||||||
|
|
||||||
|
//system("pause");
|
||||||
|
|
||||||
// 对符号集中各符号进行推导 是否可以到达 $ 空符号
|
// 对符号集中各符号进行推导 是否可以到达 $ 空符号
|
||||||
for (int i = 0; i < symbols.size(); i++) {
|
for (int i = 0; i < symbols.size(); i++) {
|
||||||
symbol = symbols[i];
|
symbol = symbols[i];
|
||||||
|
|
@ -167,6 +168,7 @@ void Grammar::init_grammar_set()
|
||||||
symbol.clear();
|
symbol.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//system("pause");
|
||||||
// 初始化符号在产生式的 出现 依赖 情况
|
// 初始化符号在产生式的 出现 依赖 情况
|
||||||
init_appears_depend();
|
init_appears_depend();
|
||||||
|
|
||||||
|
|
@ -184,11 +186,13 @@ void Grammar::init_grammar_set()
|
||||||
|
|
||||||
// 初次遍历所有符号 生成初始的 FOLLOW 集
|
// 初次遍历所有符号 生成初始的 FOLLOW 集
|
||||||
|
|
||||||
|
|
||||||
// 构建 start 的 FOLLOW 集
|
// 构建 start 的 FOLLOW 集
|
||||||
follow[start] = this->symbol_infer_follow(start);
|
follow[start] = this->symbol_infer_follow(start);
|
||||||
follow[start].push_back("$");
|
follow[start].push_back("$");
|
||||||
queue.push_back(start);
|
queue.push_back(start);
|
||||||
|
|
||||||
|
|
||||||
// 构建除 start 的 FOLLOW 集
|
// 构建除 start 的 FOLLOW 集
|
||||||
for (int i = 0; i < symbols.size(); i++) {
|
for (int i = 0; i < symbols.size(); i++) {
|
||||||
symbol = symbols[i];
|
symbol = symbols[i];
|
||||||
|
|
@ -219,7 +223,7 @@ void Grammar::init_grammar_set()
|
||||||
}
|
}
|
||||||
symbol.clear();
|
symbol.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,12 +48,13 @@ int main(int argc, char** argv) {
|
||||||
//printDFA(dfa);
|
//printDFA(dfa);
|
||||||
DFA minimizedDFA = minimizeDFA(minimizeDFA(dfa));
|
DFA minimizedDFA = minimizeDFA(minimizeDFA(dfa));
|
||||||
removeUnreachableStates(minimizedDFA);
|
removeUnreachableStates(minimizedDFA);
|
||||||
//printDFA(minimizedDFA);
|
printDFA(minimizedDFA);
|
||||||
|
|
||||||
cout<<"DFA FINISH"<<endl;
|
cout<<"DFA FINISH"<<endl;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
try{
|
cout<<"LL1 START"<<endl;
|
||||||
for (auto input : inputs) {
|
for (auto input : inputs) {
|
||||||
|
cout<<outputs_grammar[i]<<endl;
|
||||||
LL1 ll;
|
LL1 ll;
|
||||||
//ll.print_grammar_set();
|
//ll.print_grammar_set();
|
||||||
|
|
||||||
|
|
@ -64,7 +65,7 @@ int main(int argc, char** argv) {
|
||||||
ll.build_LL1_predict();
|
ll.build_LL1_predict();
|
||||||
|
|
||||||
|
|
||||||
//ll.print_LL1_predict();
|
//ll.print_LL1_predict();噢
|
||||||
ll.get_token_strings(token_strings);
|
ll.get_token_strings(token_strings);
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -77,23 +78,10 @@ int main(int argc, char** argv) {
|
||||||
|
|
||||||
//ll.print_LL1_grammar_log();
|
//ll.print_LL1_grammar_log();
|
||||||
cout << endl;
|
cout << endl;
|
||||||
cout<<outputs_grammar[i]<<endl;
|
|
||||||
cout<<"end"<<endl;
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
cout<<"LL1 FINISH"<<endl;
|
cout<<"LL1 FINISH"<<endl;
|
||||||
}
|
|
||||||
catch(...){
|
|
||||||
cout<<"FINAL ERROR";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue