【发布时间】:2018-06-11 05:11:43
【问题描述】:
我在ocamlc 上度过了最艰难的时光,这是极其无信息的错误消息。现在,当我编译我的一个文件时,它给了我
Error: Syntax Error
在文件的最后一行,它是空的。所以,我假设我缺少一些左括号之类的东西,我不确定。无论如何,在生产环境中使用 Ocaml 的人如何处理这个问题?是否有任何可用的工具可以提供任何关于词法分析器期望的字符的任何提示,或者只是更好的一般错误消息?
具体来说,我正在寻找像this 这样的工具,它看起来很棒。但它看起来不再处于开发中,但这看起来像是一个将 Ocaml 编译为 Javascript 的工具,这不是我想要的最终结果。
任何关于人们通常如何解决 Ocaml 语法错误的建议都会很棒。
【问题讨论】:
-
我不直接使用ocamlc,但至少应该有一些位置信息。你确定没有?
-
顺便说一句,BetterErrors 已被“超级错误”取代,该错误已融入 BuckleScript 及其使用的稍加修改的编译器。我认为在上游进行了一些努力,但这些事情往往需要一些时间(从长远来看,这不一定是坏事)。
-
@glennsl 肯定有“位置信息”,但在我目前的情况下,位置指向文件的最后一行字符 0-0。并且文件的最后 40 行只有 cmets。 BuckleScript 似乎是一个“太重”的工具。我只是想要一个稍微好一点的错误报告系统,而不是一个 JS 集成/交叉编译/等的完整构建系统。
-
如果位置信息不好,可能没有什么像 BetterErrors 或超级错误这样的“附加组件”可以做。您可能必须重新设计整个解析器,甚至更改语法以拥有更多包含语法错误的隔板。问题很可能是,在句法层面上,直到它到达结尾并注意到缺少某些东西(可能是未闭合的括号或其他东西)之前根本没有错误。如果您认为很难追查此类错误的原因,请想象一下自己是一个甚至不了解您要做什么的编译器!
-
嗯,我绝对同意这一点。但是,就像我在 clang/GNU 编译器中看到的那样,也许它会告诉我它的期望。 Idk,也许我要求太多了:/无论如何,肯定没有任何公司在生产中使用 Ocaml 使用这些准系统错误消息。
标签: compiler-errors syntax-error ocaml