以编程方式访问fslex和fsyacc

Jon*_*rop 5 f#

fslex和fsyacc工具目前需要两阶段编译,生成随后由fsc编译的文件.在我看来,如果源文件是嵌入式资源,以编程方式提供给fslex和fsyacc,并且使用CodeDom即时编译生成的代码,这些工具将更容易使用.

这是否可行,如果可行,那么实现这一目标需要什么?

t0y*_*yv0 2

提供一个类似解析器组合器的接口以及使用表达式树(F# 的 LISP“eval”)或类似内容的后端应该是可行的,以便与该语言完全集成。或者是 TypeProvider。有很多选择。如果表生成是一项昂贵的计算,则可以通过提供缓存来缓存它Cache,例如磁盘缓存。

我认为除了缺乏时间、奉献精神和专业知识之外,没有什么能阻止我们拥有具有(非单子)解析器组合器式接口但高效编译实现的工具。

有时我会回到我的这个宠物项目,使用代数方法来优化使用组合器在源代码中指定的正则表达式(和词法分析器),然后编译到状态机。它仍然缺乏一些提高效率的关键部分,但它是:

https://github.com/toyvo/ocaml-regex-algebraic