使用 m4 进行条件编译/解释



我想将m4用作缺少此功能的几种不同脚本语言的预处理器。

特别是,我需要模拟条件代码包含的C预处理器(cpp(功能:

#if something
some
long
code
block
#else
alternate
code
block
#if something-else
do
more
stuff
#endif
#endif

m4 的ifelse()不是特别适合长代码块,因此似乎我基本上需要编写 m4 宏来模拟这一点,方法是测试条件,然后根据需要使用divert包含或排除块。

棘手的部分是跟踪嵌套级别;据我所知,我必须在 m4 中实现自己的堆栈才能做到这一点。 这在概念上似乎很简单,我相信通过一两天的黑客攻击,我可以拥有一个有效的系统。

但这感觉就像重新发明轮子——我肯定不能成为第一个有这种需求的人。 现有的、经过测试的、强大的解决方案肯定比我作为 m4 等级初学者所能破解的任何东西都要好。

这有常见的 m4 习语吗? 是否有现有的开源 m4 代码来执行此操作? 在搜索引擎中闲逛并没有发现任何有用的东西。

(由于 cpp 自己的文档中给出的原因,使用 cpp 本身是行不通的:"它会在不遵守 C 的词法规则的输入上阻塞。 似乎 gpp 具有开箱即用的此功能,因此使用它可能更有意义,但如果让 m4 这样做不是太痛苦,我更喜欢无处不在的 m4。

我也在寻找这个,最终写了我自己的。这是我维基上的代码链接:

http://www.eugeneweb.com/wiki/Sites/M4Macros

我定义了没有#的名称,例如。如果,否则,恩迪夫等...此外,M4 要求括号来保存 CPP(大部分(没有的参数。我还添加了一个选择性调用,以保护具有副作用的宏免受未选择块中的调用。 再见。

相关内容

  • 没有找到相关文章

最新更新