質問

tcl C-APIを使用して文字列を「解析」し、すべての置換(角括弧内のサブコマンドを含む)を行う(ab)方法はありますが、結果のコマンドラインを実際に評価する前に停止しますか?

私がやろうとしているのは、ブロックをパラメーターとして使用するコマンド(Cで、しかしエレガントな方法があればtcl-wrapperを実行することを検討します)を作成することです中括弧で囲まれた文字列)。そのブロックを取得し、分割して、実行される場合と同じように置換を実行したいのですが、そこで停止し、代わりに結果の行を解釈します。

有効なすべての最初の単語がコマンドとして定義されている名前空間を作成することを検討しましたが、このリストは非常に広大で(そしてかなり動的です)、すぐに面倒になります。このアプローチも試しましたが、 unknown コマンドを使用して、さまざまなコマンドをインターセプトしました。ただし、 unknown はさまざまなものに使用され、名前空間にバインドできないため、ブロックを実行するたびに定義し、以前の状態に戻す必要があります完了しましたが、これはかなり不安定です。その上で、実際のコマンドと衝突するリスク(ゼロではないが、かなり低いリスク)を実行するため、 unknown コマンドを使用しないことを非常に好みます。

取得できる最も近いものは Tcl_ParseCommand (および残りのファミリ)で、解析ツリーを生成し、手動で評価できます。より良い解決策がない場合は、この方法に頼ることになると思いますが、「公式」な方法があれば、もちろんそれを好むでしょう。

何かが足りませんか?

役に立ちましたか?

解決

Tcl_SubstObj をご覧ください。これは[subst]コマンドに相当するCです。探しているもののようです。

あなたがコメントで指摘したように、substはあなたが望んでいることをまったくしていません。役立つ場合は、次のTclコードが探しているものである可能性があります。

> set mydata {mylist item $listitem group item {$group item}}
> set listitem {1 2 3}
> subst $mydata      ;# error: can't read "group": no such variable
> proc groupsubst {data} {
    return [uplevel 1 list $data]
}
> groupsubst $mydata ;# mylist item {1 2 3} group item {$group item}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top