c++ - 可用于 gcc4.8 的正则表达式实现
问题描述
根据我的发现,正则表达式在 gcc4.8 上不起作用。在交叉编译期间,我遇到了关于正则表达式的运行时错误。你知道我如何在 gcc4.8 上使用正则表达式的其他方法吗?我正在考虑创建自己的,但如果已经有可用的可用,我会徘徊。
解决方案
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 libc或musl-libc 中),并且在获得许可的情况下,您可以根据您的工作环境对其进行调整。
您也可以使用Qt或POCO。两者都有一些正则表达式工具并且是开源的。因此,您可以研究它们的正则表达式的源代码实现以及它们与下推自动机的关系。另请阅读递归下降解析器并考虑使用解析器生成器(如果允许),例如GNU bison、flex或ANTLR。如果性能是一个主要问题,请考虑使用(经许可)代码生成库,如libgccjit、asmjit、GNU Lightning、tinycc。
当然,读龙书。它解释了正则表达式的基本概念。另请阅读最近在 ACM SIGPLAN会议上发表的论文。
如果您的管理层特别需要GCC 4.8(我会考虑以如此愚蠢的要求换工作 - 因为交叉编译GCC 10 很容易,而且 GCC 在五年内改进了很多),您至少应该获得编译一些现有正则表达式的许可开源库(你会在github或gitlab上找到其中的许多),或者在boost中。
当然考虑请求允许使用最近的 Clang编译器(你可以从它的源代码编译它,因为它是开源的)、Clang 静态分析器,也许还有Frama-C++,并阅读这份报告草案。另见CHRIOT和DECODER欧洲项目。
PS。交叉编译 GCC 10 需要一两天(如果您是新手)。编写正则表达式库可能需要数周时间。
推荐阅读
- repeat - Documentum DQL 通过重复属性连接
- laravel - 如何在 laravel 数据透视表附加字段中保存图像
- ios - 使用大标题时如何将导航标题左对齐?
- javascript - 测试反应 js 应用程序时 npm 测试失败
- javascript - 为什么 jQuery 采用原始 DOM 元素类,即使我用 jQuery 更改了它们?
- javascript - 除非调用 location.reload,否则无法取消设置 GET 参数
- solidity - 如何在 Solidity 中为函数设置默认参数
- android - 无法使用 AppBar 更改工具栏上的阴影
- java - 我在通过接口传递数据时遇到问题
- javascript - 在 Amazon Linux 中以普通用户身份运行时,Node JS 找不到模块“node-properties-parser”错误