【发布时间】:2013-03-13 12:40:39
【问题描述】:
其实这个问题和我之前的问题Catching ANTLR's NoViableAltException in Java and ANTLRWorks Debugger有关,但是因为症状不同,我决定把它们分开。
问题在于提供给包含未知标记的 ANTLR 输入文本。例如,考虑到我们的语法对以@ 符号开头的标记一无所知。如果我们尝试将此类文本提供给ANTLRWorks 解释器,我们将在结果图中收到NoViableAltException。
但是如果我们使用 Java 中生成和编译的语法并尝试用它来解析这些无效文本,我们会收到以下结果之一(这取决于我们将这个未知标记放置在哪里,即我们有多“深入”将其放入文本中):
1) 没有错误,并且顶级CommonTree 对象中chidlren 字段中的null 值(提到的问题正是关于这种情况);
2) java.lang.OutOfMemoryError: Java heap space 错误。
这个问题是关于第二种情况的。我们如何防止ANTLR 解析器的这种行为?例如,在生产环境中,客户端可能会通过向 DSL 解析器提供不正确的字符序列而意外崩溃系统。
【问题讨论】:
标签: java antlr out-of-memory