首页 > 解决方案 > 可用于 gcc4.8 的正则表达式实现

问题描述

根据我的发现,正则表达式在 gcc4.8 上不起作用。在交叉编译期间,我遇到了关于正则表达式的运行时错误。你知道我如何在 gcc4.8 上使用正则表达式的其他方法吗?我正在考虑创建自己的,但如果已经有可用的可用,我会徘徊。

标签: c++regex

解决方案


GCC 4.8真的很老了(2020 年不再维护)。

考虑在 2020 年 10 月将其更新到GCC 10(您可以编译其源代码)并阅读有关调用 GCC和使用GDB的文档。我建议g++ -Wall -Wextra -g使用最近的 GCC进行编译。

至少阅读 C++11 标准n3337和一本好的C++ 编程书籍,以及更多关于#include <regex>标准头的信息。

在 Linux 和 POSIX 系统上,您可以使用regex(3)。源代码是可用的,因为是开源的(例如在GNU libcmusl-libc 中),并且在获得许可的情况下,您可以根据您的工作环境对其进行调整。

您也可以使用QtPOCO。两者都有一些正则表达式工具并且是开源的。因此,您可以研究它们的正则表达式的源代码实现以及它们与下推自动机的关系。另请阅读递归下降解析器并考虑使用解析器生成器(如果允许),例如GNU bisonflexANTLR。如果性能是一个主要问题,请考虑使用(经许可)代码生成库,如libgccjitasmjitGNU Lightningtinycc

当然,读龙书。它解释了正则表达式的基本概念。另请阅读最近在 ACM SIGPLAN会议上发表的论文。

如果您的管理层特别需要GCC 4.8(我会考虑以如此愚蠢的要求换工作 - 因为交叉编译GCC 10 很容易,而且 GCC 在五年内改进了很多),您至少应该获得编译一些现有正则表达式的许可开源库(你会在githubgitlab上找到其中的许多),或者在boost中。

当然考虑请求允许使用最近的 Clang编译器(你可以从它的源代码编译它,因为它是开源的)、Clang 静态分析器,也许还有Frama-C++,并阅读这份报告草案。另见CHRIOTDECODER欧洲项目。

PS。交叉编译 GCC 10 需要一两天(如果您是新手)。编写正则表达式库可能需要数周时间。


推荐阅读