在FParsec中使用带有标识符解析器的预处理功能?

时间:2012-02-10 14:37:13

标签: parsing f# fparsec

我正在使用FParsec中的identifier解析器来解析变量和函数的名称,这些名称通常是Unicode和ASCII字符的混合。但有时我在开头(例如\u03C0)或标识符(如swipe_board\u003A_b)内转义了Unicode字符。我仍然可以使用isAsciiIdStartisAsciiIdContinue选项使它们可解析,但我无法在规范化之前定义自己的自定义函数进行预处理。这可能是什么解决方案?

1 个答案:

答案 0 :(得分:4)

identifier解析器在内部首先解析一个字符串,然后将其传递给IdentifierValidator实例进行验证。由于C#IdentifierValidator类是公开可访问的(尽管未记录),因此您可以轻松地使identifier解析器适应您的需要(通过使初始字符串解析步骤也识别转义)。

由于支持UTF-16代理对,规范化和Unicode XID字符类别(在.NET上本身不支持),标识符解析有点复杂。 也许您只需要支持CharUnicodeInfo.GetUnicodeCategory支持的字符类别中指定的ASCII或UCS-2标识符,在这种情况下,您可以使用many1Satisfy2或{{只需一步即可实现解析和验证1}}。