4
나는 파섹에 파서를 쓰고있다. E -> E + E와 같은 왼쪽 반복 생성은 LL 파서에서 쉽게 작성할 수 없으므로 Parsec은 중위어, 접미사 및 접두어 연산자를 지원하는 buildExpressionParser
을 제공합니다. 하지만 아래 첨자 연산자는 어떻습니까?Parsec에서 첨자 연산자를 구현하는 방법은 무엇입니까?
E -> E [E]는 어떻게 구현됩니까? 두 번째 표현식을 사용하지 않고 닫는 괄호를 사용할 수 있다면 buildExpressionParser
에 대한 중위 테이블 항목을 사용하여 에뮬레이션 할 수 있습니다. 생각?
편집 : 내 문법에 가장 적합한 왼쪽 재귀 제거 알고리즘이 있다는 것을 알고 있습니다. 나는 쉽거나, 추상적 인 것을 찾고있다 (예 : buildExpressionParser
). 그렇지 않으면 나는 단지 행복을 사용할 것이다.
:
마지막으로, 우리는 표현의 최상위 파서를 가지고있다. 해피는 추상의 하스켈의 힘을 회피합니다. – luqui
그냥'buildExpressionParser'를 가진'Postfix'로하십시오. – luqui
postfix는 어떻게 도움이됩니까? 그것과 함께 닫는 브래킷을 일치시킬 수는 있지만, 하나의 일치하는 방법은 없습니다. – BruceBerry