2012-02-10 2 views
5

FParsec의 identifier 파서를 사용하여 변수 및 함수 이름을 구문 분석합니다. 일반적으로 유니 코드와 ASCII 문자가 혼합되어 있습니다. 그러나 때로는 유니 코드 문자 (예 : \u03C0) 또는 식별자 (예 : swipe_board\u003A_b)에서 이스케이프 처리했습니다. 난 여전히 그들을 isAsciiIdStartisAsciiIdContinue 옵션을 사용하여 parseable 만들 수 있지만 정규화하기 전에 사전 처리에 대한 내 자신의 사용자 지정 함수를 정의 할 수 없습니다. 여기서 해결책이 될 수 있을까요?FParsec에서 식별자 파서와 함께 전처리 함수를 사용합니까?

답변

4

파서는 내부적으로 먼저 문자열을 구문 분석 한 다음 유효성 검사를 위해 IdentifierValidator 인스턴스로 전달합니다. C# IdentifierValidator 클래스는 공개적으로 액세스 할 수 있기 때문에 (문서화되어 있지는 않지만) 사용자는 identifier 파서를 필요에 맞게 쉽게 변형 할 수 있습니다 (초기 문자열 파싱 단계에서도 이스케이프를 인식하게 함).

식별자 구문 분석은 UTF-16 서로 게이트 쌍, 정규화 및 .NET에서 기본적으로 지원되지 않는 유니 코드 XID 문자 범주에 대한 지원으로 인해 약간 복잡합니다. CharUnicodeInfo.GetUnicodeCategory으로 지원되는 문자 범주로 지정된 ASCII 또는 UCS-2 식별자 만 지원하면됩니다.이 경우 many1Satisfy2 또는 many1Chars2을 사용하여 한 단계로 구문 분석 및 유효성 검사를 구현할 수 있습니다.