2012-02-10 9 views
5

Estoy usando el analizador identifier de FParsec para analizar los nombres de variables y funciones, que normalmente son una mezcla de caracteres Unicode y ASCII. Pero a veces he escapado de los caracteres Unicode al principio (como \u03C0) o dentro del identificador (como swipe_board\u003A_b). Todavía puedo hacerlos parseables usando las opciones isAsciiIdStart y isAsciiIdContinue, pero no puedo definir mi propia función personalizada para el procesamiento previo antes de la normalización. ¿Qué podría ser una solución aquí?¿Utilizando la función de preprocesamiento con el analizador de identificador en FParsec?

Respuesta

4

El analizador identifier internamente primero analiza una cadena y luego la pasa a una instancia de IdentifierValidator para su validación. Puesto que la clase C# IdentifierValidator es accesible al público (aunque no documentado), fácilmente se podría adaptar el analizador identifier a sus necesidades (haciendo que la etapa de colocación sucesiva de análisis inicial también reconoce los escapes).

El análisis de identificadores es un poco complicado debido a la compatibilidad con los pares de sustitución UTF-16, la normalización y la categoría de caracteres Unicode XID, que no se admite nativamente en .NET. Tal vez sólo tienen que apoyar identificadores ASCII o UCS-2 especificados en términos de categorías de caracteres con el apoyo de CharUnicodeInfo.GetUnicodeCategory, en cuyo caso es probable que podría poner en práctica el análisis y validación en un solo paso utilizando many1Satisfy2 o many1Chars2.

Cuestiones relacionadas