C ++智能宏 - 正则表达式

时间:2017-01-28 16:44:35

标签: c++ regex macros

简介(如果你不想要,请不要阅读,这只是为了背景)
我正在为C ++创建一个API,以便它具有类似python的功能,而不会失去其本质。我已经成功开发了一个自动通用异常处理系统(我问过如何执行此操作here,而@MacZamborg告诉我它是如何工作的,所以我开始从头开始拆除所有内容)。就像我说的那样,我设法重载了很多东西,因此会自动抛出相应的异常(继承自std :: exception)。我唯一遇到麻烦的是ZERO_DIVISION异常,因为看起来你不能仅仅为了整数而重载运算符,也就是说,其中一个参数需要是一个对象。所以我创建了Object Num,它使用union来存储任何可用的数字数据) - >这意味着,我必须对每个运算符重载11次,所以我想避免重载 X = 运算符。 (还问了一些关于它的事情here)。

问题

在任何IDE中都有办法制作智能宏吗?什么是智能宏,你可能会问,好吧,假装有一种叫C +++的新语言,它实现了智能宏>智能宏应该表现得像这样>

#define "regEx" "Literal replacement"

在实践中:

#define '([^\d ]?\w+\s*)\+=' '$groups[0] = $groups[0] + '

([^ \ d]?\ w + \ s *)是groups数组中唯一的元素(语法来自python的regEx,我可能有一些错误,但想法是相同)。 regEx的那一部分将匹配任何有效的变量名称(包括保留的关键字[不可导出,但我们用 \ + = ]除掉它们),也就是任何以任何东西开头的单词但是空格或数字,包含任何字符,以空格(0或更多)结尾。之后,它会查找 + = 运算符,如果匹配,则会使用'$ groups [0] = $ groups [0] +'重新整个匹配,也就是说,无论在唯一的群体中找到什么(用括号表示),'space''=''space''再次找到''space''+'

所有这一切都是为了避免不得不重载 + = 运算符(如果可能,请阅读介绍)

1 个答案:

答案 0 :(得分:4)

听起来你想要的只是一个了解和扩展“智能宏”的自定义预处理器。你可以实现这个,例如作为转换文本文件的python脚本。

至于如何将其集成到构建过程中,这取决于您正在使用的软件。

例如,使用make,您可以执行以下操作:

%.cpp: %.cppx
        mysmartpp $< > $@

现在,如果您有一个名为foo.cppx的源文件,make会自动调用mysmartpp foo.cppx > foo.cpp从中创建foo.cpp。 (这假设您编写了一个理解“智能宏”语法的mysmartpp脚本。