Parsing 如何使标识符解析器停止在FParsec中的operationPrecenceParser的运算符上?

Parsing 如何使标识符解析器停止在FParsec中的operationPrecenceParser的运算符上?,parsing,f#,fparsec,Parsing,F#,Fparsec,我正在为使用unicode符号的标识符名称实现一个解析器。我面临的问题是,我有一些运算符也是用unicode符号编写的,这些运算符可能直接放在标识符之后,例如: time→sleep(7); 这里的箭头符号是一个中缀运算符,我将其添加到运算符优先级解析器中: opp.AddOperator(InfixOperator("→", ws, 10, Associativity.Right, fun left right -> BinaryOperation(Arrow, left

我正在为使用unicode符号的标识符名称实现一个解析器。我面临的问题是,我有一些运算符也是用unicode符号编写的,这些运算符可能直接放在标识符之后,例如:

time→sleep(7);
这里的箭头符号是一个中缀运算符,我将其添加到运算符优先级解析器中:

opp.AddOperator(InfixOperator("→", ws, 10, Associativity.Right, 
      fun left right -> BinaryOperation(Arrow, left, right)))
如果我能自动排除作为运算符添加到OPP的所有符号组合,那就太好了。目前,我使用以下标识符实现手动执行此操作:

let variable =
    let isAsciiIdContinue = isNoneOf "→*/+-<>=≠≤≥' ,();"

    identifier (IdentifierOptions(
                    isAsciiIdContinue = isAsciiIdContinue,
                    normalization = System.Text.NormalizationForm.FormKC,
                    allowAllNonAsciiCharsInPreCheck = true))

如何使
变量
解析器在中缀运算符上停止

isasciidstart
isasciidcontinue
仅用于指定标识符中有效的ASCII字符。
标识符
解析器接受的非ASCII字符是那些通过预检查且为有效Unicode XID字符的字符


由于符号运算符不是有效的Unicode XID标识符字符,您可以简单地使用
标识符选项(normalization=System.Text.NormalizationForm.FormKC)
isasciidstart
isasciidcontinue
仅用于指定标识符中有效的ASCII字符。
标识符
解析器接受的非ASCII字符是那些通过预检查且为有效Unicode XID字符的字符

由于符号运算符不是有效的Unicode XID标识符字符,您可以简单地使用
标识选项(normalization=System.Text.NormalizationForm.FormKC)

  time→sleep(7);
      ^
The identifier contains an invalid character at the indicated position.