Monarch는 monaco 에디터의 문법 하이라이터 입니다. monaco 에디터는 브라우저에서만 동작하는 라이브러리입니다. Monarch는 어휘 해석에 상태, 스택, 정규표현식을 사용합니다. 그리고 JSON형식의 언어 스펙을 읽습니다.
Monarch의 입력으로 사용되는 언어스펙은 JSON 형태입니다.
먼저 Tokenizer는 어휘 분석에 필요한 여러개의 상태, 각 상태별로 존재하는 여러개의 규칙(Rule) 등으로 구성되어 있습니다. 기본적으로 Tokenizer는 초기 상태를 갖고 있으며, 언어 스펙에 가장 처음 정의된 상태를 초기상태로 갖습니다. 어휘 분석과정에서 현태 상태의 규칙들만 따릅니다. 규칙은 정규표현식과 토큰 클래스로 구성됩니다. 토큰 클래스는 관련 정규표현식을 통과 했을때 적용되는 CSS 클래스입니다. Monarch는 기본적인 표준 토큰 클래스를 포함하고 있습니다.
기존에 언어 하이라이팅에 활용되는 TextMate Grammars는 정규식 기반 하이라이터로 굉장히 강력하지만, 의존하는 정규표현식 라이브러리(oniguruma)를 웹으로 포팅이 어려웠기 때문에 별도로 개발한 프로그램으로 보입니다. 관련 내용은 과거의 README.md에서 확인할 수 있습니다. 나중에 WebAssembly가 브라우저에 탑재되면 TextMate Grammars를 고려하겠다고 표현되어 있습니다.