【问题标题】:How to use m4 with Python and dealing with indendentation and whitespace如何在 Python 中使用 m4 并处理缩进和空格
【发布时间】:2015-05-15 06:11:54
【问题描述】:

在 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 解决方案。

【问题讨论】:

    标签: python macros m4


    【解决方案1】:

    以下内容可以接受吗?

    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 代码一样缩进?

    【讨论】:

    • 缩进是一种偏好。真的,一切正常,但我更容易看到缩进的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多