代码之家  ›  专栏  ›  技术社区  ›  asthac

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

  •  1
  • asthac  · 技术社区  · 6 年前

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

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

    我遇到了“代码太大”的问题,生成的java文件超过了65535个字节——有时在静态初始值设定项中,有时在某些方法中。

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

    这种方法目前运行良好,但我必须不断增加这种语法 我相信在某个时候,它会再次遇到这个代码太大的问题。
    此外,我也不知道通过拆分语法,我究竟能获得多少收益。

    我的问题是:

    1. 我们怎么知道我们又接近代码太大的问题了?
    2. 是否有一种方法可以准确衡量改进/收益的多少 我们正在通过拆分语法来获得。
    3. 生成的文件仍然很大-SqlParserParser。java为1.77MB SqlParser\u SqlSubParser。java是1.36MB。
      文件大小是否表示此问题?
    4. 除了语法拆分之外,还有什么可以做的吗。

    几点:

    1. 我现在无法切换到Antlr4。
    2. 请不要因为缺少示例而否决我的问题,因为我无法发布真正的语法,一个小示例也不会重现我的问题。
    1 回复  |  直到 6 年前
        1
  •  0
  •   Jiri Tousek    6 年前

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

    我们最终将SQL语法拆分为多个语法文件(对于某些SQL方言,甚至有6个文件),并直接修改了ANTLR的部分内容( Java.stg 模板)将大型方法和静态初始值设定项拆分为较小的方法和静态初始值设定项。