diff --git a/LL1/src/LL1.cpp b/LL1/src/LL1.cpp index f057f29..065d9af 100644 --- a/LL1/src/LL1.cpp +++ b/LL1/src/LL1.cpp @@ -12,6 +12,7 @@ LL1::LL1() { read_grammar(); + init_grammar_set(); } diff --git a/LL1/src/grammar.cpp b/LL1/src/grammar.cpp index 2aefe3e..d86eae3 100644 --- a/LL1/src/grammar.cpp +++ b/LL1/src/grammar.cpp @@ -30,6 +30,7 @@ void Grammar::read_grammar() { return; } + string buf; string arrow = "->"; string farrow; @@ -77,6 +78,7 @@ void Grammar::read_grammar() { } } + // 符号集 和 非终结符 去重 set ssymbols(symbols.begin(), symbols.end()); symbols.clear(); @@ -96,7 +98,7 @@ void Grammar::read_grammar() { set_difference(symbols.begin(), symbols.end(), VNs.begin(), VNs.end(), back_inserter(VTs)); infile.close(); - + } void Grammar::print_grammar() @@ -158,8 +160,7 @@ void Grammar::init_grammar_set() { string symbol; - - + //system("pause"); // 对符号集中各符号进行推导 是否可以到达 $ 空符号 for (int i = 0; i < symbols.size(); i++) { symbol = symbols[i]; @@ -167,6 +168,7 @@ void Grammar::init_grammar_set() symbol.clear(); } + //system("pause"); // 初始化符号在产生式的 出现 依赖 情况 init_appears_depend(); @@ -184,11 +186,13 @@ void Grammar::init_grammar_set() // 初次遍历所有符号 生成初始的 FOLLOW 集 + // 构建 start 的 FOLLOW 集 follow[start] = this->symbol_infer_follow(start); follow[start].push_back("$"); queue.push_back(start); + // 构建除 start 的 FOLLOW 集 for (int i = 0; i < symbols.size(); i++) { symbol = symbols[i]; @@ -219,7 +223,7 @@ void Grammar::init_grammar_set() } symbol.clear(); } - + } diff --git a/main/main.cpp b/main/main.cpp index 96ee7cf..5952139 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -48,12 +48,13 @@ int main(int argc, char** argv) { //printDFA(dfa); DFA minimizedDFA = minimizeDFA(minimizeDFA(dfa)); removeUnreachableStates(minimizedDFA); - //printDFA(minimizedDFA); + printDFA(minimizedDFA); cout<<"DFA FINISH"<