18 std::string name =
"PostCl Postfixes";
39 word.push_back(ptrnt2square1);
41 word.push_back(ptrta);
43 word.push_back(ptrnt1dot);
51 GrammarSymbolWordSet::const_iterator wordit;
55 v2square1a1dot.push_back(ptrnt2square1);
56 v2square1a1dot.push_back(ptrta);
57 v2square1a1dot.push_back(ptrnt1dot);
58 expectedWords.insert(v2square1a1dot);
61 va1dot.push_back(ptrta);
62 va1dot.push_back(ptrnt1dot);
63 expectedWords.insert(va1dot);
66 v1dot.push_back(ptrnt1dot);
67 expectedWords.insert(v1dot);
71 v1lambda.push_back(ptrtlambda);
72 expectedWords.insert(v1lambda);
75 if(wordSet.size() != expectedWords.size()){
76 std::stringstream errstr;
77 errstr <<
"Word set size was " << wordSet.size() <<
", but " << expectedWords.size() <<
" was expected." << std::endl;
78 throw Exception(name, errstr.str(), 1003);
82 for(wordit = expectedWords.begin(); wordit != expectedWords.end(); wordit++){
84 std::stringstream errstr;
85 errstr <<
"Word set did not contain the expected word ";
87 GrammarSymbolVector::const_iterator gsit;
88 for(gsit = wordit->begin(); gsit != wordit->end(); gsit++){
89 errstr << (*gsit)->Str();
92 throw Exception(name, errstr.str(), 1003);
107 std::string name =
"Fds Words";
140 GrammarSymbolWordSet::const_iterator wordit;
144 v1dot.push_back(ptrnt1dot);
145 expectedWords.insert(v1dot);
148 va1dot.push_back(ptrta);
149 va1dot.push_back(ptrnt1dot);
150 expectedWords.insert(va1dot);
153 v1lambda.push_back(ptrtlambda);
154 expectedWords.insert(v1lambda);
157 v2square.push_back(ptrnt2square);
158 expectedWords.insert(v2square);
161 va2square.push_back(ptrta);
162 va2square.push_back(ptrnt2square);
163 expectedWords.insert(va2square);
166 v1dot1a2square.push_back(ptrnt1dot1);
167 v1dot1a2square.push_back(ptrta);
168 v1dot1a2square.push_back(ptrnt2square);
169 expectedWords.insert(v1dot1a2square);
173 if(wordSet.size() != expectedWords.size()){
174 std::stringstream errstr;
175 errstr <<
"Word set size was " << wordSet.size() <<
", but " << expectedWords.size() <<
" was expected." << std::endl;
176 throw Exception(name, errstr.str(), 1003);
180 for(wordit = expectedWords.begin(); wordit != expectedWords.end(); wordit++){
182 std::stringstream errstr;
183 errstr <<
"Word set did not contain the expected word ";
185 GrammarSymbolVector::const_iterator gsit;
186 for(gsit = wordit->begin(); gsit != wordit->end(); gsit++){
187 errstr << (*gsit)->Str();
190 throw Exception(name, errstr.str(), 1003);
205 std::string name =
"FirstL Map";
258 gsv.push_back(ptrtlambda);
259 if(f.find(gsv)->second.size() != 1){
260 std::stringstream errstr;
261 errstr <<
"Word set of word lambda was expected to be of size 1, but was of size " << f.find(gsv)->second.size() <<
"." << std::endl;
262 throw Exception(name, errstr.str(), 1003);
264 if(f.find(gsv)->second.find(*tlambda) == f.find(gsv)->second.end()){
265 std::stringstream errstr;
266 errstr <<
"Word set of word lambda did not contain the expected word lambda." << std::endl;
267 throw Exception(name, errstr.str(), 1003);
272 gsv.push_back(ptrtb);
273 if(f.find(gsv)->second.size() != 1){
274 std::stringstream errstr;
275 errstr <<
"Word set of word b was expected to be of size 1, but was of size " << f.find(gsv)->second.size() <<
"." << std::endl;
276 throw Exception(name, errstr.str(), 1003);
278 if(f.find(gsv)->second.find(*tb) == f.find(gsv)->second.end()){
279 std::stringstream errstr;
280 errstr <<
"Word set of word b did not contain the expected word b." << std::endl;
281 throw Exception(name, errstr.str(), 1003);
286 gsv.push_back(ptrnt1dot);
287 if(f.find(gsv)->second.size() != 1){
288 std::stringstream errstr;
289 errstr <<
"Word set of word (1, dot) was expected to be of size 1, but was of size " << f.find(gsv)->second.size() <<
"." << std::endl;
290 throw Exception(name, errstr.str(), 1003);
292 if(f.find(gsv)->second.find(*ta) == f.find(gsv)->second.end()){
293 std::stringstream errstr;
294 errstr <<
"Word set of word (1, dot) did not contain the expected word a." << std::endl;
295 throw Exception(name, errstr.str(), 1003);
300 gsv.push_back(ptrnt1square);
301 if(f.find(gsv)->second.size() != 2){
302 std::stringstream errstr;
303 errstr <<
"Word set of word (1, square) was expected to be of size 2, but was of size " << f.find(gsv)->second.size() <<
"." << std::endl;
304 throw Exception(name, errstr.str(), 1003);
306 if(f.find(gsv)->second.find(*tb) == f.find(gsv)->second.end()){
307 std::stringstream errstr;
308 errstr <<
"Word set of word (1, square) did not contain the expected word b." << std::endl;
309 throw Exception(name, errstr.str(), 1003);
311 if(f.find(gsv)->second.find(*tlambda) == f.find(gsv)->second.end()){
312 std::stringstream errstr;
313 errstr <<
"Word set of word (1, square) did not contain the expected word lambda." << std::endl;
314 throw Exception(name, errstr.str(), 1003);
319 gsv.push_back(ptrnt1dot1);
320 if(f.find(gsv)->second.size() != 1){
321 std::stringstream errstr;
322 errstr <<
"Word set of word (1, dot, 1) was expected to be of size 1, but was of size " << f.find(gsv)->second.size() <<
"." << std::endl;
323 throw Exception(name, errstr.str(), 1003);
325 if(f.find(gsv)->second.find(*ta) == f.find(gsv)->second.end()){
326 std::stringstream errstr;
327 errstr <<
"Word set of word (1, dot, 1) did not contain the expected word a." << std::endl;
328 throw Exception(name, errstr.str(), 1003);
333 gsv.push_back(ptrta);
334 gsv.push_back(ptrnt1square);
335 if(f.find(gsv)->second.size() != 1){
336 std::stringstream errstr;
337 errstr <<
"Word set of word a(1, square) was expected to be of size 1, but was of size " << f.find(gsv)->second.size() <<
"." << std::endl;
338 throw Exception(name, errstr.str(), 1003);
340 if(f.find(gsv)->second.find(*ta) == f.find(gsv)->second.end()){
341 std::stringstream errstr;
342 errstr <<
"Word set of word a(1, square) did not contain the expected word a." << std::endl;
343 throw Exception(name, errstr.str(), 1003);
348 gsv.push_back(ptrnt1dot1);
349 gsv.push_back(ptrta);
350 gsv.push_back(ptrnt1square);
351 if(f.find(gsv)->second.size() != 1){
352 std::stringstream errstr;
353 errstr <<
"Word set of word (1, dot, 1)a(1, square) was expected to be of size 1, but was of size " << f.find(gsv)->second.size() <<
"." << std::endl;
354 throw Exception(name, errstr.str(), 1003);
356 if(f.find(gsv)->second.find(*ta) == f.find(gsv)->second.end()){
357 std::stringstream errstr;
358 errstr <<
"Word set of word (1, dot, 1)a(1, square) did not contain the expected word a." << std::endl;
359 throw Exception(name, errstr.str(), 1003);
364 gsv.push_back(ptrnt2square);
365 if(f.find(gsv)->second.size() != 2){
366 std::stringstream errstr;
367 errstr <<
"Word set of word (2, square) was expected to be of size 2, but was of size " << f.find(gsv)->second.size() <<
"." << std::endl;
368 throw Exception(name, errstr.str(), 1003);
370 if(f.find(gsv)->second.find(*ta) == f.find(gsv)->second.end()){
371 std::stringstream errstr;
372 errstr <<
"Word set of word (2, square) did not contain the expected word a." << std::endl;
373 throw Exception(name, errstr.str(), 1003);
375 if(f.find(gsv)->second.find(*tb) == f.find(gsv)->second.end()){
376 std::stringstream errstr;
377 errstr <<
"Word set of word (2, square) did not contain the expected word b." << std::endl;
378 throw Exception(name, errstr.str(), 1003);
383 gsv.push_back(ptrnt1square);
384 gsv.push_back(ptrnt1dot);
385 if(f.find(gsv)->second.size() != 2){
386 std::stringstream errstr;
387 errstr <<
"Word set of word (1, square)(1, dot) was expected to be of size 2, but was of size " << f.find(gsv)->second.size() <<
"." << std::endl;
388 throw Exception(name, errstr.str(), 1003);
390 if(f.find(gsv)->second.find(*ta) == f.find(gsv)->second.end()){
391 std::stringstream errstr;
392 errstr <<
"Word set of word (1, square)(1, dot) did not contain the expected word a." << std::endl;
393 throw Exception(name, errstr.str(), 1003);
395 if(f.find(gsv)->second.find(*tb) == f.find(gsv)->second.end()){
396 std::stringstream errstr;
397 errstr <<
"Word set of word (1, square)(1, dot) did not contain the expected word b." << std::endl;
398 throw Exception(name, errstr.str(), 1003);
411 std::string name =
"FirstA Selected Words";
438 word.push_back(ptrtlambda);
439 std::set<Terminal> firstSet =
FirstA(gr, word);
442 if(firstSet.size() != 1){
443 std::stringstream errstr;
444 errstr <<
"Word set of word lambda was expected to be of size 1, but was of size " << firstSet.size() <<
"." << std::endl;
445 throw Exception(name, errstr.str(), 1003);
447 if(firstSet.find(*tlambda) == firstSet.end()){
448 std::stringstream errstr;
449 errstr <<
"Word set of word lambda did not contain the expected word lambda." << std::endl;
450 throw Exception(name, errstr.str(), 1003);
458 word.push_back(ptrnt1square);
459 firstSet =
FirstA(gr, word);
462 if(firstSet.size() != 2){
463 std::stringstream errstr;
464 errstr <<
"Word set of word (1, square) was expected to be of size 2, but was of size " << firstSet.size() <<
"." << std::endl;
465 throw Exception(name, errstr.str(), 1003);
467 if(firstSet.find(*tb) == firstSet.end()){
468 std::stringstream errstr;
469 errstr <<
"Word set of word (1, square) did not contain the expected word b." << std::endl;
470 throw Exception(name, errstr.str(), 1003);
472 if(firstSet.find(*tlambda) == firstSet.end()){
473 std::stringstream errstr;
474 errstr <<
"Word set of word (1, square) did not contain the expected word lambda." << std::endl;
475 throw Exception(name, errstr.str(), 1003);
483 word.push_back(ptrnt1square);
484 word.push_back(ptrnt1dot);
485 firstSet =
FirstA(gr, word);
488 if(firstSet.size() != 2){
489 std::stringstream errstr;
490 errstr <<
"Word set of word (1, square)(1, dot) was expected to be of size 2, but was of size " << firstSet.size() <<
"." << std::endl;
491 throw Exception(name, errstr.str(), 1003);
493 if(firstSet.find(*ta) == firstSet.end()){
494 std::stringstream errstr;
495 errstr <<
"Word set of word (1, square)(1, dot) did not contain the expected word a." << std::endl;
496 throw Exception(name, errstr.str(), 1003);
498 if(firstSet.find(*tb) == firstSet.end()){
499 std::stringstream errstr;
500 errstr <<
"Word set of word (1, square)(1, dot) did not contain the expected word b." << std::endl;
501 throw Exception(name, errstr.str(), 1003);
514 std::string name =
"First Selected Words";
545 word.push_back(ptrtlambda);
546 std::set<Terminal> firstSet =
First(gr, word);
549 if(firstSet.size() != 1){
550 std::stringstream errstr;
551 errstr <<
"Word set of word lambda was expected to be of size 1, but was of size " << firstSet.size() <<
"." << std::endl;
552 throw Exception(name, errstr.str(), 1003);
554 if(firstSet.find(*tlambda) == firstSet.end()){
555 std::stringstream errstr;
556 errstr <<
"Word set of word lambda did not contain the expected word lambda." << std::endl;
557 throw Exception(name, errstr.str(), 1003);
565 word.push_back(ptrnt2square);
566 word.push_back(ptrnt1dot);
567 firstSet =
First(gr, word);
570 if(firstSet.size() != 2){
571 std::stringstream errstr;
572 errstr <<
"Word set of word (2, square)(1, dot) was expected to be of size 2, but was of size " << firstSet.size() <<
"." << std::endl;
573 throw Exception(name, errstr.str(), 1003);
575 if(firstSet.find(*tb) == firstSet.end()){
576 std::stringstream errstr;
577 errstr <<
"Word set of word (2, square)(1, dot) did not contain the expected word b." << std::endl;
578 throw Exception(name, errstr.str(), 1003);
580 if(firstSet.find(*ta) == firstSet.end()){
581 std::stringstream errstr;
582 errstr <<
"Word set of word (2, square)(1, dot) did not contain the expected word a." << std::endl;
583 throw Exception(name, errstr.str(), 1003);
591 word.push_back(ptrnt1square);
592 word.push_back(ptrnt1dot);
593 firstSet =
First(gr, word);
596 if(firstSet.size() != 2){
597 std::stringstream errstr;
598 errstr <<
"Word set of word (1, square)(1, dot) was expected to be of size 2, but was of size " << firstSet.size() <<
"." << std::endl;
599 throw Exception(name, errstr.str(), 1003);
601 if(firstSet.find(*ta) == firstSet.end()){
602 std::stringstream errstr;
603 errstr <<
"Word set of word (1, square)(1, dot) did not contain the expected word a." << std::endl;
604 throw Exception(name, errstr.str(), 1003);
606 if(firstSet.find(*tb) == firstSet.end()){
607 std::stringstream errstr;
608 errstr <<
"Word set of word (1, square)(1, dot) did not contain the expected word b." << std::endl;
609 throw Exception(name, errstr.str(), 1003);
622 std::string name =
"FirstRed Consistent Word";
644 word.push_back(ptrnt1square);
645 std::set<Terminal> firstSet =
FirstRed(gr, word);
648 if(firstSet.size() != 2){
649 std::stringstream errstr;
650 errstr <<
"Word set of word (1, square) was expected to be of size 2, but was of size " << firstSet.size() <<
"." << std::endl;
651 throw Exception(name, errstr.str(), 1003);
653 if(firstSet.find(*tb) == firstSet.end()){
654 std::stringstream errstr;
655 errstr <<
"Word set of word (1, square) did not contain the expected word b." << std::endl;
656 throw Exception(name, errstr.str(), 1003);
658 if(firstSet.find(*tlambda) == firstSet.end()){
659 std::stringstream errstr;
660 errstr <<
"Word set of word (1, square) did not contain the expected word lambda." << std::endl;
661 throw Exception(name, errstr.str(), 1003);
674 std::string name =
"FirstRed Inconsistent Word";
695 word.push_back(ptrnt1dot2);
696 std::set<Terminal> firstSet =
FirstRed(gr, word);
699 if(!firstSet.empty()){
700 std::stringstream errstr;
701 errstr <<
"Word set of word (1, dot, 2) was expected to be empty, but was of size " << firstSet.size() <<
"." << std::endl;
702 throw Exception(name, errstr.str(), 1003);
717 std::string name =
"Filter1 Mixed Grammar Symbols";
723 std::set<Terminal>::const_iterator tit;
724 std::vector<TerminalPtr> tpv;
725 std::vector<TerminalPtr>::iterator tpvit;
732 word.push_back(ntPtr);
733 word.push_back(ntPtr);
740 word.push_back(tPtr);
748 std::stringstream errstr;
749 errstr <<
"result nonterminal is " << rPtr->Str() <<
", but " << ntPtr->Str() <<
" was expected" << std::endl;
750 throw Exception(name, errstr.str(), 1003);
763 std::string name =
"Filter1 Nothing";
766 std::set<Nonterminal> nt;
774 std::stringstream errstr;
775 errstr <<
"size of result set is no NULL" << std::endl;
776 throw Exception(name, errstr.str(), 1003);
790 std::string name =
"FirstAll Terminals Only";
806 word.push_back(ptrta);
807 word.push_back(ptrtb);
808 std::set<Terminal> firstSet =
FirstAll(gr, word);
811 if(firstSet.size() != 1){
812 std::stringstream errstr;
813 errstr <<
"Word set of word ab was expected to be of size 1, but was of size " << firstSet.size() <<
"." << std::endl;
814 throw Exception(name, errstr.str(), 1003);
816 if(firstSet.find(*ta) == firstSet.end()){
817 std::stringstream errstr;
818 errstr <<
"Word set of word ab did not contain the expected word a." << std::endl;
819 throw Exception(name, errstr.str(), 1003);
832 std::string name =
"FirstAll Nonterminals Irreducible Word";
848 word.push_back(ptrnt1square1);
849 std::set<Terminal> firstSet =
FirstAll(gr, word);
852 if(!firstSet.empty()){
853 std::stringstream errstr;
854 errstr <<
"Word set of word (1, square, 1) was expected to be empty, but was of size " << firstSet.size() <<
"." << std::endl;
855 throw Exception(name, errstr.str(), 1003);
869 std::string name =
"FirstAll Nonterminals Reducible Word";
893 word.push_back(ptrnt1dot);
894 word.push_back(ptrnt1dot1);
895 std::set<Terminal> firstSet =
FirstAll(gr, word);
898 if(firstSet.size() != 1){
899 std::stringstream errstr;
900 errstr <<
"Word set of word (1, [dot])(1, [dot], 1) was expected to be of size 1, but was of size " << firstSet.size() <<
"." << std::endl;
901 throw Exception(name, errstr.str(), 1003);
903 if(firstSet.find(*ta) == firstSet.end()){
904 std::stringstream errstr;
905 errstr <<
"Word set of word (1, [dot])(1, [dot], 1) did not contain the expected word a." << std::endl;
906 throw Exception(name, errstr.str(), 1003);
919 std::string name =
"FirstLeq1 Zero Empty";
935 word.push_back(ptrnt1square1);
936 std::set<Terminal> firstSet =
FirstLeq1(gr, 0, word);
939 if(!firstSet.empty()){
940 std::stringstream errstr;
941 errstr <<
"Word set of k = 0 and word (1, [square], 1) was expected to be empty, but was of size " << firstSet.size() <<
"." << std::endl;
942 throw Exception(name, errstr.str(), 1003);
955 std::string name =
"FirstLeq1 Zero Nonempty";
975 word.push_back(ptrnt1dot);
976 std::set<Terminal> firstSet =
FirstLeq1(gr, 0, word);
979 if(firstSet.size() != 1){
980 std::stringstream errstr;
981 errstr <<
"Word set of k = 0 and word (1, [dot]) was expected to be of size 1, but was of size " << firstSet.size() <<
"." << std::endl;
982 throw Exception(name, errstr.str(), 1003);
984 if(firstSet.find(*tlambda) == firstSet.end()){
985 std::stringstream errstr;
986 errstr <<
"Word set of k = 0 and word (1, [dot]) did not contain the expected word lambda." << std::endl;
987 throw Exception(name, errstr.str(), 1003);
1000 std::string name =
"FirstLeq1 One Nonempty";
1020 word.push_back(ptrnt1dot);
1021 std::set<Terminal> firstSet =
FirstLeq1(gr, 1, word);
1024 if(firstSet.size() != 1){
1025 std::stringstream errstr;
1026 errstr <<
"Word set of k = 1 and word (1, [dot]) was expected to be of size 1, but was of size " << firstSet.size() <<
"." << std::endl;
1027 throw Exception(name, errstr.str(), 1003);
1029 if(firstSet.find(*ta) == firstSet.end()){
1030 std::stringstream errstr;
1031 errstr <<
"Word set of k = 1 and word (1, [dot]) did not contain the expected word lambda." << std::endl;
1032 throw Exception(name, errstr.str(), 1003);
1045 std::string name =
"FirstLeq1 Two Nonempty";
1061 word.push_back(ptrnt1dot);
1062 std::set<Terminal> firstSet =
FirstLeq1(gr, 2, word);
1065 if(!firstSet.empty()){
1066 std::stringstream errstr;
1067 errstr <<
"Word set of k = 2 and word (1, [dot]) was expected to be empty, but was of size " << firstSet.size() <<
"." << std::endl;
1068 throw Exception(name, errstr.str(), 1003);