【发布时间】:2014-02-26 17:56:36
【问题描述】:
我们将antlr用于数据点的层次结构,可以相互计算,其中计算用公式表示。
假设我们有来自外部测量系统的基础数据点 a1 和 a2。
然后我们可以定义一个数据点 b 计算为 a1 和 a2 的总和,通过公式
“a1 + a2”。
到目前为止一切正常,但问题是,antlr 似乎在通过抛出、捕获和重新抛出 NoViableAltException 进行解析时回溯错误的分支。
我们使用来自 Sam Harwell 的 Antlr 的 C# 端口并将其与 C# 一起使用,并在 VStudio 2012 中调试。
Visual Studio 捕获并显示第一次机会异常,这是一个相当缓慢的过程。
即使在调试器窗口中选择不显示第一次机会异常,它们仍然会被捕获并减慢调试器的速度。
由于有数百个由公式定义的数据点,这些第一次机会异常使调试非常非常缓慢。
我的问题是:有没有办法改进语法以减少第一次出现 NoViableAltException 的机会?
或者改变antlr代码,通过返回值实现回溯而不是抛出/捕获NoViableAltException是否有意义?
【问题讨论】:
-
我不是 antlr 用户,但这些异常是否发生在您的代码或库中?
-
它们出现在库和 antlr 根据我的语法自动生成的代码中。