如何在Python中使用m4以及如何处理独立和空白
在Python中使用m4有一个好的通用策略吗?具体来说,Python的空白要求使得使用m4有些尴尬。例如,以下程序:如何在Python中使用m4以及如何处理独立和空白,python,macros,m4,Python,Macros,M4,在Python中使用m4有一个好的通用策略吗?具体来说,Python的空白要求使得使用m4有些尴尬。例如,以下程序: def foo(): pushdef(`X',`1=$2') 包括(test01.def) popdef(`X') foo() 使用test01.defas 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
def foo():
pushdef(`X',`1=$2')
包括(test01.def)
popdef(`X')
foo()
使用test01.def
as
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')
包括(test01.def)
popdef(`X')
foo()
然而,我觉得我们编辑的文件变得丑陋,因为在我们的代码组织中更难跟踪缩进。真的,我想做的是使用第一个程序,让m4在include之前吃掉前导空格。我不确定m4是否有可能吃掉前导空格
此外,我知道有一些特定于Python的宏实用程序。但是,我对使用这些工具不感兴趣。我需要在许多不同的语言中使用这些X宏,比如在C和LaTeX中,我打算在每种情况下都使用m4,因为m4很容易获得,而且语言不可知。因此,如果可能的话,我真的在寻找m4解决方案。以下类似的解决方案是否可以接受
define(在新的行中包含)`
包括(1美元)
`def foo():'
pushdef(`X',`1=$2')
在新的行(`test01.def')中包含
popdef(`X')
`foo()'
如果您觉得输出更令人满意,可以在前一行添加一个额外的dnl
。不是所有的报价都需要,但我喜欢谨慎
但老实说,我发现你的“丑陋”解决方案更容易理解。为什么M4代码应该像Python代码一样缩进?缩进是首选项。真的,这一切都有效,但我更容易看到缩进的东西。