我正在开发一个编译器,希望提高其性能。我发现约50%的时间用于解析源文件。由于源文件非常小,而且在此之后我进行了许多转换,所以我认为它是可以改进的。
我的解析器是使用Boost Spirit解析器和词法分析器(使用lexer :: pos_iterator)构建的,并且我有一个中等规模的语法。我将源代码解析成AST。
我的问题是,我不知道在解析过程中哪部分耗时最长:AST节点的复制,词法分析器,解析器规则还是内存。
我不认为这是I/O问题,因为我正在使用SSD工作,而且一开始就完全读取文件,然后只使用内存版本。
我尝试使用分析器,但需要花费时间的方法是来自Boost的一些具有数百个字符名称的方法,我不确定它们确切的作用...
那么,有没有首选方法来基准测试Boost Spirit解析器及其语法? 或者是否有一些规则可用于验证某些特定点的效率?
谢谢
对于有兴趣的人,以下是源代码:
我的解析器是使用Boost Spirit解析器和词法分析器(使用lexer :: pos_iterator)构建的,并且我有一个中等规模的语法。我将源代码解析成AST。
我的问题是,我不知道在解析过程中哪部分耗时最长:AST节点的复制,词法分析器,解析器规则还是内存。
我不认为这是I/O问题,因为我正在使用SSD工作,而且一开始就完全读取文件,然后只使用内存版本。
我尝试使用分析器,但需要花费时间的方法是来自Boost的一些具有数百个字符名称的方法,我不确定它们确切的作用...
那么,有没有首选方法来基准测试Boost Spirit解析器及其语法? 或者是否有一些规则可用于验证某些特定点的效率?
谢谢
对于有兴趣的人,以下是源代码: