如何预测和避免“代码太大”?

时间:2018-04-12 14:08:50

标签: java parsing antlr antlr3

我正在使用Antlr 3.5编写SQL语法(由于公司政策,我无法共享)。

我只提供我需要解析的语句,但语法庞大而复杂。

我遇到“代码太大”的问题,生成的java文件超过65535字节 - 有时在静态初始化程序中,有时在某些方法中。

正如在各个地方所建议的那样,我将语法分成多个语法并通过import关键字使用它们。

这种方法现在工作正常,但我必须继续添加这个语法 我相信在某些时候它会再次遇到这个代码太大的问题 另外,我不知道通过分割语法确切地获得了多少收益。

我的问题是:

  1. 我们怎么知道我们又接近代码太大的问题?
  2. 有没有办法可以准确衡量改进/增益的程度 我们正在分裂语法。
  3. 生成的文件仍然很大--SqlParserParser.java是1.77MB和 SqlParser_SqlSubParser.java是1.36MB。
    文件大小是否表明此问题?
  4. 除了语法分裂之外还有其他什么可以做。
  5. 几点:

    1. 截至目前我无法切换到Antlr4。
    2. 请尽量不要因缺乏示例而对我的问题进行投票,因为我无法发布真正的语法,一个小例子不会重现我的问题。

1 个答案:

答案 0 :(得分:0)

据我记忆,问题不是类大小本身,而是方法大小。对我们来说,问题是静态初始化器(对于编译器,它也是一种方法!) - 它初始化所有后续集和DFA。

我们最终将我们的SQL语法分成多个语法文件(对于某些SQL方言甚至达到6个文件),并且还直接修改ANTLR(Java.stg模板)的部分以将大型方法和静态初始化器拆分为较小的。