@@ -588,3 +588,183 @@ TEST(lexer, Lexer8) {
588588 ASSERT_EQ (lex.GetDuplicateSymbolErrors ().size (), 0 );
589589 ASSERT_EQ (lex.GetUndeclaredSymbolErrors ().size (), 0 );
590590}
591+
592+ TEST (lexer, Lexer9) {
593+ std::string filename (" ../test/lexer/input3.txt" );
594+ Lexer lex = Lexer ();
595+
596+ std::ifstream is (filename);
597+ int token;
598+ bool flag = lex.GetDirectBeforeDatatypeFlag ();
599+ ASSERT_EQ (flag, false );
600+ token = lex.GetToken (is);
601+ flag = lex.GetDirectBeforeDatatypeFlag ();
602+ ASSERT_EQ (flag, true );
603+ ASSERT_EQ (jucc::lexer::TOK_INT, token);
604+ token = lex.GetToken (is);
605+ ASSERT_EQ (jucc::lexer::TOK_MAIN, token);
606+ token = lex.GetToken (is);
607+ ASSERT_EQ (jucc::lexer::TOK_PAREN_OPEN, token);
608+ token = lex.GetToken (is);
609+ flag = lex.GetDirectBeforeDatatypeFlag ();
610+ ASSERT_EQ (flag, false );
611+ ASSERT_EQ (jucc::lexer::TOK_PAREN_CLOSE, token);
612+ token = lex.GetToken (is);
613+ ASSERT_EQ (jucc::lexer::TOK_CURLY_OPEN, token);
614+ token = lex.GetToken (is);
615+ flag = lex.GetDirectBeforeDatatypeFlag ();
616+ ASSERT_EQ (flag, true );
617+ ASSERT_EQ (jucc::lexer::TOK_INT, token);
618+ token = lex.GetToken (is);
619+ flag = lex.GetDirectBeforeDatatypeFlag ();
620+ ASSERT_EQ (flag, true );
621+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
622+ token = lex.GetToken (is);
623+ flag = lex.GetDirectBeforeDatatypeFlag ();
624+ ASSERT_EQ (flag, true );
625+ ASSERT_EQ (jucc::lexer::TOK_COMMA, token);
626+ token = lex.GetToken (is);
627+ flag = lex.GetDirectBeforeDatatypeFlag ();
628+ ASSERT_EQ (flag, true );
629+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
630+ token = lex.GetToken (is);
631+ flag = lex.GetDirectBeforeDatatypeFlag ();
632+ ASSERT_EQ (flag, false );
633+ ASSERT_EQ (jucc::lexer::TOK_SEMICOLON, token);
634+ token = lex.GetToken (is);
635+ flag = lex.GetDirectBeforeDatatypeFlag ();
636+ ASSERT_EQ (flag, false );
637+ ASSERT_EQ (jucc::lexer::TOK_CIN, token);
638+ token = lex.GetToken (is);
639+ flag = lex.GetDirectBeforeDatatypeFlag ();
640+ ASSERT_EQ (flag, false );
641+ ASSERT_EQ (jucc::lexer::TOK_RIGHT_SHIFT, token);
642+ token = lex.GetToken (is);
643+ flag = lex.GetDirectBeforeDatatypeFlag ();
644+ ASSERT_EQ (flag, false );
645+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
646+ token = lex.GetToken (is);
647+ ASSERT_EQ (jucc::lexer::TOK_SEMICOLON, token);
648+ token = lex.GetToken (is);
649+ ASSERT_EQ (jucc::lexer::TOK_IF, token);
650+ token = lex.GetToken (is);
651+ ASSERT_EQ (jucc::lexer::TOK_PAREN_OPEN, token);
652+ token = lex.GetToken (is);
653+ flag = lex.GetDirectBeforeDatatypeFlag ();
654+ ASSERT_EQ (flag, false );
655+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
656+ token = lex.GetToken (is);
657+ ASSERT_EQ (jucc::lexer::TOK_NOT_EQUAL_TO, token);
658+ token = lex.GetToken (is);
659+ flag = lex.GetDirectBeforeDatatypeFlag ();
660+ ASSERT_EQ (flag, false );
661+ ASSERT_EQ (jucc::lexer::TOK_DECIMAL, token);
662+ token = lex.GetToken (is);
663+ ASSERT_EQ (jucc::lexer::TOK_PAREN_CLOSE, token);
664+ token = lex.GetToken (is);
665+ ASSERT_EQ (jucc::lexer::TOK_CURLY_OPEN, token);
666+ token = lex.GetToken (is);
667+ ASSERT_EQ (jucc::lexer::TOK_IF, token);
668+ token = lex.GetToken (is);
669+ ASSERT_EQ (jucc::lexer::TOK_PAREN_OPEN, token);
670+ token = lex.GetToken (is);
671+ flag = lex.GetDirectBeforeDatatypeFlag ();
672+ ASSERT_EQ (flag, false );
673+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
674+ token = lex.GetToken (is);
675+ flag = lex.GetDirectBeforeDatatypeFlag ();
676+ ASSERT_EQ (flag, false );
677+ ASSERT_EQ (jucc::lexer::TOK_GREATER_THAN, token);
678+ token = lex.GetToken (is);
679+ ASSERT_EQ (jucc::lexer::TOK_DECIMAL, token);
680+ token = lex.GetToken (is);
681+ ASSERT_EQ (jucc::lexer::TOK_PAREN_CLOSE, token);
682+ token = lex.GetToken (is);
683+ ASSERT_EQ (jucc::lexer::TOK_CURLY_OPEN, token);
684+ token = lex.GetToken (is);
685+ ASSERT_EQ (jucc::lexer::TOK_COUT, token);
686+ token = lex.GetToken (is);
687+ ASSERT_EQ (jucc::lexer::TOK_LEFT_SHIFT, token);
688+ token = lex.GetToken (is);
689+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
690+ token = lex.GetToken (is);
691+ ASSERT_EQ (jucc::lexer::TOK_SEMICOLON, token);
692+ token = lex.GetToken (is);
693+ ASSERT_EQ (jucc::lexer::TOK_CURLY_CLOSE, token);
694+ token = lex.GetToken (is);
695+ ASSERT_EQ (jucc::lexer::TOK_CURLY_CLOSE, token);
696+ token = lex.GetToken (is);
697+ flag = lex.GetDirectBeforeDatatypeFlag ();
698+ ASSERT_EQ (flag, true );
699+ ASSERT_EQ (jucc::lexer::TOK_FLOAT, token);
700+ token = lex.GetToken (is);
701+ flag = lex.GetDirectBeforeDatatypeFlag ();
702+ ASSERT_EQ (flag, true );
703+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
704+ token = lex.GetToken (is);
705+ flag = lex.GetDirectBeforeDatatypeFlag ();
706+ ASSERT_EQ (flag, false );
707+ ASSERT_EQ (jucc::lexer::TOK_ASSIGNMENT, token);
708+ token = lex.GetToken (is);
709+ flag = lex.GetDirectBeforeDatatypeFlag ();
710+ ASSERT_EQ (flag, false );
711+ ASSERT_EQ (jucc::lexer::TOK_DECIMAL, token);
712+ token = lex.GetToken (is);
713+ flag = lex.GetDirectBeforeDatatypeFlag ();
714+ ASSERT_EQ (flag, false );
715+ ASSERT_EQ (jucc::lexer::TOK_PLUS, token);
716+ token = lex.GetToken (is);
717+ flag = lex.GetDirectBeforeDatatypeFlag ();
718+ ASSERT_EQ (flag, false );
719+ ASSERT_EQ (jucc::lexer::TOK_DECIMAL, token);
720+ token = lex.GetToken (is);
721+ flag = lex.GetDirectBeforeDatatypeFlag ();
722+ ASSERT_EQ (flag, false );
723+ ASSERT_EQ (jucc::lexer::TOK_PLUS, token);
724+ token = lex.GetToken (is);
725+ flag = lex.GetDirectBeforeDatatypeFlag ();
726+ ASSERT_EQ (flag, false );
727+ ASSERT_EQ (jucc::lexer::TOK_DECIMAL, token);
728+ token = lex.GetToken (is);
729+ flag = lex.GetDirectBeforeDatatypeFlag ();
730+ ASSERT_EQ (flag, false );
731+ ASSERT_EQ (jucc::lexer::TOK_PLUS, token);
732+ token = lex.GetToken (is);
733+ flag = lex.GetDirectBeforeDatatypeFlag ();
734+ ASSERT_EQ (flag, false );
735+ ASSERT_EQ (jucc::lexer::TOK_DECIMAL, token);
736+ token = lex.GetToken (is);
737+ ASSERT_EQ (jucc::lexer::TOK_DIVIDE, token);
738+ token = lex.GetToken (is);
739+ ASSERT_EQ (jucc::lexer::TOK_DECIMAL, token);
740+ token = lex.GetToken (is);
741+ ASSERT_EQ (jucc::lexer::TOK_MULTIPLY, token);
742+ token = lex.GetToken (is);
743+ ASSERT_EQ (jucc::lexer::TOK_FRACTIONAL, token);
744+ token = lex.GetToken (is);
745+ ASSERT_EQ (jucc::lexer::TOK_MULTIPLY, token);
746+ token = lex.GetToken (is);
747+ ASSERT_EQ (jucc::lexer::TOK_PAREN_OPEN, token);
748+ token = lex.GetToken (is);
749+ flag = lex.GetDirectBeforeDatatypeFlag ();
750+ ASSERT_EQ (flag, false );
751+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
752+ token = lex.GetToken (is);
753+ ASSERT_EQ (jucc::lexer::TOK_MULTIPLY, token);
754+ token = lex.GetToken (is);
755+ flag = lex.GetDirectBeforeDatatypeFlag ();
756+ ASSERT_EQ (flag, false );
757+ ASSERT_EQ (jucc::lexer::TOK_IDENTIFIER, token);
758+ token = lex.GetToken (is);
759+ ASSERT_EQ (jucc::lexer::TOK_MULTIPLY, token);
760+ token = lex.GetToken (is);
761+ ASSERT_EQ (jucc::lexer::TOK_DECIMAL, token);
762+ token = lex.GetToken (is);
763+ ASSERT_EQ (jucc::lexer::TOK_PAREN_CLOSE, token);
764+ token = lex.GetToken (is);
765+ ASSERT_EQ (jucc::lexer::TOK_SEMICOLON, token);
766+ token = lex.GetToken (is);
767+ ASSERT_EQ (jucc::lexer::TOK_CURLY_CLOSE, token);
768+ token = lex.GetToken (is);
769+ ASSERT_EQ (jucc::lexer::TOK_EOF, token);
770+ }
0 commit comments