首页 > 解决方案 > Antlr4:如何只解析文件的一部分

问题描述

是否可以只用 antlr4 解析文件的前半部分?我正在解析大文件,并且正在使用 UnbufferedCharStream 和 UnbufferedTokenStream。

我没有构建解析树,而是使用解析操作而不是访问者/侦听器模式。有了这些,我能够节省大量的 RAM 并提高解析速度。

然而,解析整个文件仍然需要大约 15 秒。解析后的文件分为两部分。文件的前半部分有元数据,后半部分是实际数据。大部分时间都花在数据部分,因为有超过 3m。要解析的行。元数据部分只有大约 20,000 行。是否可以只解析前半部分,这会显着提高解析速度?是否可以在元数据部分之后手动注入 EOF?

把文件分成两份怎么样?

标签: c#parsingantlr4

解决方案


您如何以编程方式仅提取要解析的部分并创建一个新的 tmp.extension 文件以进行解析?它可能看起来像这样:

System.IO.File.WriteAllText(@"C:\Users\Path\tmp.extension", text);

解析后,您可以删除 tmp 文件,原始文件保持原样。

System.IO.File.Delete(@"C:\Users\Path\tmp.extension");

推荐阅读