haskell에 js 파서를 구현하려고합니다. 하지만 자동 세미콜론 삽입이 붙어 있습니다. 문제가있는 주위에 놀기 위해서 test project을 만들었지 만 문제를 해결하는 방법을 알 수는 없습니다. 나는이 같은 입력을 구문 분석 할파섹 및 사용자 정의 상태
data Token
= SemicolonToken
| NumberToken Number
| PlusToken
:
data Program = Program [Expression]
data Expression
= UnaryExpression Number
| PlusExpression Number Number
입력 스트림 토큰의 목록입니다 : 내 테스트 프로젝트 프로그램에서
은 (단항 또는 바이너리) 식의 목록입니다 :
1;
- 단항 표현
1 + 2;
- 이진 표현
1; 2 + 3;
- 두 표현식 (단항 및 이진)
1 2 + 3;
- 이전 입력과 동일하지만 첫 번째 세미콜론이 없습니다. 따라서 파서는 토큰 1을 소비하지만 토큰 2는 문법 생성에 의해 허용되지 않습니다 (다음 예상 토큰은 세미콜론 또는 플러스입니다). 자동 세미콜론 삽입 규칙에 따르면이 경우 토큰 2 앞에 세미콜론이 자동으로 삽입됩니다.
이렇게 파서 동작을 구현하는 가장 우아한 방법은 무엇입니까?