0

我试图找到可以解析非常大的文件(基本上是 PGN 文件)的东西。我开始使用 antlr4,但即使他们声称他们的类是“流”,但它们不是。antlr4 拿了我的 5,457,518 游戏测试文件,并试图将整个 1.7G 文件加载成一个巨大的字符串,然后解析它,导致内存不足崩溃。因此,我把它扔掉了,现在正在尝试 moo/nearley。

好吧,我似乎也有类似的问题。尽管 moo 和 nearley 都提供了将所谓的“块”作为参数的方法,但 moo 尤其没有意识到它位于字符串的末尾,并且可以在下一个 moo.feed 上获得更多。

例如,我的测试程序尝试将其发送给 moo,一次发送两个字节:[Abcde "bc def"]. 它LBRACKET正确吐出但随后它A作为一个符号吐出。如果我做 a ,它就会作为第二个符号moo.reset(next_two)吐出。bc

所以我的问题是,你,主词法分析器/解析器,到底是怎么做的?我应该回到antlr4吗?我应该以不同的方式使用 moo/nearley 吗?那里有更好的词法分析器/解析器吗?我真的不想从头开始编写自己的,但我真的开始怀疑是否有其他方法。

4

0 回答 0