c# - Antlr4:如何只解析文件的一部分
问题描述
是否可以只用 antlr4 解析文件的前半部分?我正在解析大文件,并且正在使用 UnbufferedCharStream 和 UnbufferedTokenStream。
我没有构建解析树,而是使用解析操作而不是访问者/侦听器模式。有了这些,我能够节省大量的 RAM 并提高解析速度。
然而,解析整个文件仍然需要大约 15 秒。解析后的文件分为两部分。文件的前半部分有元数据,后半部分是实际数据。大部分时间都花在数据部分,因为有超过 3m。要解析的行。元数据部分只有大约 20,000 行。是否可以只解析前半部分,这会显着提高解析速度?是否可以在元数据部分之后手动注入 EOF?
把文件分成两份怎么样?
解决方案
您如何以编程方式仅提取要解析的部分并创建一个新的 tmp.extension 文件以进行解析?它可能看起来像这样:
System.IO.File.WriteAllText(@"C:\Users\Path\tmp.extension", text);
解析后,您可以删除 tmp 文件,原始文件保持原样。
System.IO.File.Delete(@"C:\Users\Path\tmp.extension");
推荐阅读
- php - MySQL - 名称包含特定单词的产品名称
- php - 为什么 each() 不能使用 laravel 与 pluck() 一起工作?
- javascript - 如何在特定滑块中隐藏 CSS 类?
- jquery - 为什么 jQuery ajax 函数在 IOS 浏览器设备中不起作用
- javascript - console.log 闭包的内容
- php - mysqli结果while循环返回null
- swift - 我无法通过协议在视图控制器之间传递数据
- typescript - tsc 不允许我使用 await 关键字进行编译,即使我使用的函数是异步的
- reactjs - typescript.lib/lib.dom.d.ts 中的 HTMLElement 定义被 @types/react/global.d.ts 覆盖
- c - 在Linux中以编程方式运行pdftotext x.pdf y.txt?