F# 有没有办法使用fslex/Lexing.LexBuffer执行前瞻

F# 有没有办法使用fslex/Lexing.LexBuffer执行前瞻,f#,lexer,F#,Lexer,我使用的是fslex,在我的一个标记器规则中,我需要查找下一个字符,以便决定是继续使用标记,还是停止、释放并让前一个规则使用它 我花了一些时间检查它的源代码,看起来唯一的方法是编译一个公开一些内部方法的版本。也许这里有人有更好的解决方案?也许看看LexBuffer的功能会有所帮助。虽然有属性(BufferScanStart和BufferScanLength)来设置lexer在输入流中的位置,但这些属性是内部的。我不确定需要什么才能安全地暴露这些 还有一个问题是,在哪些方面涉及到回击。结论似乎是一

我使用的是fslex,在我的一个标记器规则中,我需要查找下一个字符,以便决定是继续使用标记,还是停止、释放并让前一个规则使用它

我花了一些时间检查它的源代码,看起来唯一的方法是编译一个公开一些内部方法的版本。也许这里有人有更好的解决方案?

也许看看LexBuffer的功能会有所帮助。虽然有属性(
BufferScanStart
BufferScanLength
)来设置lexer在输入流中的位置,但这些属性是内部的。我不确定需要什么才能安全地暴露这些


还有一个问题是,在哪些方面涉及到回击。结论似乎是一样的:fslex目前不支持它。

不知道您是否已经改变了工具,但是您是否考虑过使用FsParsec来代替它?我对fslex和fsparsec的经验有限,但从我所看到的情况来看,fsparsec要好得多。不确定fsparsec是否完全支持您想要的,但它确实说它支持前瞻语法,所以我觉得这是一个很好的机会。如果您真的想使用FsLex/FsYacc(这很方便),那么稍微“作弊”似乎是一个很好的解决方案。但是你应该首先考虑使用FSPARSEC(这是专门为这个设计的,但它不是那么容易使用)。过去我用其他的词法和解析器处理了一个没有前瞻性的方法是实现支持“放回”的自定义枚举器包装器。排他的边界项可以放回去重新解析。很好的建议。谢谢大家!