3

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 を使用するつもりです。そのため、可能な場合は m4 ソリューションを本当に探しています。

4

1 に答える 1

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 コードのようにインデントする必要があるのはなぜですか?

于 2015-03-12T22:16:39.490 に答える