有没有办法使用fslex/Lexing.LexBuffer实现前瞻?

3
我正在使用fslex,其中一个标记规则需要查找下一个字符,以便决定是继续消耗标记还是停止,解开并让前面的规则消耗它。
我花了一些时间检查它的源代码,看起来唯一的方法是编译一个公开一些内部方法的版本。也许这里有人有更好的解决方案?

2
不知道你是否已经过了更改工具的时候,但你有没有考虑使用FsParsec呢?我对fslex和fsparsec都只有有限的经验,但从我所看到的来看,fsparsec要好得多。不确定fsparsec是否支持你想要的功能,但它确实支持前瞻语法,所以我觉得有很大的机会。 - Robert
如果你真的想使用相当舒适的FsLex/FsYacc,那么“作弊”似乎是一个不错的解决方案。但你应该首先考虑使用FsParsec(它专门为此设计,但使用起来并不容易)。 - Ramon Snir
过去我在处理其他没有前瞻的词法分析器和语法分析器时,采用的一种方法是实现一个支持“放回”的自定义枚举器包装器。然后可以将独占边界项放回并重新解析。 - TechNeilogy
1个回答

1

或许查看 LexBuffer 的源代码 可以有所帮助。虽然有属性(BufferScanStartBufferScanLength)来设置词法分析器在输入流中的位置,但这些是内部的。我不确定如何以安全的方式公开它们。

还有一个关于放回的 HubFS 问题。结论似乎是相同的:fslex 目前不支持它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接