我当前的项目涉及词法分析和解析脚本代码,因此我正在使用 fslex 和 fsyacc。Fslex LexBuffers 可以有两种形式LexBuffer<char>
,LexBuffer<byte>
我希望可以选择同时使用这两种方法。
为了同时使用两者,我需要一个 ^buf -> 字符串类型的词位函数。到目前为止,我的专业化尝试看起来像:
let inline lexeme (lexbuf: ^buf) : ^buf -> string where ^buf : (member Lexeme: char array) =
new System.String(lexbuf.Lexeme)
let inline lexeme (lexbuf: ^buf) : ^buf -> string where ^buf : (member Lexeme: byte array) =
System.Text.Encoding.UTF8.GetString(lexbuf.Lexeme)
我收到一个类型错误,指出函数体应该是 type ^buf -> string
,但推断的类型是 just string
。显然,我做错了什么(主要是?)。
我正在尝试在 F# 中甚至可能吗?如果是这样,有人可以指出我正确的路径吗?
谢谢!