회사에서 쓰는 라이브러리를 봤는데

토크나이징 단계부터 브랜치가 너무 많더라고 


서버 CPU는 뭐 그런걸 아득히 뛰어넘는 성능이지만

내가 만일 표준C 범위 안에서 성능을 최대한 끌올 방법이 있을까 연구하면서 


일단 토크나이져를 만들었음


http://www.ideone.com/fqORKZ


이후 LALR 파서로 만들예정



기본적으로는 상태전이표를 만들었고 (https://www.json.org/json-ko.html 참고)

74개 상태로 압축했어 

그를 위해 char 값에 대응하는 256개  배열을 만들었는데

각 상태별로 char 값에서 사용할 매핑된 값을 가져오는 방식이 저장되어 있음


부하는 do - while 문에서 걸리게 되는데, 

그 안에서는 비트연산 및 더하기 빼기 산술연산밖에 없기 때문에

브랜치 프리딕션은 while 조건문 한군데만 있음 

이는 마지막 탈출조건에서만 프리딕션이 발생하고

토크나이징이 진행될때는 항상 성공할것임


비트매스크, 쉬프트, 오버플로우  이용해서 존나 연구했다 진짜 쉬방 ㅠ


실은 파이썬으로 테이블을 생성해내는것을 만들어서 구현

파이썬은 그냥 막짜도 죄책감이 안들어서 좋다.

http://www.ideone.com/sBx4aV


근데 내가 생각치 못한 예외사항이 있을것 같아 확신을 못하겠네

개천절 쉬는날 이거 궁리하고 만드느라 시간 다 갔네