如何将 m4 与 Python 一起使用并处理缩进和空格



在 Python 中使用 m4 有没有一个好的通用策略? 具体来说,Python的空白要求使得使用m4有些尴尬。 例如,以下程序:

def foo():
    pushdef(`X',`    $1 = $2')
    include(test01.def)
    popdef(`X')
foo()

test01.def作为

X(x,1)
X(y,2)
X(z,3)

生成 python 程序:

def foo():
        x = 1
    y = 2
    z = 3

foo()

因此,缩进已关闭。 当然,我们可以通过以下方式解决此问题

def foo():
pushdef(`X',`    $1 = $2')
include(test01.def)
popdef(`X')
foo()

但是,我觉得我们编辑的文件变得丑陋,因为很难跟踪代码组织中的缩进。 真的,我希望能够做的是使用第一个程序,让 m4 在包含之前吃掉前导空格。 我不确定 m4 是否有可能吃掉前导空格。

此外,我知道有特定于Python的宏实用程序。 但是,我对使用这些不感兴趣。 我需要在许多不同的语言中使用这些 X 宏,例如在 C 和 LaTeX 中,我打算在每种情况下使用 m4,因为它很容易获得并且与语言无关。 因此,如果可能的话,我真的在寻找 m4 解决方案。

像下面这样的事情可以接受吗?

define(INCLUDE_ON_NEW_LINE, `
include($1)')
`def foo():'
    pushdef(`X',`    $1 = $2')
    INCLUDE_ON_NEW_LINE(`test01.def')
    popdef(`X')
`foo()'

如果您发现前一行的输出更令人愉悦,则可以在前一行放置额外的dnl。 并非所有报价都是需要的,但我喜欢谨慎。

但老实说,我发现你的"丑陋"解决方案更容易理解。 为什么 M4 代码应该像 Python 代码一样缩进?

相关内容

  • 没有找到相关文章

最新更新