일지

인터프리터...15

niamdank 2020. 11. 13. 02:07

토큰 처리 실행 예제

 

test.txt

if dt <= 100
    dt = (a + 200) * b
else
    dt = 300
end

print "dt=", dt

 

Tokenizer.cpp

#include "Tokenizer.h"

int main(int argc, char *argv[])
{
	if (argc < 2)
	{
		exit(1);
	}

	ifs.open(argv[1]);
	if (!ifs.is_open())
	{
		exit(1);
	}

	InitializeCharTypeTable();

	std::cout << std::setw(5) << "text" << std::setw(17) << "kind" << std::setw(7) << "intVal" << '\n';

	Token token = NextToken();
	while (token.tokenKind != TokenKind::EndOfToken)
	{
		std::cout << std::setw(5) << token.text <<
			std::setw(17) << TokenKindToString(token.tokenKind) <<
			std::setw(7) << token.intValue << '\n';

		token = NextToken();
	}
}

 

실행 결과

 text             kind intVal
   if               If      0
   dt       Identifier      0
   <=        LessEqual      0
                   Int    100
   dt       Identifier      0
    =           Assign      0
    (  LeftParenthesis      0
    a       Identifier      0
    +             Plus      0
                   Int    200
    ) RightParenthesis      0
    *         Multiply      0
    b       Identifier      0
 else             Else      0
   dt       Identifier      0
    =           Assign      0
                   Int    300
  end              End      0
print            Print      0
  dt=           String      0
    ,            Comma      0
   dt       Identifier      0