我应该使用什么语言编写文本解析器并以用户友好的方式显示结果?

Hen*_*sJr 20 parsing text

我公司的专有软件生成一个日志文件,如果解析它会更容易使用.我们都使用的日志解析器是由另一个员工编写的一个副项目,它的性能很糟糕.

这些日志文件可以非常快速地增长到10兆字节,如果日志文件大于1兆字节,我们当前使用的解析器会出现问题.

所以,我想编写一个程序,可以在尽可能短的时间内解析大量的文本.我们专门使用Windows,因此必须在Windows上运行.我们当前的实现在本地Web服务器上运行,我确信将其作为应用程序运行必须更快.

所有建议都会有所帮助.谢谢.

编辑:我的最终目标是解析文本并以更加用户友好的方式用颜色等显示它.你能用Perl和Python做到这一点吗?我知道你可以用Java和C++做到这一点.因此,它将像记事本一样打开日志文件,但在屏幕上显示用户友好的格式而不是原始文件.

编辑:所以,我不能选择最好的答案,那就是选择一种能够最好地展示我的目标的语言,然后在其中编写解析器.此外,使用ANTLR可能会使此过程更容易.我改变了原来的问题,因为我想我没有问我到底在想什么.感谢大家!

Maw*_*awg 16

嗯,"跟你所知道的"是一个很好的答案.Perl是为这种事物而设计的(但imo非常适合简单的解析,但我个人会在复杂的项目中避免使用它).

如果它变得有点复杂,为什么不使用正确的语法和语法设置?

Lex&Yacc(或Flex&Bison)让人想起,但我个人总是会想到Antlr

根据模式(语法)定义各种"单词",并组合这些单词(语法)和Antlr的规则将吐出一个程序来解析你的输入(你可以使用Java,C,C++等程序(你是担心解析时间,所以选择编译语言,当然)).

我个人觉得手工制作解析器很繁琐,调试它们更加繁琐,但AntlrWorks是一个可爱的IDE,真的让它变得轻而易举 ......

底部的那一点是定义语法规则.

如果你弄乱了你的语法规则,你会被告知.对于手工制作的解析器来说情况并非如此,在这种解析器中,您只是划伤body part并且想知道"奇怪的结果"......

看看这个.即使您认为您的项目现在微不足道,它也可能会增长.如果您对解析感兴趣,那么至少要熟悉lex/yacc,尤其是Antlr(Works)


小智 11

您应该使用您所知道的语言......除非您有足够的时间来完成项目,否则您还可以花时间学习一门新语言.

  • 当问题是"我应该用什么语言做X?"时,这总是正确的答案.即使语言不是很适合你正在做的事情,如果你不了解一个更好的语言,你最好坚持你认识的严肃项目. (2认同)

com*_*pie 7

我建议使用Python或Perl.使用正则表达式解析大型文本文件非常快.